forked from MirrorHub/mautrix-whatsapp
Update dependencies and reduce memory usage when encryping files
This commit is contained in:
parent
54ad27f644
commit
0b036204ca
4 changed files with 24 additions and 24 deletions
8
go.mod
8
go.mod
|
@ -9,15 +9,15 @@ require (
|
|||
github.com/mattn/go-sqlite3 v1.14.12
|
||||
github.com/prometheus/client_golang v1.11.1
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
|
||||
github.com/tidwall/gjson v1.14.0
|
||||
github.com/tidwall/gjson v1.14.1
|
||||
go.mau.fi/whatsmeow v0.0.0-20220425142103-46b439456742
|
||||
golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9
|
||||
golang.org/x/net v0.0.0-20220412020605-290c469a71a5
|
||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4
|
||||
google.golang.org/protobuf v1.28.0
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
|
||||
maunium.net/go/mauflag v1.0.0
|
||||
maunium.net/go/maulogger/v2 v2.3.2
|
||||
maunium.net/go/mautrix v0.10.13-0.20220422101850-e803aa209b0a
|
||||
maunium.net/go/mautrix v0.10.13-0.20220427112957-a59522681515
|
||||
)
|
||||
|
||||
require (
|
||||
|
@ -32,7 +32,7 @@ require (
|
|||
github.com/tidwall/match v1.1.1 // indirect
|
||||
github.com/tidwall/pretty v1.2.0 // indirect
|
||||
github.com/tidwall/sjson v1.2.4 // indirect
|
||||
github.com/yuin/goldmark v1.4.11 // indirect
|
||||
github.com/yuin/goldmark v1.4.12 // indirect
|
||||
go.mau.fi/libsignal v0.0.0-20220425070825-c40c839ee6a0 // indirect
|
||||
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect
|
||||
|
|
18
go.sum
18
go.sum
|
@ -108,16 +108,16 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P
|
|||
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
github.com/tidwall/gjson v1.14.0 h1:6aeJ0bzojgWLa82gDQHcx3S0Lr/O51I9bJ5nv6JFx5w=
|
||||
github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
github.com/tidwall/gjson v1.14.1 h1:iymTbGkQBhveq21bEvAQ81I0LEBork8BFe1CUZXdyuo=
|
||||
github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
|
||||
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
|
||||
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
|
||||
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
|
||||
github.com/tidwall/sjson v1.2.4 h1:cuiLzLnaMeBhRmEv00Lpk3tkYrcxpmbU81tAY4Dw0tc=
|
||||
github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM=
|
||||
github.com/yuin/goldmark v1.4.11 h1:i45YIzqLnUc2tGaTlJCyUxSG8TvgyGqhqOZOUKIjJ6w=
|
||||
github.com/yuin/goldmark v1.4.11/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg=
|
||||
github.com/yuin/goldmark v1.4.12 h1:6hffw6vALvEDqJ19dOJvJKOoAOKe4NDaTqvd2sktGN0=
|
||||
github.com/yuin/goldmark v1.4.12/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
go.mau.fi/libsignal v0.0.0-20220425070825-c40c839ee6a0 h1:3IQF2bgAyibdo77hTejwuJe4jlypj9QaE4xCQuxrThM=
|
||||
go.mau.fi/libsignal v0.0.0-20220425070825-c40c839ee6a0/go.mod h1:kBOXTvYyDG/q1Ihgvd4J6WenGPh7wtEGvPKF6vmf5ak=
|
||||
go.mau.fi/whatsmeow v0.0.0-20220425142103-46b439456742 h1:0DFoHvUhQJf+X8pzgXFvCaEfv/nxO0yb2fn5JpCovjY=
|
||||
|
@ -125,7 +125,6 @@ go.mau.fi/whatsmeow v0.0.0-20220425142103-46b439456742/go.mod h1:iUBgOLNaqShLrR1
|
|||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA=
|
||||
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9 h1:LRtI4W37N+KFebI/qV0OFiLUv4GLOWeEW5hn/KEJvxE=
|
||||
|
@ -137,9 +136,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
|
|||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220412020605-290c469a71a5 h1:bRb386wvrE+oBNdF1d/Xh9mQrfQ4ecYhW5qJ5GvTGT4=
|
||||
golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA=
|
||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
|
@ -199,5 +197,5 @@ maunium.net/go/mauflag v1.0.0 h1:YiaRc0tEI3toYtJMRIfjP+jklH45uDHtT80nUamyD4M=
|
|||
maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA=
|
||||
maunium.net/go/maulogger/v2 v2.3.2 h1:1XmIYmMd3PoQfp9J+PaHhpt80zpfmMqaShzUTC7FwY0=
|
||||
maunium.net/go/maulogger/v2 v2.3.2/go.mod h1:TYWy7wKwz/tIXTpsx8G3mZseIRiC5DoMxSZazOHy68A=
|
||||
maunium.net/go/mautrix v0.10.13-0.20220422101850-e803aa209b0a h1:7RiZF0mg2YWsZ5Dg/QBIZRRSg37fiTN0/h5aln4Mj4M=
|
||||
maunium.net/go/mautrix v0.10.13-0.20220422101850-e803aa209b0a/go.mod h1:zOor2zO/F10T/GbU67vWr0vnhLso88rlRr1HIrb1XWU=
|
||||
maunium.net/go/mautrix v0.10.13-0.20220427112957-a59522681515 h1:n+faOlwr44gHYPLa8eWq0QHYBkePUWzg3IKSGJkTLk8=
|
||||
maunium.net/go/mautrix v0.10.13-0.20220427112957-a59522681515/go.mod h1:lm1eZygpN3wlLyexPh+Z56DEvOuC4tY5/JacJWr+/AE=
|
||||
|
|
17
portal.go
17
portal.go
|
@ -1729,7 +1729,7 @@ func (portal *Portal) convertContactMessage(intent *appservice.IntentAPI, msg *w
|
|||
fileName := fmt.Sprintf("%s.vcf", msg.GetDisplayName())
|
||||
data := []byte(msg.GetVcard())
|
||||
mimeType := "text/vcard"
|
||||
data, uploadMimeType, file := portal.encryptFile(data, mimeType)
|
||||
uploadMimeType, file := portal.encryptFileInPlace(data, mimeType)
|
||||
|
||||
uploadResp, err := intent.UploadBytesWithName(data, uploadMimeType, fileName)
|
||||
if err != nil {
|
||||
|
@ -1935,16 +1935,17 @@ func (portal *Portal) makeMediaBridgeFailureMessage(info *types.MessageInfo, bri
|
|||
return converted
|
||||
}
|
||||
|
||||
func (portal *Portal) encryptFile(data []byte, mimeType string) ([]byte, string, *event.EncryptedFileInfo) {
|
||||
func (portal *Portal) encryptFileInPlace(data []byte, mimeType string) (string, *event.EncryptedFileInfo) {
|
||||
if !portal.Encrypted {
|
||||
return data, mimeType, nil
|
||||
return mimeType, nil
|
||||
}
|
||||
|
||||
file := &event.EncryptedFileInfo{
|
||||
EncryptedFile: *attachment.NewEncryptedFile(),
|
||||
URL: "",
|
||||
}
|
||||
return file.Encrypt(data), "application/octet-stream", file
|
||||
file.Encrypt(data)
|
||||
return "application/octet-stream", file
|
||||
}
|
||||
|
||||
type MediaMessage interface {
|
||||
|
@ -2033,8 +2034,8 @@ func (portal *Portal) convertMediaMessageContent(intent *appservice.IntentAPI, m
|
|||
thumbnailMime := http.DetectContentType(thumbnailData)
|
||||
thumbnailCfg, _, _ := image.DecodeConfig(bytes.NewReader(thumbnailData))
|
||||
thumbnailSize := len(thumbnailData)
|
||||
thumbnail, thumbnailUploadMime, thumbnailFile := portal.encryptFile(thumbnailData, thumbnailMime)
|
||||
uploadedThumbnail, err := intent.UploadBytes(thumbnail, thumbnailUploadMime)
|
||||
thumbnailUploadMime, thumbnailFile := portal.encryptFileInPlace(thumbnailData, thumbnailMime)
|
||||
uploadedThumbnail, err := intent.UploadBytes(thumbnailData, thumbnailUploadMime)
|
||||
if err != nil {
|
||||
portal.log.Warnfln("Failed to upload thumbnail: %v", err)
|
||||
} else if uploadedThumbnail != nil {
|
||||
|
@ -2127,7 +2128,7 @@ func (portal *Portal) convertMediaMessageContent(intent *appservice.IntentAPI, m
|
|||
}
|
||||
|
||||
func (portal *Portal) uploadMedia(intent *appservice.IntentAPI, data []byte, content *event.MessageEventContent) error {
|
||||
data, uploadMimeType, file := portal.encryptFile(data, content.Info.MimeType)
|
||||
uploadMimeType, file := portal.encryptFileInPlace(data, content.Info.MimeType)
|
||||
|
||||
req := mautrix.ReqUploadMedia{
|
||||
ContentBytes: data,
|
||||
|
@ -2449,7 +2450,7 @@ func (portal *Portal) preprocessMatrixMedia(sender *User, relaybotFormatted bool
|
|||
return nil
|
||||
}
|
||||
if file != nil {
|
||||
data, err = file.Decrypt(data)
|
||||
err = file.Decrypt(data)
|
||||
if err != nil {
|
||||
portal.log.Errorfln("Failed to decrypt media in %s: %v", eventID, err)
|
||||
return nil
|
||||
|
|
|
@ -33,6 +33,7 @@ import (
|
|||
|
||||
"go.mau.fi/whatsmeow"
|
||||
waProto "go.mau.fi/whatsmeow/binary/proto"
|
||||
|
||||
"maunium.net/go/mautrix"
|
||||
"maunium.net/go/mautrix/appservice"
|
||||
"maunium.net/go/mautrix/crypto/attachment"
|
||||
|
@ -88,7 +89,7 @@ func (portal *Portal) convertURLPreviewToBeeper(intent *appservice.IntentAPI, so
|
|||
uploadData, uploadMime := thumbnailData, output.ImageType
|
||||
if portal.Encrypted {
|
||||
crypto := attachment.NewEncryptedFile()
|
||||
uploadData = crypto.Encrypt(uploadData)
|
||||
crypto.Encrypt(uploadData)
|
||||
uploadMime = "application/octet-stream"
|
||||
output.ImageEncryption = &event.EncryptedFileInfo{EncryptedFile: *crypto}
|
||||
}
|
||||
|
@ -168,7 +169,7 @@ func (portal *Portal) convertURLPreviewToWhatsApp(sender *User, evt *event.Event
|
|||
return true
|
||||
}
|
||||
if preview.ImageEncryption != nil {
|
||||
data, err = preview.ImageEncryption.Decrypt(data)
|
||||
err = preview.ImageEncryption.Decrypt(data)
|
||||
if err != nil {
|
||||
portal.log.Errorfln("Failed to decrypt URL preview image in %s: %v", evt.ID, err)
|
||||
return true
|
||||
|
|
Loading…
Reference in a new issue