summary refs log tree commit diff
path: root/synapse/api
diff options
context:
space:
mode:
authorRichard van der Hoff <1389908+richvdh@users.noreply.github.com>2020-01-15 15:58:55 +0000
committerGitHub <noreply@github.com>2020-01-15 15:58:55 +0000
commit8f5d7302acb7f6d15ba7051df7fd7fda7375a29e (patch)
treefbdef7dae1df0de22ea32d0ed023906ac1385ab5 /synapse/api
parentAdd `local_current_membership` table (#6655) (diff)
downloadsynapse-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.py27
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).