Răsfoiți Sursa

Add endpoint for checking if number is on Signal

Tulir Asokan 3 ani în urmă
părinte
comite
b5d0e66795
1 a modificat fișierele cu 22 adăugiri și 3 ștergeri
  1. 22 3
      mautrix_signal/web/provisioning_api.py

+ 22 - 3
mautrix_signal/web/provisioning_api.py

@@ -81,6 +81,7 @@ class ProvisioningAPI:
 
         # Start new chat API
         self.app.router.add_get("/v2/contacts", self.list_contacts)
+        self.app.router.add_get("/v2/resolve_identifier/{number}", self.resolve_identifier)
         self.app.router.add_post("/v2/pm/{number}", self.start_pm)
 
     @property
@@ -382,9 +383,8 @@ class ProvisioningAPI:
             headers=self._acao_headers,
         )
 
-    async def start_pm(self, request: web.Request) -> web.Response:
-        user = await self.check_token_and_logged_in(request)
-        number = normalize_number(request.match_info["number"])
+    async def _resolve_identifier(self, number: str, user: u.User) -> pu.Puppet:
+        number = normalize_number(number)
 
         puppet: pu.Puppet = await pu.Puppet.get_by_address(Address(number=number))
         assert puppet, "Puppet.get_by_address with create=True can't return None"
@@ -400,6 +400,11 @@ class ProvisioningAPI:
                 self.log.exception(f"Unknown error fetching UUID for {puppet.number}")
                 error = {"error": "Unknown error while fetching UUID"}
                 raise web.HTTPInternalServerError(text=json.dumps(error), headers=self._headers)
+        return puppet
+
+    async def start_pm(self, request: web.Request) -> web.Response:
+        user = await self.check_token_and_logged_in(request)
+        puppet = await self._resolve_identifier(request.match_info["number"], user)
 
         portal = await po.Portal.get_by_chat_id(
             puppet.address, receiver=user.username, create=True
@@ -422,4 +427,18 @@ class ProvisioningAPI:
             status=201 if just_created else 200,
         )
 
+    async def resolve_identifier(self, request: web.Request) -> web.Response:
+        user = await self.check_token_and_logged_in(request)
+        puppet = await self._resolve_identifier(request.match_info["number"], user)
+        portal = await po.Portal.get_by_chat_id(
+            puppet.address, receiver=user.username, create=False
+        )
+        return web.json_response(
+            {
+                "room_id": portal.mxid if portal else None,
+                "chat_id": puppet.address.serialize(),
+            },
+            headers=self._acao_headers,
+        )
+
     # endregion