|
|
|
@ -26,6 +26,7 @@ from twisted.web import http |
|
|
|
|
from synapse.util import json_decoder |
|
|
|
|
|
|
|
|
|
if typing.TYPE_CHECKING: |
|
|
|
|
from synapse.config.homeserver import HomeServerConfig |
|
|
|
|
from synapse.types import JsonDict |
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
@ -80,6 +81,12 @@ class Codes(str, Enum): |
|
|
|
|
INVALID_SIGNATURE = "M_INVALID_SIGNATURE" |
|
|
|
|
USER_DEACTIVATED = "M_USER_DEACTIVATED" |
|
|
|
|
|
|
|
|
|
# Part of MSC3848 |
|
|
|
|
# https://github.com/matrix-org/matrix-spec-proposals/pull/3848 |
|
|
|
|
ALREADY_JOINED = "ORG.MATRIX.MSC3848.ALREADY_JOINED" |
|
|
|
|
NOT_JOINED = "ORG.MATRIX.MSC3848.NOT_JOINED" |
|
|
|
|
INSUFFICIENT_POWER = "ORG.MATRIX.MSC3848.INSUFFICIENT_POWER" |
|
|
|
|
|
|
|
|
|
# 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. |
|
|
|
@ -167,7 +174,7 @@ class SynapseError(CodeMessageException): |
|
|
|
|
else: |
|
|
|
|
self._additional_fields = dict(additional_fields) |
|
|
|
|
|
|
|
|
|
def error_dict(self) -> "JsonDict": |
|
|
|
|
def error_dict(self, config: Optional["HomeServerConfig"]) -> "JsonDict": |
|
|
|
|
return cs_error(self.msg, self.errcode, **self._additional_fields) |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -213,7 +220,7 @@ class ConsentNotGivenError(SynapseError): |
|
|
|
|
) |
|
|
|
|
self._consent_uri = consent_uri |
|
|
|
|
|
|
|
|
|
def error_dict(self) -> "JsonDict": |
|
|
|
|
def error_dict(self, config: Optional["HomeServerConfig"]) -> "JsonDict": |
|
|
|
|
return cs_error(self.msg, self.errcode, consent_uri=self._consent_uri) |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -307,6 +314,37 @@ class AuthError(SynapseError): |
|
|
|
|
super().__init__(code, msg, errcode, additional_fields) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UnstableSpecAuthError(AuthError): |
|
|
|
|
"""An error raised when a new error code is being proposed to replace a previous one. |
|
|
|
|
This error will return a "org.matrix.unstable.errcode" property with the new error code, |
|
|
|
|
with the previous error code still being defined in the "errcode" property. |
|
|
|
|
|
|
|
|
|
This error will include `org.matrix.msc3848.unstable.errcode` in the C-S error body. |
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
def __init__( |
|
|
|
|
self, |
|
|
|
|
code: int, |
|
|
|
|
msg: str, |
|
|
|
|
errcode: str, |
|
|
|
|
previous_errcode: str = Codes.FORBIDDEN, |
|
|
|
|
additional_fields: Optional[dict] = None, |
|
|
|
|
): |
|
|
|
|
self.previous_errcode = previous_errcode |
|
|
|
|
super().__init__(code, msg, errcode, additional_fields) |
|
|
|
|
|
|
|
|
|
def error_dict(self, config: Optional["HomeServerConfig"]) -> "JsonDict": |
|
|
|
|
fields = {} |
|
|
|
|
if config is not None and config.experimental.msc3848_enabled: |
|
|
|
|
fields["org.matrix.msc3848.unstable.errcode"] = self.errcode |
|
|
|
|
return cs_error( |
|
|
|
|
self.msg, |
|
|
|
|
self.previous_errcode, |
|
|
|
|
**fields, |
|
|
|
|
**self._additional_fields, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class InvalidClientCredentialsError(SynapseError): |
|
|
|
|
"""An error raised when there was a problem with the authorisation credentials |
|
|
|
|
in a client request. |
|
|
|
@ -338,8 +376,8 @@ class InvalidClientTokenError(InvalidClientCredentialsError): |
|
|
|
|
super().__init__(msg=msg, errcode="M_UNKNOWN_TOKEN") |
|
|
|
|
self._soft_logout = soft_logout |
|
|
|
|
|
|
|
|
|
def error_dict(self) -> "JsonDict": |
|
|
|
|
d = super().error_dict() |
|
|
|
|
def error_dict(self, config: Optional["HomeServerConfig"]) -> "JsonDict": |
|
|
|
|
d = super().error_dict(config) |
|
|
|
|
d["soft_logout"] = self._soft_logout |
|
|
|
|
return d |
|
|
|
|
|
|
|
|
@ -362,7 +400,7 @@ class ResourceLimitError(SynapseError): |
|
|
|
|
self.limit_type = limit_type |
|
|
|
|
super().__init__(code, msg, errcode=errcode) |
|
|
|
|
|
|
|
|
|
def error_dict(self) -> "JsonDict": |
|
|
|
|
def error_dict(self, config: Optional["HomeServerConfig"]) -> "JsonDict": |
|
|
|
|
return cs_error( |
|
|
|
|
self.msg, |
|
|
|
|
self.errcode, |
|
|
|
@ -397,7 +435,7 @@ class InvalidCaptchaError(SynapseError): |
|
|
|
|
super().__init__(code, msg, errcode) |
|
|
|
|
self.error_url = error_url |
|
|
|
|
|
|
|
|
|
def error_dict(self) -> "JsonDict": |
|
|
|
|
def error_dict(self, config: Optional["HomeServerConfig"]) -> "JsonDict": |
|
|
|
|
return cs_error(self.msg, self.errcode, error_url=self.error_url) |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -414,7 +452,7 @@ class LimitExceededError(SynapseError): |
|
|
|
|
super().__init__(code, msg, errcode) |
|
|
|
|
self.retry_after_ms = retry_after_ms |
|
|
|
|
|
|
|
|
|
def error_dict(self) -> "JsonDict": |
|
|
|
|
def error_dict(self, config: Optional["HomeServerConfig"]) -> "JsonDict": |
|
|
|
|
return cs_error(self.msg, self.errcode, retry_after_ms=self.retry_after_ms) |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -429,7 +467,7 @@ class RoomKeysVersionError(SynapseError): |
|
|
|
|
super().__init__(403, "Wrong room_keys version", Codes.WRONG_ROOM_KEYS_VERSION) |
|
|
|
|
self.current_version = current_version |
|
|
|
|
|
|
|
|
|
def error_dict(self) -> "JsonDict": |
|
|
|
|
def error_dict(self, config: Optional["HomeServerConfig"]) -> "JsonDict": |
|
|
|
|
return cs_error(self.msg, self.errcode, current_version=self.current_version) |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -469,7 +507,7 @@ class IncompatibleRoomVersionError(SynapseError): |
|
|
|
|
|
|
|
|
|
self._room_version = room_version |
|
|
|
|
|
|
|
|
|
def error_dict(self) -> "JsonDict": |
|
|
|
|
def error_dict(self, config: Optional["HomeServerConfig"]) -> "JsonDict": |
|
|
|
|
return cs_error(self.msg, self.errcode, room_version=self._room_version) |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -515,7 +553,7 @@ class UnredactedContentDeletedError(SynapseError): |
|
|
|
|
) |
|
|
|
|
self.content_keep_ms = content_keep_ms |
|
|
|
|
|
|
|
|
|
def error_dict(self) -> "JsonDict": |
|
|
|
|
def error_dict(self, config: Optional["HomeServerConfig"]) -> "JsonDict": |
|
|
|
|
extra = {} |
|
|
|
|
if self.content_keep_ms is not None: |
|
|
|
|
extra = {"fi.mau.msc2815.content_keep_ms": self.content_keep_ms} |
|
|
|
|