From 0b036204cacc237f702c5a519b82a093d933845d Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 27 Apr 2022 14:31:57 +0300 Subject: [PATCH] Update dependencies and reduce memory usage when encryping files --- go.mod | 8 ++++---- go.sum | 18 ++++++++---------- portal.go | 17 +++++++++-------- urlpreview.go | 5 +++-- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 21195d5..54eb4e3 100644 --- a/go.mod +++ b/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 diff --git a/go.sum b/go.sum index 2bf79f7..60d42ff 100644 --- a/go.sum +++ b/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= diff --git a/portal.go b/portal.go index a687187..87913b0 100644 --- a/portal.go +++ b/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 diff --git a/urlpreview.go b/urlpreview.go index 65cb184..99a57c9 100644 --- a/urlpreview.go +++ b/urlpreview.go @@ -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