From 170a52d0263e1ad6b4488a6f88b06572df536502 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Tue, 10 Oct 2017 14:34:43 +0100 Subject: [PATCH] Fixup filters --- .../dendrite/clientapi/readers/filter.go | 72 ------------------- .../clientapi/{writers => routing}/filter.go | 53 ++++++++++++-- .../dendrite/clientapi/routing/routing.go | 5 +- 3 files changed, 50 insertions(+), 80 deletions(-) delete mode 100644 src/github.com/matrix-org/dendrite/clientapi/readers/filter.go rename src/github.com/matrix-org/dendrite/clientapi/{writers => routing}/filter.go (64%) diff --git a/src/github.com/matrix-org/dendrite/clientapi/readers/filter.go b/src/github.com/matrix-org/dendrite/clientapi/readers/filter.go deleted file mode 100644 index db981bec7..000000000 --- a/src/github.com/matrix-org/dendrite/clientapi/readers/filter.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2017 Jan Christian Grünhage -// -// 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 readers - -import ( - "net/http" - - "encoding/json" - - "github.com/matrix-org/dendrite/clientapi/auth/authtypes" - "github.com/matrix-org/dendrite/clientapi/auth/storage/accounts" - "github.com/matrix-org/dendrite/clientapi/httputil" - "github.com/matrix-org/dendrite/clientapi/jsonerror" - "github.com/matrix-org/gomatrix" - "github.com/matrix-org/gomatrixserverlib" - "github.com/matrix-org/util" -) - -// GetFilter implements GET /_matrix/client/r0/user/{userId}/filter/{filterId} -func GetFilter( - req *http.Request, device *authtypes.Device, accountDB *accounts.Database, userID string, filterID string, -) util.JSONResponse { - if req.Method != http.MethodGet { - return util.JSONResponse{ - Code: 405, - JSON: jsonerror.NotFound("Bad method"), - } - } - if userID != device.UserID { - return util.JSONResponse{ - Code: 403, - JSON: jsonerror.Forbidden("Cannot get filters for other users"), - } - } - localpart, _, err := gomatrixserverlib.SplitID('@', userID) - if err != nil { - return httputil.LogThenError(req, err) - } - - res, err := accountDB.GetFilter(req.Context(), localpart, filterID) - if err != nil { - //TODO better error handling. This error message is *probably* right, - // but if there are obscure db errors, this will also be returned, - // even though it is not correct. - return util.JSONResponse{ - Code: 400, - JSON: jsonerror.NotFound("No such filter"), - } - } - filter := gomatrix.Filter{} - err = json.Unmarshal([]byte(res), &filter) - if err != nil { - httputil.LogThenError(req, err) - } - - return util.JSONResponse{ - Code: 200, - JSON: filter, - } -} diff --git a/src/github.com/matrix-org/dendrite/clientapi/writers/filter.go b/src/github.com/matrix-org/dendrite/clientapi/routing/filter.go similarity index 64% rename from src/github.com/matrix-org/dendrite/clientapi/writers/filter.go rename to src/github.com/matrix-org/dendrite/clientapi/routing/filter.go index 6deb9a173..9eef56af8 100644 --- a/src/github.com/matrix-org/dendrite/clientapi/writers/filter.go +++ b/src/github.com/matrix-org/dendrite/clientapi/routing/filter.go @@ -12,22 +12,65 @@ // See the License for the specific language governing permissions and // limitations under the License. -package writers +package routing import ( "net/http" + "encoding/json" - "github.com/matrix-org/dendrite/clientapi/auth/storage/accounts" "github.com/matrix-org/dendrite/clientapi/auth/authtypes" - "github.com/matrix-org/util" + "github.com/matrix-org/dendrite/clientapi/auth/storage/accounts" + "github.com/matrix-org/dendrite/clientapi/httputil" "github.com/matrix-org/dendrite/clientapi/jsonerror" "github.com/matrix-org/gomatrix" "github.com/matrix-org/gomatrixserverlib" - "github.com/matrix-org/dendrite/clientapi/httputil" - "encoding/json" + "github.com/matrix-org/util" ) +// GetFilter implements GET /_matrix/client/r0/user/{userId}/filter/{filterId} +func GetFilter( + req *http.Request, device *authtypes.Device, accountDB *accounts.Database, userID string, filterID string, +) util.JSONResponse { + if req.Method != http.MethodGet { + return util.JSONResponse{ + Code: 405, + JSON: jsonerror.NotFound("Bad method"), + } + } + if userID != device.UserID { + return util.JSONResponse{ + Code: 403, + JSON: jsonerror.Forbidden("Cannot get filters for other users"), + } + } + localpart, _, err := gomatrixserverlib.SplitID('@', userID) + if err != nil { + return httputil.LogThenError(req, err) + } + + res, err := accountDB.GetFilter(req.Context(), localpart, filterID) + if err != nil { + //TODO better error handling. This error message is *probably* right, + // but if there are obscure db errors, this will also be returned, + // even though it is not correct. + return util.JSONResponse{ + Code: 400, + JSON: jsonerror.NotFound("No such filter"), + } + } + filter := gomatrix.Filter{} + err = json.Unmarshal([]byte(res), &filter) + if err != nil { + httputil.LogThenError(req, err) + } + + return util.JSONResponse{ + Code: 200, + JSON: filter, + } +} + type filterResponse struct { FilterID string `json:"filter_id"` } diff --git a/src/github.com/matrix-org/dendrite/clientapi/routing/routing.go b/src/github.com/matrix-org/dendrite/clientapi/routing/routing.go index 3168b40fe..0b9e4172a 100644 --- a/src/github.com/matrix-org/dendrite/clientapi/routing/routing.go +++ b/src/github.com/matrix-org/dendrite/clientapi/routing/routing.go @@ -187,18 +187,17 @@ func Setup( }), ).Methods("GET") - r0mux.Handle("/user/{userId}/filter", common.MakeAuthAPI("put_filter", deviceDB, func(req *http.Request, device *authtypes.Device) util.JSONResponse { vars := mux.Vars(req) - return writers.PutFilter(req, device, accountDB, vars["userId"]) + return PutFilter(req, device, accountDB, vars["userId"]) }), ).Methods("POST", "OPTIONS") r0mux.Handle("/user/{userId}/filter/{filterId}", common.MakeAuthAPI("get_filter", deviceDB, func(req *http.Request, device *authtypes.Device) util.JSONResponse { vars := mux.Vars(req) - return readers.GetFilter(req, device, accountDB, vars["userId"], vars["filterId"]) + return GetFilter(req, device, accountDB, vars["userId"], vars["filterId"]) }), ).Methods("GET")