mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-11 14:24:59 -04:00
Revert "Revert accidental fast-forward merge from v1.49.0rc1"
This reverts commit 158d73ebdd
.
This commit is contained in:
parent
158d73ebdd
commit
4dd9ea8f4f
165 changed files with 7715 additions and 2703 deletions
|
@ -1,4 +1,5 @@
|
|||
# Copyright 2014 - 2016 OpenMarket Ltd
|
||||
# Copyright 2021 The Matrix.org Foundation C.I.C.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
@ -116,9 +117,13 @@ class RegistrationHandler:
|
|||
self.pusher_pool = hs.get_pusherpool()
|
||||
|
||||
self.session_lifetime = hs.config.registration.session_lifetime
|
||||
self.nonrefreshable_access_token_lifetime = (
|
||||
hs.config.registration.nonrefreshable_access_token_lifetime
|
||||
)
|
||||
self.refreshable_access_token_lifetime = (
|
||||
hs.config.registration.refreshable_access_token_lifetime
|
||||
)
|
||||
self.refresh_token_lifetime = hs.config.registration.refresh_token_lifetime
|
||||
|
||||
init_counters_for_auth_provider("")
|
||||
|
||||
|
@ -741,6 +746,7 @@ class RegistrationHandler:
|
|||
is_appservice_ghost: bool = False,
|
||||
auth_provider_id: Optional[str] = None,
|
||||
should_issue_refresh_token: bool = False,
|
||||
auth_provider_session_id: Optional[str] = None,
|
||||
) -> Tuple[str, str, Optional[int], Optional[str]]:
|
||||
"""Register a device for a user and generate an access token.
|
||||
|
||||
|
@ -751,9 +757,9 @@ class RegistrationHandler:
|
|||
device_id: The device ID to check, or None to generate a new one.
|
||||
initial_display_name: An optional display name for the device.
|
||||
is_guest: Whether this is a guest account
|
||||
auth_provider_id: The SSO IdP the user used, if any (just used for the
|
||||
prometheus metrics).
|
||||
auth_provider_id: The SSO IdP the user used, if any.
|
||||
should_issue_refresh_token: Whether it should also issue a refresh token
|
||||
auth_provider_session_id: The session ID received during login from the SSO IdP.
|
||||
Returns:
|
||||
Tuple of device ID, access token, access token expiration time and refresh token
|
||||
"""
|
||||
|
@ -764,6 +770,8 @@ class RegistrationHandler:
|
|||
is_guest=is_guest,
|
||||
is_appservice_ghost=is_appservice_ghost,
|
||||
should_issue_refresh_token=should_issue_refresh_token,
|
||||
auth_provider_id=auth_provider_id,
|
||||
auth_provider_session_id=auth_provider_session_id,
|
||||
)
|
||||
|
||||
login_counter.labels(
|
||||
|
@ -786,6 +794,8 @@ class RegistrationHandler:
|
|||
is_guest: bool = False,
|
||||
is_appservice_ghost: bool = False,
|
||||
should_issue_refresh_token: bool = False,
|
||||
auth_provider_id: Optional[str] = None,
|
||||
auth_provider_session_id: Optional[str] = None,
|
||||
) -> LoginDict:
|
||||
"""Helper for register_device
|
||||
|
||||
|
@ -793,40 +803,86 @@ class RegistrationHandler:
|
|||
class and RegisterDeviceReplicationServlet.
|
||||
"""
|
||||
assert not self.hs.config.worker.worker_app
|
||||
valid_until_ms = None
|
||||
now_ms = self.clock.time_msec()
|
||||
access_token_expiry = None
|
||||
if self.session_lifetime is not None:
|
||||
if is_guest:
|
||||
raise Exception(
|
||||
"session_lifetime is not currently implemented for guest access"
|
||||
)
|
||||
valid_until_ms = self.clock.time_msec() + self.session_lifetime
|
||||
access_token_expiry = now_ms + self.session_lifetime
|
||||
|
||||
if self.nonrefreshable_access_token_lifetime is not None:
|
||||
if access_token_expiry is not None:
|
||||
# Don't allow the non-refreshable access token to outlive the
|
||||
# session.
|
||||
access_token_expiry = min(
|
||||
now_ms + self.nonrefreshable_access_token_lifetime,
|
||||
access_token_expiry,
|
||||
)
|
||||
else:
|
||||
access_token_expiry = now_ms + self.nonrefreshable_access_token_lifetime
|
||||
|
||||
refresh_token = None
|
||||
refresh_token_id = None
|
||||
|
||||
registered_device_id = await self.device_handler.check_device_registered(
|
||||
user_id, device_id, initial_display_name
|
||||
user_id,
|
||||
device_id,
|
||||
initial_display_name,
|
||||
auth_provider_id=auth_provider_id,
|
||||
auth_provider_session_id=auth_provider_session_id,
|
||||
)
|
||||
if is_guest:
|
||||
assert valid_until_ms is None
|
||||
assert access_token_expiry is None
|
||||
access_token = self.macaroon_gen.generate_guest_access_token(user_id)
|
||||
else:
|
||||
if should_issue_refresh_token:
|
||||
# A refreshable access token lifetime must be configured
|
||||
# since we're told to issue a refresh token (the caller checks
|
||||
# that this value is set before setting this flag).
|
||||
assert self.refreshable_access_token_lifetime is not None
|
||||
|
||||
# Set the expiry time of the refreshable access token
|
||||
access_token_expiry = now_ms + self.refreshable_access_token_lifetime
|
||||
|
||||
# Set the refresh token expiry time (if configured)
|
||||
refresh_token_expiry = None
|
||||
if self.refresh_token_lifetime is not None:
|
||||
refresh_token_expiry = now_ms + self.refresh_token_lifetime
|
||||
|
||||
# Set an ultimate session expiry time (if configured)
|
||||
ultimate_session_expiry_ts = None
|
||||
if self.session_lifetime is not None:
|
||||
ultimate_session_expiry_ts = now_ms + self.session_lifetime
|
||||
|
||||
# Also ensure that the issued tokens don't outlive the
|
||||
# session.
|
||||
# (It would be weird to configure a homeserver with a shorter
|
||||
# session lifetime than token lifetime, but may as well handle
|
||||
# it.)
|
||||
access_token_expiry = min(
|
||||
access_token_expiry, ultimate_session_expiry_ts
|
||||
)
|
||||
if refresh_token_expiry is not None:
|
||||
refresh_token_expiry = min(
|
||||
refresh_token_expiry, ultimate_session_expiry_ts
|
||||
)
|
||||
|
||||
(
|
||||
refresh_token,
|
||||
refresh_token_id,
|
||||
) = await self._auth_handler.create_refresh_token_for_user_id(
|
||||
user_id,
|
||||
device_id=registered_device_id,
|
||||
)
|
||||
valid_until_ms = (
|
||||
self.clock.time_msec() + self.refreshable_access_token_lifetime
|
||||
expiry_ts=refresh_token_expiry,
|
||||
ultimate_session_expiry_ts=ultimate_session_expiry_ts,
|
||||
)
|
||||
|
||||
access_token = await self._auth_handler.create_access_token_for_user_id(
|
||||
user_id,
|
||||
device_id=registered_device_id,
|
||||
valid_until_ms=valid_until_ms,
|
||||
valid_until_ms=access_token_expiry,
|
||||
is_appservice_ghost=is_appservice_ghost,
|
||||
refresh_token_id=refresh_token_id,
|
||||
)
|
||||
|
@ -834,7 +890,7 @@ class RegistrationHandler:
|
|||
return {
|
||||
"device_id": registered_device_id,
|
||||
"access_token": access_token,
|
||||
"valid_until_ms": valid_until_ms,
|
||||
"valid_until_ms": access_token_expiry,
|
||||
"refresh_token": refresh_token,
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue