Explorar el Código

Use signald delete_account request to delete local account data

Tulir Asokan hace 4 años
padre
commit
fa9463c10d
Se han modificado 3 ficheros con 6 adiciones y 14 borrados
  1. 3 0
      mausignald/signald.py
  2. 2 13
      mautrix_signal/signal.py
  3. 1 1
      mautrix_signal/user.py

+ 3 - 0
mausignald/signald.py

@@ -152,6 +152,9 @@ class SignaldClient(SignaldRPCClient):
         resp = await self.request_v1("list_accounts")
         return [Account.deserialize(acc) for acc in resp.get("accounts", [])]
 
+    async def delete_account(self, username: str, server: bool = False) -> None:
+        await self.request_v1("delete_account", account=username, server=server)
+
     async def list_contacts(self, username: str) -> List[Profile]:
         resp = await self.request_v1("list_contacts", account=username)
         return [Profile.deserialize(contact) for contact in resp["profiles"]]

+ 2 - 13
mautrix_signal/signal.py

@@ -71,7 +71,7 @@ class SignalHandler(SignaldClient):
                 self.log.debug("Sync message includes contacts meta, syncing contacts...")
                 await user.sync_contacts()
             if evt.sync_message.groups:
-                self.log.debug("Sync message includes groups meta, syncing contacts...")
+                self.log.debug("Sync message includes groups meta, syncing groups...")
                 await user.sync_groups()
 
     @staticmethod
@@ -147,17 +147,6 @@ class SignalHandler(SignaldClient):
             portal = await po.Portal.get_by_mxid(message.mx_room)
             await sender.intent_for(portal).mark_read(portal.mxid, message.mxid)
 
-    def delete_data(self, username: str) -> None:
-        path = os.path.join(self.data_dir, username)
-        extra_dir = f"{path}.d/"
-        try:
-            self.log.debug("Removing %s", path)
-            os.remove(path)
-        except FileNotFoundError as e:
-            self.log.warning(f"Failed to remove signald data file: {e}")
-        self.log.debug("Removing %s", extra_dir)
-        shutil.rmtree(extra_dir, ignore_errors=True)
-
     async def start(self) -> None:
         await self.connect()
         known_usernames = set()
@@ -171,7 +160,7 @@ class SignalHandler(SignaldClient):
             for account in await self.list_accounts():
                 if account.account_id not in known_usernames:
                     self.log.warning(f"Unknown account ID {account.account_id}, deleting...")
-                    self.delete_data(account.account_id)
+                    await self.delete_account(account.account_id)
 
     async def stop(self) -> None:
         await self.disconnect()

+ 1 - 1
mautrix_signal/user.py

@@ -92,7 +92,7 @@ class User(DBUser, BaseUser):
         await self.bridge.signal.unsubscribe(username)
         # Wait a while for signald to finish disconnecting
         await asyncio.sleep(1)
-        self.bridge.signal.delete_data(username)
+        await self.bridge.signal.delete_account(username)
         self._track_metric(METRIC_LOGGED_IN, False)
 
     async def on_signin(self, account: Account) -> None: