diff --git a/synapse/api/errors.py b/synapse/api/errors.py
index 6650e826d5..cc7b785472 100644
--- a/synapse/api/errors.py
+++ b/synapse/api/errors.py
@@ -79,6 +79,13 @@ class Codes(str, Enum):
WEAK_PASSWORD = "M_WEAK_PASSWORD"
INVALID_SIGNATURE = "M_INVALID_SIGNATURE"
USER_DEACTIVATED = "M_USER_DEACTIVATED"
+
+ # The account has been suspended on the server.
+ # By opposition to `USER_DEACTIVATED`, this is a reversible measure
+ # that can possibly be appealed and reverted.
+ # Part of MSC3823.
+ USER_ACCOUNT_SUSPENDED = "ORG.MATRIX.MSC3823.USER_ACCOUNT_SUSPENDED"
+
BAD_ALIAS = "M_BAD_ALIAS"
# For restricted join rules.
UNABLE_AUTHORISE_JOIN = "M_UNABLE_TO_AUTHORISE_JOIN"
@@ -139,7 +146,13 @@ class SynapseError(CodeMessageException):
errcode: Matrix error code e.g 'M_FORBIDDEN'
"""
- def __init__(self, code: int, msg: str, errcode: str = Codes.UNKNOWN):
+ def __init__(
+ self,
+ code: int,
+ msg: str,
+ errcode: str = Codes.UNKNOWN,
+ additional_fields: Optional[Dict] = None,
+ ):
"""Constructs a synapse error.
Args:
@@ -149,9 +162,13 @@ class SynapseError(CodeMessageException):
"""
super().__init__(code, msg)
self.errcode = errcode
+ if additional_fields is None:
+ self._additional_fields: Dict = {}
+ else:
+ self._additional_fields = dict(additional_fields)
def error_dict(self) -> "JsonDict":
- return cs_error(self.msg, self.errcode)
+ return cs_error(self.msg, self.errcode, **self._additional_fields)
class InvalidAPICallError(SynapseError):
@@ -176,14 +193,7 @@ class ProxiedRequestError(SynapseError):
errcode: str = Codes.UNKNOWN,
additional_fields: Optional[Dict] = None,
):
- super().__init__(code, msg, errcode)
- if additional_fields is None:
- self._additional_fields: Dict = {}
- else:
- self._additional_fields = dict(additional_fields)
-
- def error_dict(self) -> "JsonDict":
- return cs_error(self.msg, self.errcode, **self._additional_fields)
+ super().__init__(code, msg, errcode, additional_fields)
class ConsentNotGivenError(SynapseError):
|