示例#1
0
 def __init__(self, bridge: 'Bridge', homeserver_address: str, user_id_prefix: str,
              user_id_suffix: str, db_url: str, key_sharing_config: Dict[str, bool] = None
              ) -> None:
     self.loop = bridge.loop or asyncio.get_event_loop()
     self.bridge = bridge
     self.az = bridge.az
     self.device_name = bridge.name
     self._id_prefix = user_id_prefix
     self._id_suffix = user_id_suffix
     self._share_session_events = {}
     self.key_sharing_config = key_sharing_config or {}
     pickle_key = "mautrix.bridge.e2ee"
     if db_url.startswith("postgres://"):
         if not PgCryptoStore or not PgCryptoStateStore:
             raise RuntimeError("Database URL is set to postgres, but asyncpg is not installed")
         self.crypto_db = Database(url=db_url, upgrade_table=PgCryptoStore.upgrade_table,
                                   log=logging.getLogger("mau.crypto.db"), loop=self.loop)
         self.crypto_store = PgCryptoStore("", pickle_key, self.crypto_db)
         self.state_store = PgCryptoStateStore(self.crypto_db, bridge.get_portal)
     elif db_url.startswith("pickle:///"):
         self.crypto_db = None
         self.crypto_store = PickleCryptoStore("", pickle_key, db_url[len("pickle:///"):])
         self.state_store = SQLCryptoStateStore(bridge.get_portal)
     else:
         raise RuntimeError("Unsupported database scheme")
     self.client = Client(base_url=homeserver_address, mxid=self.az.bot_mxid, loop=self.loop,
                          sync_store=self.crypto_store)
     self.crypto = OlmMachine(self.client, self.crypto_store, self.state_store)
     self.crypto.allow_key_share = self.allow_key_share
示例#2
0
 def __init__(
     self,
     bridge: br.Bridge,
     homeserver_address: str,
     user_id_prefix: str,
     user_id_suffix: str,
     db_url: str,
     key_sharing_config: dict[str, bool] = None,
 ) -> None:
     self.loop = bridge.loop or asyncio.get_event_loop()
     self.bridge = bridge
     self.az = bridge.az
     self.device_name = bridge.name
     self._id_prefix = user_id_prefix
     self._id_suffix = user_id_suffix
     self._share_session_events = {}
     self.key_sharing_config = key_sharing_config or {}
     pickle_key = "mautrix.bridge.e2ee"
     self.crypto_db = Database.create(
         url=db_url,
         upgrade_table=PgCryptoStore.upgrade_table,
         log=logging.getLogger("mau.crypto.db"),
     )
     self.crypto_store = PgCryptoStore("", pickle_key, self.crypto_db)
     self.state_store = PgCryptoStateStore(self.crypto_db,
                                           bridge.get_portal)
     default_http_retry_count = bridge.config.get(
         "homeserver.http_retry_count", None)
     self.client = Client(
         base_url=homeserver_address,
         mxid=self.az.bot_mxid,
         loop=self.loop,
         sync_store=self.crypto_store,
         log=self.log.getChild("client"),
         default_retry_count=default_http_retry_count,
     )
     self.crypto = OlmMachine(self.client, self.crypto_store,
                              self.state_store)
     self.client.add_event_handler(InternalEventType.SYNC_STOPPED,
                                   self._exit_on_sync_fail)
     self.crypto.allow_key_share = self.allow_key_share