summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Baker <dbkr@users.noreply.github.com>2025-05-05 10:08:50 +0100
committerGitHub <noreply@github.com>2025-05-05 11:08:50 +0200
commit9f9eb563339079ee5ce082fcd63d0ab5d849b7ed (patch)
tree6ebf7e94aa718ce4482b5d1c87ff764d101fbab6
parentAdd the ability to exclude remote users in user directory search results (#18... (diff)
downloadsynapse-9f9eb563339079ee5ce082fcd63d0ab5d849b7ed.tar.xz
Return specific error code when email / phone not supported (#17578)
Implements https://github.com/matrix-org/matrix-spec-proposals/pull/4178

If this would need tests, could you give some idea of what tests would
be needed and how best to add them?

### Pull Request Checklist

<!-- Please read
https://element-hq.github.io/synapse/latest/development/contributing_guide.html
before submitting your pull request -->

* [ ] Pull request is based on the develop branch
* [ ] Pull request includes a [changelog
file](https://element-hq.github.io/synapse/latest/development/contributing_guide.html#changelog).
The entry should:
- Be a short description of your change which makes sense to users.
"Fixed a bug that prevented receiving messages from other servers."
instead of "Moved X method from `EventStore` to `EventWorkerStore`.".
  - Use markdown where necessary, mostly for `code blocks`.
  - End with either a period (.) or an exclamation mark (!).
  - Start with a capital letter.
- Feel free to credit yourself, by adding a sentence "Contributed by
@github_username." or "Contributed by [Your Name]." to the end of the
entry.
* [ ] [Code
style](https://element-hq.github.io/synapse/latest/code_style.html) is
correct
(run the
[linters](https://element-hq.github.io/synapse/latest/development/contributing_guide.html#run-the-linters))
-rw-r--r--changelog.d/17578.misc1
-rw-r--r--synapse/api/errors.py1
-rw-r--r--synapse/rest/client/account.py6
-rw-r--r--synapse/util/msisdn.py4
4 files changed, 9 insertions, 3 deletions
diff --git a/changelog.d/17578.misc b/changelog.d/17578.misc
new file mode 100644

index 0000000000..7bf69576cd --- /dev/null +++ b/changelog.d/17578.misc
@@ -0,0 +1 @@ +Return specific error code when adding an email address / phone number to account is not supported (MSC4178). diff --git a/synapse/api/errors.py b/synapse/api/errors.py
index 5dd6e84289..edd2073384 100644 --- a/synapse/api/errors.py +++ b/synapse/api/errors.py
@@ -70,6 +70,7 @@ class Codes(str, Enum): THREEPID_NOT_FOUND = "M_THREEPID_NOT_FOUND" THREEPID_DENIED = "M_THREEPID_DENIED" INVALID_USERNAME = "M_INVALID_USERNAME" + THREEPID_MEDIUM_NOT_SUPPORTED = "M_THREEPID_MEDIUM_NOT_SUPPORTED" SERVER_NOT_TRUSTED = "M_SERVER_NOT_TRUSTED" CONSENT_NOT_GIVEN = "M_CONSENT_NOT_GIVEN" CANNOT_LEAVE_SERVER_NOTICE_ROOM = "M_CANNOT_LEAVE_SERVER_NOTICE_ROOM" diff --git a/synapse/rest/client/account.py b/synapse/rest/client/account.py
index 59dbad3582..7d6c0afd9a 100644 --- a/synapse/rest/client/account.py +++ b/synapse/rest/client/account.py
@@ -350,6 +350,7 @@ class EmailThreepidRequestTokenRestServlet(RestServlet): raise SynapseError( 400, "Adding an email to your account is disabled on this server", + Codes.THREEPID_MEDIUM_NOT_SUPPORTED, ) body = parse_and_validate_json_object_from_request( @@ -456,6 +457,7 @@ class MsisdnThreepidRequestTokenRestServlet(RestServlet): raise SynapseError( 400, "Adding phone numbers to user account is not supported by this homeserver", + Codes.THREEPID_MEDIUM_NOT_SUPPORTED, ) ret = await self.identity_handler.requestMsisdnToken( @@ -498,7 +500,9 @@ class AddThreepidEmailSubmitTokenServlet(RestServlet): "Adding emails have been disabled due to lack of an email config" ) raise SynapseError( - 400, "Adding an email to your account is disabled on this server" + 400, + "Adding an email to your account is disabled on this server", + Codes.THREEPID_MEDIUM_NOT_SUPPORTED, ) sid = parse_string(request, "sid", required=True) diff --git a/synapse/util/msisdn.py b/synapse/util/msisdn.py
index b6a784f0bc..dce8da5e18 100644 --- a/synapse/util/msisdn.py +++ b/synapse/util/msisdn.py
@@ -21,7 +21,7 @@ import phonenumbers -from synapse.api.errors import SynapseError +from synapse.api.errors import Codes, SynapseError def phone_number_to_msisdn(country: str, number: str) -> str: @@ -45,7 +45,7 @@ def phone_number_to_msisdn(country: str, number: str) -> str: try: phoneNumber = phonenumbers.parse(number, country) except phonenumbers.NumberParseException: - raise SynapseError(400, "Unable to parse phone number") + raise SynapseError(400, "Unable to parse phone number", Codes.INVALID_PARAM) return phonenumbers.format_number(phoneNumber, phonenumbers.PhoneNumberFormat.E164)[ 1: ]