浏览代码

Respond properly to /whoami even if get_profile throws an error

Tulir Asokan 4 年之前
父节点
当前提交
34ec0c0f75
共有 1 个文件被更改,包括 20 次插入10 次删除
  1. 20 10
      mautrix_signal/web/provisioning_api.py

+ 20 - 10
mautrix_signal/web/provisioning_api.py

@@ -98,16 +98,26 @@ class ProvisioningAPI:
             "signal": None,
         }
         if await user.is_logged_in():
-            profile = await self.bridge.signal.get_profile(username=user.username,
-                                                           address=Address(number=user.username))
-            addr = profile.address if profile else None
-            number = addr.number if addr else None
-            uuid = addr.uuid if addr else None
-            data["signal"] = {
-                "number": number or user.username,
-                "uuid": str(uuid or user.uuid or ""),
-                "name": profile.name if profile else None,
-            }
+            try:
+                profile = await self.bridge.signal.get_profile(
+                    username=user.username, address=Address(number=user.username))
+            except Exception as e:
+                self.log.exception(f"Failed to get {user.username}'s profile for whoami")
+                data["signal"] = {
+                    "number": user.username,
+                    "ok": False,
+                    "error": str(e),
+                }
+            else:
+                addr = profile.address if profile else None
+                number = addr.number if addr else None
+                uuid = addr.uuid if addr else None
+                data["signal"] = {
+                    "number": number or user.username,
+                    "uuid": str(uuid or user.uuid or ""),
+                    "name": profile.name if profile else None,
+                    "ok": True,
+                }
         return web.json_response(data, headers=self._acao_headers)
 
     async def link(self, request: web.Request) -> web.Response: