diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2020-01-15 15:58:55 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-15 15:58:55 +0000 |
commit | 8f5d7302acb7f6d15ba7051df7fd7fda7375a29e (patch) | |
tree | fbdef7dae1df0de22ea32d0ed023906ac1385ab5 /synapse/api | |
parent | Add `local_current_membership` table (#6655) (diff) | |
download | synapse-8f5d7302acb7f6d15ba7051df7fd7fda7375a29e.tar.xz |
Implement RedirectException (#6687)
Allow REST endpoint implemnentations to raise a RedirectException, which will redirect the user's browser to a given location.
Diffstat (limited to 'synapse/api')
-rw-r--r-- | synapse/api/errors.py | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/synapse/api/errors.py b/synapse/api/errors.py index 9e9844b47c..1c9456e583 100644 --- a/synapse/api/errors.py +++ b/synapse/api/errors.py @@ -17,13 +17,15 @@ """Contains exceptions and error codes.""" import logging -from typing import Dict +from typing import Dict, List from six import iteritems from six.moves import http_client from canonicaljson import json +from twisted.web import http + logger = logging.getLogger(__name__) @@ -80,6 +82,29 @@ class CodeMessageException(RuntimeError): self.msg = msg +class RedirectException(CodeMessageException): + """A pseudo-error indicating that we want to redirect the client to a different + location + + Attributes: + cookies: a list of set-cookies values to add to the response. For example: + b"sessionId=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT" + """ + + def __init__(self, location: bytes, http_code: int = http.FOUND): + """ + + Args: + location: the URI to redirect to + http_code: the HTTP response code + """ + msg = "Redirect to %s" % (location.decode("utf-8"),) + super().__init__(code=http_code, msg=msg) + self.location = location + + self.cookies = [] # type: List[bytes] + + class SynapseError(CodeMessageException): """A base exception type for matrix errors which have an errcode and error message (as well as an HTTP status code). |