diff options
author | Loïck Bonniot <git@lesterpig.com> | 2020-10-02 18:18:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-02 17:18:20 +0100 |
commit | 4e8c484618f5bfd5b7349cc2afd102cd5feb3861 (patch) | |
tree | 915618d3127f7ead8c5cce5a5814ae861841498a /clientapi/routing | |
parent | 279044cd90722ba98b018b0aa277285113454822 (diff) |
Implement account deactivation (#1455)
* Implement account deactivation
See #610
Signed-off-by: Loïck Bonniot <git@lesterpig.com>
* Rename 'is_active' to 'is_deactivated'
Signed-off-by: Loïck Bonniot <git@lesterpig.com>
Co-authored-by: Kegsay <kegan@matrix.org>
Diffstat (limited to 'clientapi/routing')
-rw-r--r-- | clientapi/routing/deactivate.go | 55 | ||||
-rw-r--r-- | clientapi/routing/routing.go | 9 |
2 files changed, 64 insertions, 0 deletions
diff --git a/clientapi/routing/deactivate.go b/clientapi/routing/deactivate.go new file mode 100644 index 00000000..effe3769 --- /dev/null +++ b/clientapi/routing/deactivate.go @@ -0,0 +1,55 @@ +package routing + +import ( + "io/ioutil" + "net/http" + + "github.com/matrix-org/dendrite/clientapi/auth" + "github.com/matrix-org/dendrite/clientapi/jsonerror" + "github.com/matrix-org/dendrite/userapi/api" + "github.com/matrix-org/gomatrixserverlib" + "github.com/matrix-org/util" +) + +// Deactivate handles POST requests to /account/deactivate +func Deactivate( + req *http.Request, + userInteractiveAuth *auth.UserInteractive, + userAPI api.UserInternalAPI, + deviceAPI *api.Device, +) util.JSONResponse { + ctx := req.Context() + defer req.Body.Close() // nolint:errcheck + bodyBytes, err := ioutil.ReadAll(req.Body) + if err != nil { + return util.JSONResponse{ + Code: http.StatusBadRequest, + JSON: jsonerror.BadJSON("The request body could not be read: " + err.Error()), + } + } + + login, errRes := userInteractiveAuth.Verify(ctx, bodyBytes, deviceAPI) + if errRes != nil { + return *errRes + } + + localpart, _, err := gomatrixserverlib.SplitID('@', login.User) + if err != nil { + util.GetLogger(req.Context()).WithError(err).Error("gomatrixserverlib.SplitID failed") + return jsonerror.InternalServerError() + } + + var res api.PerformAccountDeactivationResponse + err = userAPI.PerformAccountDeactivation(ctx, &api.PerformAccountDeactivationRequest{ + Localpart: localpart, + }, &res) + if err != nil { + util.GetLogger(ctx).WithError(err).Error("userAPI.PerformAccountDeactivation failed") + return jsonerror.InternalServerError() + } + + return util.JSONResponse{ + Code: http.StatusOK, + JSON: struct{}{}, + } +} diff --git a/clientapi/routing/routing.go b/clientapi/routing/routing.go index ab56c5f4..8606f69c 100644 --- a/clientapi/routing/routing.go +++ b/clientapi/routing/routing.go @@ -435,6 +435,15 @@ func Setup( }), ).Methods(http.MethodPost, http.MethodOptions) + r0mux.Handle("/account/deactivate", + httputil.MakeAuthAPI("deactivate", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse { + if r := rateLimits.rateLimit(req); r != nil { + return *r + } + return Deactivate(req, userInteractiveAuth, userAPI, device) + }), + ).Methods(http.MethodPost, http.MethodOptions) + // Stub endpoints required by Riot r0mux.Handle("/login", |