Skip to content
Snippets Groups Projects
Unverified Commit 28238ca4 authored by Travis Ralston's avatar Travis Ralston Committed by GitHub
Browse files

Support `HEAD` on `/download`, per MSC4120 (#578)

* Support `HEAD` on `/download`, per MSC4120

https://github.com/matrix-org/matrix-spec-proposals/pull/4120

* Changelog
parent 2f8a209b
No related branches found
No related tags found
No related merge requests found
......@@ -10,6 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
### Added
* New datastore option to ignore Redis cache when downloading media served by a `publicBaseUrl`. This can help ensure more requests get redirected to the CDN.
* `HEAD /download` is now supported, as per [MSC4120](https://github.com/matrix-org/matrix-spec-proposals/pull/4120).
### Fixed
......
......@@ -53,6 +53,13 @@ func DownloadMedia(r *http.Request, rctx rcontext.RequestContext, user _apimeta.
return _responses.BadRequest("timeout_ms does not appear to be an integer")
}
recordOnly := false
if r.Method == http.MethodHead {
rctx.Log.Debug("HEAD request received - changing parameters")
//downloadRemote = false // we allow the download to go through to ensure proper metadata is returned
recordOnly = true
}
rctx = rctx.LogWithFields(logrus.Fields{
"mediaId": mediaId,
"server": server,
......@@ -70,6 +77,7 @@ func DownloadMedia(r *http.Request, rctx rcontext.RequestContext, user _apimeta.
FetchRemoteIfNeeded: downloadRemote,
BlockForReadUntil: blockFor,
CanRedirect: canRedirect,
RecordOnly: recordOnly,
})
if err != nil {
var redirect datastores.RedirectError
......
......@@ -33,8 +33,8 @@ func buildRoutes() http.Handler {
register([]string{"PUT"}, PrefixMedia, "upload/:server/:mediaId", mxV3, router, makeRoute(_routers.RequireAccessToken(r0.UploadMediaAsync), "upload_async", counter))
register([]string{"POST"}, PrefixMedia, "upload", mxSpecV3Transition, router, makeRoute(_routers.RequireAccessToken(r0.UploadMediaSync), "upload", counter))
downloadRoute := makeRoute(_routers.OptionalAccessToken(r0.DownloadMedia), "download", counter)
register([]string{"GET"}, PrefixMedia, "download/:server/:mediaId/:filename", mxSpecV3Transition, router, downloadRoute)
register([]string{"GET"}, PrefixMedia, "download/:server/:mediaId", mxSpecV3Transition, router, downloadRoute)
register([]string{"GET", "HEAD"}, PrefixMedia, "download/:server/:mediaId/:filename", mxSpecV3Transition, router, downloadRoute)
register([]string{"GET", "HEAD"}, PrefixMedia, "download/:server/:mediaId", mxSpecV3Transition, router, downloadRoute)
register([]string{"GET"}, PrefixMedia, "thumbnail/:server/:mediaId", mxSpecV3Transition, router, makeRoute(_routers.OptionalAccessToken(r0.ThumbnailMedia), "thumbnail", counter))
register([]string{"GET"}, PrefixMedia, "preview_url", mxSpecV3TransitionCS, router, makeRoute(_routers.RequireAccessToken(r0.PreviewUrl), "url_preview", counter))
register([]string{"GET"}, PrefixMedia, "identicon/*seed", mxR0, router, makeRoute(_routers.OptionalAccessToken(r0.Identicon), "identicon", counter))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment