2 files changed, 9 insertions, 11 deletions
diff --git a/changelog.d/16617.bugfix b/changelog.d/16617.bugfix
new file mode 100644
index 0000000000..7e66799a6c
--- /dev/null
+++ b/changelog.d/16617.bugfix
@@ -0,0 +1 @@
+Fix a long-standing bug where Synapse would not unbind third-party identifiers for Application Service users when deactivated and would not emit a compliant response.
\ No newline at end of file
diff --git a/synapse/rest/client/account.py b/synapse/rest/client/account.py
index 641390cb30..0c0e82627d 100644
--- a/synapse/rest/client/account.py
+++ b/synapse/rest/client/account.py
@@ -299,19 +299,16 @@ class DeactivateAccountRestServlet(RestServlet):
requester = await self.auth.get_user_by_req(request)
- # allow ASes to deactivate their own users
- if requester.app_service:
- await self._deactivate_account_handler.deactivate_account(
- requester.user.to_string(), body.erase, requester
+ # allow ASes to deactivate their own users:
+ # ASes don't need user-interactive auth
+ if not requester.app_service:
+ await self.auth_handler.validate_user_via_ui_auth(
+ requester,
+ request,
+ body.dict(exclude_unset=True),
+ "deactivate your account",
)
- return 200, {}
- await self.auth_handler.validate_user_via_ui_auth(
- requester,
- request,
- body.dict(exclude_unset=True),
- "deactivate your account",
- )
result = await self._deactivate_account_handler.deactivate_account(
requester.user.to_string(), body.erase, requester, id_server=body.id_server
)
|