|
@@ -28,7 +28,7 @@ from mausignald.errors import (
|
|
TimeoutException,
|
|
TimeoutException,
|
|
UnregisteredUserError,
|
|
UnregisteredUserError,
|
|
)
|
|
)
|
|
-from mausignald.types import Account, Address
|
|
|
|
|
|
+from mausignald.types import Account, Address, Profile
|
|
from mautrix.types import UserID
|
|
from mautrix.types import UserID
|
|
from mautrix.util.logging import TraceLogger
|
|
from mautrix.util.logging import TraceLogger
|
|
|
|
|
|
@@ -80,6 +80,7 @@ class ProvisioningAPI:
|
|
self.app.router.add_post("/v2/link/wait/account", self.link_wait_for_account)
|
|
self.app.router.add_post("/v2/link/wait/account", self.link_wait_for_account)
|
|
|
|
|
|
# Start new chat API
|
|
# Start new chat API
|
|
|
|
+ self.app.router.add_get("/v2/contacts", self.list_contacts)
|
|
self.app.router.add_post("/v2/pm/{number}", self.start_pm)
|
|
self.app.router.add_post("/v2/pm/{number}", self.start_pm)
|
|
|
|
|
|
@property
|
|
@property
|
|
@@ -361,6 +362,21 @@ class ProvisioningAPI:
|
|
|
|
|
|
# region Start new chat API
|
|
# region Start new chat API
|
|
|
|
|
|
|
|
+ async def list_contacts(self, request: web.Request) -> web.Response:
|
|
|
|
+ user = await self.check_token_and_logged_in(request)
|
|
|
|
+ contacts = await self.bridge.signal.list_contacts(user.username)
|
|
|
|
+ return web.json_response(
|
|
|
|
+ {
|
|
|
|
+ str(c.address.number): {
|
|
|
|
+ "name": c.name,
|
|
|
|
+ "address": Address.serialize(c.address),
|
|
|
|
+ }
|
|
|
|
+ for c in contacts
|
|
|
|
+ if c.address is not None
|
|
|
|
+ },
|
|
|
|
+ headers=self._acao_headers,
|
|
|
|
+ )
|
|
|
|
+
|
|
async def start_pm(self, request: web.Request) -> web.Response:
|
|
async def start_pm(self, request: web.Request) -> web.Response:
|
|
user = await self.check_token_and_logged_in(request)
|
|
user = await self.check_token_and_logged_in(request)
|
|
number = normalize_number(request.match_info.get("number"))
|
|
number = normalize_number(request.match_info.get("number"))
|