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:
]
|