瀏覽代碼

Allow setting segment_user_id in config

Scott Weber 2 年之前
父節點
當前提交
37aada1faf

+ 3 - 1
mautrix_signal/__main__.py

@@ -61,7 +61,9 @@ class SignalBridge(Bridge):
         self.signal = SignalHandler(self)
         super().prepare_bridge()
         cfg = self.config["bridge.provisioning"]
-        self.provisioning_api = ProvisioningAPI(self, cfg["shared_secret"], cfg["segment_key"])
+        self.provisioning_api = ProvisioningAPI(
+            self, cfg["shared_secret"], cfg["segment_key"], cfg["segment_user_id"]
+        )
         self.az.app.add_subapp(cfg["prefix"], self.provisioning_api.app)
 
     async def start(self) -> None:

+ 1 - 0
mautrix_signal/config.py

@@ -86,6 +86,7 @@ class Config(BaseBridgeConfig):
         if base["bridge.provisioning.shared_secret"] == "generate":
             base["bridge.provisioning.shared_secret"] = self._new_token()
         copy("bridge.provisioning.segment_key")
+        copy("bridge.provisioning.segment_user_id")
 
         copy("bridge.command_prefix")
 

+ 2 - 0
mautrix_signal/example-config.yaml

@@ -250,6 +250,8 @@ bridge:
         # Currently the only events are login start, QR code scan, and login
         # success/failure.
         segment_key: null
+        # Optional user_id to use when sending Segment events. If null, defaults to using mxID.
+        segment_user_id: null
 
     # The prefix for commands. Only required in non-management rooms.
     command_prefix: "!signal"

+ 6 - 2
mautrix_signal/web/provisioning_api.py

@@ -46,14 +46,18 @@ class ProvisioningAPI:
     bridge: "SignalBridge"
 
     def __init__(
-        self, bridge: "SignalBridge", shared_secret: str, segment_key: str | None
+        self,
+        bridge: "SignalBridge",
+        shared_secret: str,
+        segment_key: str | None,
+        segment_user_id: str | None,
     ) -> None:
         self.bridge = bridge
         self.app = web.Application()
         self.shared_secret = shared_secret
 
         if segment_key:
-            init_segment(segment_key)
+            init_segment(segment_key, segment_user_id)
 
         # Whoami
         self.app.router.add_get("/v1/api/whoami", self.status)

+ 5 - 3
mautrix_signal/web/segment_analytics.py

@@ -12,13 +12,14 @@ log = logging.getLogger("mau.web.public.analytics")
 segment_url: URL = URL("https://api.segment.io/v1/track")
 http: aiohttp.ClientSession | None = None
 segment_key: str | None = None
+segment_user_id: str | None = None
 
 
 async def _track(user: u.User, event: str, properties: dict) -> None:
     await http.post(
         segment_url,
         json={
-            "userId": user.mxid,
+            "userId": segment_user_id or user.mxid,
             "event": event,
             "properties": {"bridge": "signal", **properties},
         },
@@ -32,7 +33,8 @@ def track(user: u.User, event: str, properties: dict | None = None):
         asyncio.create_task(_track(user, event, properties or {}))
 
 
-def init(key):
-    global segment_key, http
+def init(key, user_id: str | None = None):
+    global segment_key, segment_user_id, http
     segment_key = key
+    segment_user_id = user_id
     http = aiohttp.ClientSession()