mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-10-01 11:49:51 -04:00
Add POST submit_token endpoint for MSISDN (#6078)
First part of solving #6076
This commit is contained in:
parent
30af161af2
commit
2c99c63453
1
changelog.d/6078.feature
Normal file
1
changelog.d/6078.feature
Normal file
@ -0,0 +1 @@
|
|||||||
|
Add `POST /add_threepid/msisdn/submit_token` endpoint for proxying submitToken on an account_threepid_handler.
|
@ -491,6 +491,40 @@ class IdentityHandler(BaseHandler):
|
|||||||
|
|
||||||
return validation_session
|
return validation_session
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def proxy_msisdn_submit_token(self, id_server, client_secret, sid, token):
|
||||||
|
"""Proxy a POST submitToken request to an identity server for verification purposes
|
||||||
|
|
||||||
|
Args:
|
||||||
|
id_server (str): The identity server URL to contact
|
||||||
|
|
||||||
|
client_secret (str): Secret provided by the client
|
||||||
|
|
||||||
|
sid (str): The ID of the session
|
||||||
|
|
||||||
|
token (str): The verification token
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
SynapseError: If we failed to contact the identity server
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Deferred[dict]: The response dict from the identity server
|
||||||
|
"""
|
||||||
|
body = {"client_secret": client_secret, "sid": sid, "token": token}
|
||||||
|
|
||||||
|
try:
|
||||||
|
return (
|
||||||
|
yield self.http_client.post_json_get_json(
|
||||||
|
id_server + "/_matrix/identity/api/v1/validate/msisdn/submitToken",
|
||||||
|
body,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
except TimeoutError:
|
||||||
|
raise SynapseError(500, "Timed out contacting identity server")
|
||||||
|
except HttpResponseException as e:
|
||||||
|
logger.warning("Error contacting msisdn account_threepid_delegate: %s", e)
|
||||||
|
raise SynapseError(400, "Error contacting the identity server")
|
||||||
|
|
||||||
|
|
||||||
def create_id_access_token_header(id_access_token):
|
def create_id_access_token_header(id_access_token):
|
||||||
"""Create an Authorization header for passing to SimpleHttpClient as the header value
|
"""Create an Authorization header for passing to SimpleHttpClient as the header value
|
||||||
|
@ -524,7 +524,7 @@ class MsisdnThreepidRequestTokenRestServlet(RestServlet):
|
|||||||
return 200, ret
|
return 200, ret
|
||||||
|
|
||||||
|
|
||||||
class AddThreepidSubmitTokenServlet(RestServlet):
|
class AddThreepidEmailSubmitTokenServlet(RestServlet):
|
||||||
"""Handles 3PID validation token submission for adding an email to a user's account"""
|
"""Handles 3PID validation token submission for adding an email to a user's account"""
|
||||||
|
|
||||||
PATTERNS = client_patterns(
|
PATTERNS = client_patterns(
|
||||||
@ -600,6 +600,48 @@ class AddThreepidSubmitTokenServlet(RestServlet):
|
|||||||
finish_request(request)
|
finish_request(request)
|
||||||
|
|
||||||
|
|
||||||
|
class AddThreepidMsisdnSubmitTokenServlet(RestServlet):
|
||||||
|
"""Handles 3PID validation token submission for adding a phone number to a user's
|
||||||
|
account
|
||||||
|
"""
|
||||||
|
|
||||||
|
PATTERNS = client_patterns(
|
||||||
|
"/add_threepid/msisdn/submit_token$", releases=(), unstable=True
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, hs):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
hs (synapse.server.HomeServer): server
|
||||||
|
"""
|
||||||
|
super().__init__()
|
||||||
|
self.config = hs.config
|
||||||
|
self.clock = hs.get_clock()
|
||||||
|
self.store = hs.get_datastore()
|
||||||
|
self.identity_handler = hs.get_handlers().identity_handler
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def on_POST(self, request):
|
||||||
|
if not self.config.account_threepid_delegate_msisdn:
|
||||||
|
raise SynapseError(
|
||||||
|
400,
|
||||||
|
"This homeserver is not validating phone numbers. Use an identity server "
|
||||||
|
"instead.",
|
||||||
|
)
|
||||||
|
|
||||||
|
body = parse_json_object_from_request(request)
|
||||||
|
assert_params_in_dict(body, ["client_secret", "sid", "token"])
|
||||||
|
|
||||||
|
# Proxy submit_token request to msisdn threepid delegate
|
||||||
|
response = yield self.identity_handler.proxy_msisdn_submit_token(
|
||||||
|
self.config.account_threepid_delegate_msisdn,
|
||||||
|
body["client_secret"],
|
||||||
|
body["sid"],
|
||||||
|
body["token"],
|
||||||
|
)
|
||||||
|
return 200, response
|
||||||
|
|
||||||
|
|
||||||
class ThreepidRestServlet(RestServlet):
|
class ThreepidRestServlet(RestServlet):
|
||||||
PATTERNS = client_patterns("/account/3pid$")
|
PATTERNS = client_patterns("/account/3pid$")
|
||||||
|
|
||||||
@ -807,7 +849,8 @@ def register_servlets(hs, http_server):
|
|||||||
DeactivateAccountRestServlet(hs).register(http_server)
|
DeactivateAccountRestServlet(hs).register(http_server)
|
||||||
EmailThreepidRequestTokenRestServlet(hs).register(http_server)
|
EmailThreepidRequestTokenRestServlet(hs).register(http_server)
|
||||||
MsisdnThreepidRequestTokenRestServlet(hs).register(http_server)
|
MsisdnThreepidRequestTokenRestServlet(hs).register(http_server)
|
||||||
AddThreepidSubmitTokenServlet(hs).register(http_server)
|
AddThreepidEmailSubmitTokenServlet(hs).register(http_server)
|
||||||
|
AddThreepidMsisdnSubmitTokenServlet(hs).register(http_server)
|
||||||
ThreepidRestServlet(hs).register(http_server)
|
ThreepidRestServlet(hs).register(http_server)
|
||||||
ThreepidAddRestServlet(hs).register(http_server)
|
ThreepidAddRestServlet(hs).register(http_server)
|
||||||
ThreepidBindRestServlet(hs).register(http_server)
|
ThreepidBindRestServlet(hs).register(http_server)
|
||||||
|
Loading…
Reference in New Issue
Block a user