From 1d3e6bfe93d0a3e76039c213ebd2e8d97076a310 Mon Sep 17 00:00:00 2001 From: Christoph Holtermann Date: Fri, 9 May 2025 20:47:29 +0200 Subject: [PATCH] Implement Matrix Authenticated Media for Servers --- bridge/matrix/matrix.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/bridge/matrix/matrix.go b/bridge/matrix/matrix.go index 49fc33b3..5ffb901b 100644 --- a/bridge/matrix/matrix.go +++ b/bridge/matrix/matrix.go @@ -569,7 +569,20 @@ func (b *Bmatrix) handleDownloadFile(rmsg *config.Message, content map[string]in if url, ok = content["url"].(string); !ok { return fmt.Errorf("url isn't a %T", url) } - url = strings.Replace(url, "mxc://", b.GetString("Server")+"/_matrix/media/v1/download/", -1) + + mediaURL := strings.Replace(url, "mxc://", b.GetString("Server")+"/_matrix/client/v1/media/download/", 1) + logURL := mediaURL + + token := b.GetString("Token") + if token == "" && b.mc != nil && b.mc.AccessToken != "" { + token = b.mc.AccessToken + } + if token != "" { + logURL = mediaURL + "?access_token=[REDACTED]" + mediaURL += "?access_token=" + token + } + url = mediaURL + b.Log.Debugf("Generated Matrix media download URL: %s", logURL) if info, ok = content["info"].(map[string]interface{}); !ok { return fmt.Errorf("info isn't a %T", info)