diff options
author | Andrew Morgan <andrew@amorgan.xyz> | 2020-02-25 10:17:18 +0000 |
---|---|---|
committer | Andrew Morgan <andrew@amorgan.xyz> | 2020-02-25 10:17:18 +0000 |
commit | d7252d98bd47bd905d14acb18d853e1c45888358 (patch) | |
tree | da909f0ee1489e8c7fb96a32aed31f757753b823 /synapse/rest/client/v2_alpha/account.py | |
parent | Remove bind_email and bind_msisdn (#5964) (diff) | |
parent | Add POST /_matrix/client/r0/account/3pid/unbind (MSC2140) (#5980) (diff) | |
download | synapse-d7252d98bd47bd905d14acb18d853e1c45888358.tar.xz |
Add POST /_matrix/client/r0/account/3pid/unbind (MSC2140) (#5980)
Diffstat (limited to 'synapse/rest/client/v2_alpha/account.py')
-rw-r--r-- | synapse/rest/client/v2_alpha/account.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/synapse/rest/client/v2_alpha/account.py b/synapse/rest/client/v2_alpha/account.py index d559b05fbc..7140cf472e 100644 --- a/synapse/rest/client/v2_alpha/account.py +++ b/synapse/rest/client/v2_alpha/account.py @@ -641,6 +641,38 @@ class ThreepidRestServlet(RestServlet): ) +class ThreepidUnbindRestServlet(RestServlet): + PATTERNS = client_patterns("/account/3pid/unbind$") + + def __init__(self, hs): + super(ThreepidUnbindRestServlet, self).__init__() + self.hs = hs + self.identity_handler = hs.get_handlers().identity_handler + self.auth = hs.get_auth() + self.datastore = self.hs.get_datastore() + + @defer.inlineCallbacks + def on_POST(self, request): + """Unbind the given 3pid from a specific identity server, or identity servers that are + known to have this 3pid bound + """ + requester = yield self.auth.get_user_by_req(request) + body = parse_json_object_from_request(request) + assert_params_in_dict(body, ["medium", "address"]) + + medium = body.get("medium") + address = body.get("address") + id_server = body.get("id_server") + + # Attempt to unbind the threepid from an identity server. If id_server is None, try to + # unbind from all identity servers this threepid has been added to in the past + result = yield self.identity_handler.try_unbind_threepid( + requester.user.to_string(), + {"address": address, "medium": medium, "id_server": id_server}, + ) + return 200, {"id_server_unbind_result": "success" if result else "no-support"} + + class ThreepidDeleteRestServlet(RestServlet): PATTERNS = client_patterns("/account/3pid/delete$") @@ -781,6 +813,7 @@ def register_servlets(hs, http_server): EmailThreepidRequestTokenRestServlet(hs).register(http_server) MsisdnThreepidRequestTokenRestServlet(hs).register(http_server) ThreepidRestServlet(hs).register(http_server) + ThreepidUnbindRestServlet(hs).register(http_server) ThreepidDeleteRestServlet(hs).register(http_server) ThreepidLookupRestServlet(hs).register(http_server) ThreepidBulkLookupRestServlet(hs).register(http_server) |