summary refs log tree commit diff
path: root/synapse/types.py
diff options
context:
space:
mode:
Diffstat (limited to 'synapse/types.py')
-rw-r--r--synapse/types.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/synapse/types.py b/synapse/types.py

index 42fd9c7204..b53d91747b 100644 --- a/synapse/types.py +++ b/synapse/types.py
@@ -17,6 +17,9 @@ from synapse.api.errors import SynapseError from collections import namedtuple +from unpaddedbase64 import encode_base64, decode_base64 +import ujson as json + Requester = namedtuple("Requester", ["user", "access_token_id", "is_guest"]) @@ -112,6 +115,30 @@ class EventID(DomainSpecificString): SIGIL = "$" +class SyncNextBatchToken( + namedtuple("SyncNextBatchToken", ( + "stream_token", + "pagination_config", + )) +): + @classmethod + def from_string(cls, string): + try: + d = json.loads(decode_base64(string)) + return cls(StreamToken.from_string(d["t"]), d.get("pa", {})) + except: + raise SynapseError(400, "Invalid Token") + + def to_string(self): + return encode_base64(json.dumps({ + "t": self.stream_token.to_string(), + "pa": self.pagination_config, + })) + + def replace(self, **kwargs): + return self._replace(**kwargs) + + class StreamToken( namedtuple("Token", ( "room_key",