Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 2c99c63

Browse files
anoadragon453richvdh
authored andcommitted
Add POST submit_token endpoint for MSISDN (#6078)
First part of solving #6076
1 parent 30af161 commit 2c99c63

File tree

3 files changed

+80
-2
lines changed

3 files changed

+80
-2
lines changed

changelog.d/6078.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add `POST /add_threepid/msisdn/submit_token` endpoint for proxying submitToken on an account_threepid_handler.

synapse/handlers/identity.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,40 @@ def validate_threepid_session(self, client_secret, sid):
491491

492492
return validation_session
493493

494+
@defer.inlineCallbacks
495+
def proxy_msisdn_submit_token(self, id_server, client_secret, sid, token):
496+
"""Proxy a POST submitToken request to an identity server for verification purposes
497+
498+
Args:
499+
id_server (str): The identity server URL to contact
500+
501+
client_secret (str): Secret provided by the client
502+
503+
sid (str): The ID of the session
504+
505+
token (str): The verification token
506+
507+
Raises:
508+
SynapseError: If we failed to contact the identity server
509+
510+
Returns:
511+
Deferred[dict]: The response dict from the identity server
512+
"""
513+
body = {"client_secret": client_secret, "sid": sid, "token": token}
514+
515+
try:
516+
return (
517+
yield self.http_client.post_json_get_json(
518+
id_server + "/_matrix/identity/api/v1/validate/msisdn/submitToken",
519+
body,
520+
)
521+
)
522+
except TimeoutError:
523+
raise SynapseError(500, "Timed out contacting identity server")
524+
except HttpResponseException as e:
525+
logger.warning("Error contacting msisdn account_threepid_delegate: %s", e)
526+
raise SynapseError(400, "Error contacting the identity server")
527+
494528

495529
def create_id_access_token_header(id_access_token):
496530
"""Create an Authorization header for passing to SimpleHttpClient as the header value

synapse/rest/client/v2_alpha/account.py

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ def on_POST(self, request):
524524
return 200, ret
525525

526526

527-
class AddThreepidSubmitTokenServlet(RestServlet):
527+
class AddThreepidEmailSubmitTokenServlet(RestServlet):
528528
"""Handles 3PID validation token submission for adding an email to a user's account"""
529529

530530
PATTERNS = client_patterns(
@@ -600,6 +600,48 @@ def on_GET(self, request):
600600
finish_request(request)
601601

602602

603+
class AddThreepidMsisdnSubmitTokenServlet(RestServlet):
604+
"""Handles 3PID validation token submission for adding a phone number to a user's
605+
account
606+
"""
607+
608+
PATTERNS = client_patterns(
609+
"/add_threepid/msisdn/submit_token$", releases=(), unstable=True
610+
)
611+
612+
def __init__(self, hs):
613+
"""
614+
Args:
615+
hs (synapse.server.HomeServer): server
616+
"""
617+
super().__init__()
618+
self.config = hs.config
619+
self.clock = hs.get_clock()
620+
self.store = hs.get_datastore()
621+
self.identity_handler = hs.get_handlers().identity_handler
622+
623+
@defer.inlineCallbacks
624+
def on_POST(self, request):
625+
if not self.config.account_threepid_delegate_msisdn:
626+
raise SynapseError(
627+
400,
628+
"This homeserver is not validating phone numbers. Use an identity server "
629+
"instead.",
630+
)
631+
632+
body = parse_json_object_from_request(request)
633+
assert_params_in_dict(body, ["client_secret", "sid", "token"])
634+
635+
# Proxy submit_token request to msisdn threepid delegate
636+
response = yield self.identity_handler.proxy_msisdn_submit_token(
637+
self.config.account_threepid_delegate_msisdn,
638+
body["client_secret"],
639+
body["sid"],
640+
body["token"],
641+
)
642+
return 200, response
643+
644+
603645
class ThreepidRestServlet(RestServlet):
604646
PATTERNS = client_patterns("/account/3pid$")
605647

@@ -807,7 +849,8 @@ def register_servlets(hs, http_server):
807849
DeactivateAccountRestServlet(hs).register(http_server)
808850
EmailThreepidRequestTokenRestServlet(hs).register(http_server)
809851
MsisdnThreepidRequestTokenRestServlet(hs).register(http_server)
810-
AddThreepidSubmitTokenServlet(hs).register(http_server)
852+
AddThreepidEmailSubmitTokenServlet(hs).register(http_server)
853+
AddThreepidMsisdnSubmitTokenServlet(hs).register(http_server)
811854
ThreepidRestServlet(hs).register(http_server)
812855
ThreepidAddRestServlet(hs).register(http_server)
813856
ThreepidBindRestServlet(hs).register(http_server)

0 commit comments

Comments
 (0)