From 59e1b961142decc0a90c17da08d52353a8593a88 Mon Sep 17 00:00:00 2001 From: Rudraksh Pareek <54525605+DelusionalOptimist@users.noreply.github.com> Date: Sat, 9 Jan 2021 02:15:33 +0530 Subject: [PATCH] Implement content repository configuration endpoint Signed-off-by: Rudraksh Pareek <54525605+DelusionalOptimist@users.noreply.github.com> --- mediaapi/routing/config.go | 37 +++++++++++++++++++++++++++++++++++++ mediaapi/routing/routing.go | 6 ++++++ sytest-whitelist | 1 + 3 files changed, 44 insertions(+) create mode 100644 mediaapi/routing/config.go diff --git a/mediaapi/routing/config.go b/mediaapi/routing/config.go new file mode 100644 index 000000000..f362deffb --- /dev/null +++ b/mediaapi/routing/config.go @@ -0,0 +1,37 @@ +// Copyright 2017 Vector Creations Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package routing + +import ( + "net/http" + + "github.com/matrix-org/dendrite/setup/config" + "github.com/matrix-org/util" +) + +// mediaConfigResponse represents a response for a `config` request +type mediaConfigResponse struct { + MaxFileSizeBytes *config.FileSizeBytes `json:"m.upload.size"` +} + +// Config implements `/config` which allows clients to retrieve the +// configuration of the content repository, such as upload limitations. +// https://matrix.org/docs/spec/client_server/latest#get-matrix-media-r0-config +func Config(req *http.Request, cfg *config.MediaAPI) util.JSONResponse { + return util.JSONResponse{ + Code: http.StatusOK, + JSON: mediaConfigResponse{MaxFileSizeBytes: cfg.MaxFileSizeBytes}, + } +} diff --git a/mediaapi/routing/routing.go b/mediaapi/routing/routing.go index 917a85964..6a88ea6e1 100644 --- a/mediaapi/routing/routing.go +++ b/mediaapi/routing/routing.go @@ -74,6 +74,12 @@ func Setup( r0mux.Handle("/thumbnail/{serverName}/{mediaId}", makeDownloadAPI("thumbnail", cfg, db, client, activeRemoteRequests, activeThumbnailGeneration), ).Methods(http.MethodGet, http.MethodOptions) + + r0mux.Handle("/config", + httputil.MakeAuthAPI("config", userAPI, func(req *http.Request, dev *userapi.Device) util.JSONResponse { + return Config(req, cfg) + }), + ).Methods(http.MethodGet, http.MethodOptions) } func makeDownloadAPI( diff --git a/sytest-whitelist b/sytest-whitelist index d53fa899d..5e4d38c6a 100644 --- a/sytest-whitelist +++ b/sytest-whitelist @@ -511,3 +511,4 @@ Can pass a JSON filter as a query parameter Local room members can get room messages Remote room members can get room messages Guest users can send messages to guest_access rooms if joined +Can read configuration endpoint