def login_with_token(client: GMatrixClient, user_id: str, access_token: str) -> Optional[User]: """Reuse an existing authentication code. If this succeeds it means the user has logged in the past, so we assume the display name is properly set and that there may be rooms open from past executions. """ client.set_access_token(user_id=user_id, token=access_token) try: # Test the credentials. Any API that requries authentication # would be enough. client.api.get_devices() except MatrixRequestError as ex: log.debug( "Couldn't use previous login credentials", node=node_address_from_userid(client.user_id), prev_user_id=user_id, _exception=ex, ) return None log.debug( "Success. Valid previous credentials", node=node_address_from_userid(client.user_id), user_id=user_id, ) return client.get_user(client.user_id)
def log(self) -> BoundLoggerLazyProxy: if self._log: return self._log # type: ignore context = self._log_context or {} # Only cache the logger once the user_id becomes available if hasattr(self._client, "user_id"): context["current_user"] = self._user_id context["node"] = node_address_from_userid(self._user_id) bound_log = log.bind(**context) self._log = bound_log return bound_log # Apply the `_log_context` even if the user_id is not yet available return log.bind(**context)