Maybe allow disabling e2ee by removing device ID

This commit is contained in:
Tulir Asokan 2021-11-19 19:46:48 +02:00
parent b8ef048a3a
commit ae7e9693fc

View File

@ -312,13 +312,20 @@ class Client:
else: else:
await self._update_remote_profile() await self._update_remote_profile()
async def update_access_details(self, access_token: str, homeserver: str, async def update_access_details(self, access_token: Optional[str], homeserver: Optional[str],
device_id: Optional[str] = None) -> None: device_id: Optional[str] = None) -> None:
if not access_token and not homeserver: if not access_token and not homeserver:
return return
elif access_token == self.access_token and homeserver == self.homeserver: if device_id is None:
device_id = self.device_id
elif not device_id:
device_id = None
if (
access_token == self.access_token
and homeserver == self.homeserver
and device_id == self.device_id
):
return return
device_id = device_id or self.device_id
new_client = MaubotMatrixClient(mxid=self.id, base_url=homeserver or self.homeserver, new_client = MaubotMatrixClient(mxid=self.id, base_url=homeserver or self.homeserver,
token=access_token or self.access_token, loop=self.loop, token=access_token or self.access_token, loop=self.loop,
device_id=device_id, client_session=self.http_client, device_id=device_id, client_session=self.http_client,
@ -330,9 +337,13 @@ class Client:
raise ValueError(f"Device ID mismatch: {whoami.device_id}") raise ValueError(f"Device ID mismatch: {whoami.device_id}")
new_client.sync_store = SyncStoreProxy(self.db_instance) new_client.sync_store = SyncStoreProxy(self.db_instance)
self.stop_sync() self.stop_sync()
# TODO this event handler transfer is pretty hacky
self._remove_crypto_event_handlers() self._remove_crypto_event_handlers()
self.client.crypto = None
new_client.event_handlers = self.client.event_handlers new_client.event_handlers = self.client.event_handlers
new_client.global_event_handlers = self.client.global_event_handlers new_client.global_event_handlers = self.client.global_event_handlers
self.client = new_client self.client = new_client
self.db_instance.homeserver = homeserver self.db_instance.homeserver = homeserver
self.db_instance.access_token = access_token self.db_instance.access_token = access_token
@ -340,6 +351,9 @@ class Client:
if self.enable_crypto: if self.enable_crypto:
self._prepare_crypto() self._prepare_crypto()
await self._start_crypto() await self._start_crypto()
else:
self.crypto_store = None
self.crypto = None
self.start_sync() self.start_sync()
async def _update_remote_profile(self) -> None: async def _update_remote_profile(self) -> None: