aboutsummaryrefslogtreecommitdiff
path: root/clientapi/routing
diff options
context:
space:
mode:
authorLoïck Bonniot <git@lesterpig.com>2020-10-02 18:18:20 +0200
committerGitHub <noreply@github.com>2020-10-02 17:18:20 +0100
commit4e8c484618f5bfd5b7349cc2afd102cd5feb3861 (patch)
tree915618d3127f7ead8c5cce5a5814ae861841498a /clientapi/routing
parent279044cd90722ba98b018b0aa277285113454822 (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.go55
-rw-r--r--clientapi/routing/routing.go9
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",