Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 8f8f369

Browse files
committed
MSC2918: disable refresh tokens when session_lifetime is set
1 parent 797e0d3 commit 8f8f369

File tree

4 files changed

+33
-20
lines changed

4 files changed

+33
-20
lines changed

docs/sample_config.yaml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,10 +1176,6 @@ url_preview_accept_language:
11761176
#
11771177
#session_lifetime: 24h
11781178

1179-
# MSC2918
1180-
# TODO: docs
1181-
#access_token_lifetime: 5m
1182-
11831179
# The user must provide all of the below types of 3PID when registering.
11841180
#
11851181
#registrations_require_3pid:

synapse/config/registration.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,21 @@ def read_config(self, config, **kwargs):
119119
session_lifetime = self.parse_duration(session_lifetime)
120120
self.session_lifetime = session_lifetime
121121

122-
access_token_lifetime = config.get("access_token_lifetime", "5m")
123-
access_token_lifetime = self.parse_duration(access_token_lifetime)
122+
access_token_lifetime = config.get(
123+
"access_token_lifetime", "5m" if session_lifetime is None else None
124+
)
125+
if access_token_lifetime is not None:
126+
access_token_lifetime = self.parse_duration(access_token_lifetime)
124127
self.access_token_lifetime = access_token_lifetime
125128

129+
if session_lifetime is not None and access_token_lifetime is not None:
130+
raise ConfigError(
131+
"The refresh token mechanism is incompatible with the "
132+
"`session_lifetime` option. Consider disabling the "
133+
"`session_lifetime` option or disabling the refresh token "
134+
"mechanism by removing the `access_token_lifetime` option."
135+
)
136+
126137
# The success template used during fallback auth.
127138
self.fallback_success_template = self.read_template("auth_success.html")
128139

@@ -156,10 +167,6 @@ def generate_config_section(self, generate_secrets=False, **kwargs):
156167
#
157168
#session_lifetime: 24h
158169
159-
# MSC2918
160-
# TODO: docs
161-
#access_token_lifetime: 5m
162-
163170
# The user must provide all of the below types of 3PID when registering.
164171
#
165172
#registrations_require_3pid:

synapse/rest/client/v1/login.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ def __init__(self, hs: "HomeServer"):
8484
self.cas_enabled = hs.config.cas_enabled
8585
self.oidc_enabled = hs.config.oidc_enabled
8686
self._msc2858_enabled = hs.config.experimental.msc2858_enabled
87+
self._msc2918_enabled = hs.config.access_token_lifetime is not None
8788

8889
self.auth = hs.get_auth()
8990

@@ -159,10 +160,14 @@ def on_GET(self, request: SynapseRequest):
159160
async def on_POST(self, request: SynapseRequest):
160161
login_submission = parse_json_object_from_request(request)
161162

162-
# Check if this login should also issue a refresh token, as per MSC2918
163-
should_issue_refresh_token = parse_boolean(
164-
request, name=LoginRestServlet.REFRESH_TOKEN_PARAM, default=False
165-
)
163+
if self._msc2918_enabled:
164+
# Check if this login should also issue a refresh token, as per
165+
# MSC2918
166+
should_issue_refresh_token = parse_boolean(
167+
request, name=LoginRestServlet.REFRESH_TOKEN_PARAM, default=False
168+
)
169+
else:
170+
should_issue_refresh_token = False
166171

167172
try:
168173
if login_submission["type"] == LoginRestServlet.APPSERVICE_TYPE:
@@ -595,7 +600,8 @@ async def on_GET(self, request: SynapseRequest) -> None:
595600

596601
def register_servlets(hs, http_server):
597602
LoginRestServlet(hs).register(http_server)
598-
RefreshTokenServlet(hs).register(http_server)
603+
if hs.config.access_token_lifetime is not None:
604+
RefreshTokenServlet(hs).register(http_server)
599605
SsoRedirectServlet(hs).register(http_server)
600606
if hs.config.cas_enabled:
601607
CasTicketServlet(hs).register(http_server)

synapse/rest/client/v2_alpha/register.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,7 @@ def __init__(self, hs):
400400
self.password_policy_handler = hs.get_password_policy_handler()
401401
self.clock = hs.get_clock()
402402
self._registration_enabled = self.hs.config.enable_registration
403+
self._msc2918_enabled = hs.config.access_token_lifetime is not None
403404

404405
self._registration_flows = _calculate_registration_flows(
405406
hs.config, self.auth_handler
@@ -425,11 +426,14 @@ async def on_POST(self, request):
425426
"Do not understand membership kind: %s" % (kind.decode("utf8"),)
426427
)
427428

428-
# Check if this registration should also issue a refresh token, as per
429-
# MSC2918
430-
should_issue_refresh_token = parse_boolean(
431-
request, name="org.matrix.msc2918.refresh_token", default=False
432-
)
429+
if self._msc2918_enabled:
430+
# Check if this registration should also issue a refresh token, as
431+
# per MSC2918
432+
should_issue_refresh_token = parse_boolean(
433+
request, name="org.matrix.msc2918.refresh_token", default=False
434+
)
435+
else:
436+
should_issue_refresh_token = False
433437

434438
# Pull out the provided username and do basic sanity checks early since
435439
# the auth layer will store these in sessions.

0 commit comments

Comments
 (0)