From 371c6813de386c0797feb0535bd0456401d6729b Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Mon, 25 Jun 2018 21:30:54 +0300 Subject: [PATCH] Stop creating connections for unauthenticated users at startup --- mautrix_telegram/abstract_user.py | 4 ++-- mautrix_telegram/bot.py | 4 ++-- mautrix_telegram/public/__init__.py | 4 +++- mautrix_telegram/user.py | 6 ++---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/mautrix_telegram/abstract_user.py b/mautrix_telegram/abstract_user.py index 0429afae..4a2b4451 100644 --- a/mautrix_telegram/abstract_user.py +++ b/mautrix_telegram/abstract_user.py @@ -95,7 +95,7 @@ class AbstractUser: async def has_full_access(self, allow_bot=False): return self.whitelisted and (not self.is_bot or allow_bot) and await self.is_logged_in() - async def start(self): + async def start(self, delete_unless_authenticated=False): if not self.client: self._init_client() await self.client.connect() @@ -113,7 +113,7 @@ class AbstractUser: self.session_container.Session.query.filter( self.session_container.Session.session_id == self.mxid).count() > 0) if not self.connected and should_connect: - await self.start() + await self.start(delete_unless_authenticated=not even_if_no_session) return self def stop(self): diff --git a/mautrix_telegram/bot.py b/mautrix_telegram/bot.py index bc09d3f5..575ea841 100644 --- a/mautrix_telegram/bot.py +++ b/mautrix_telegram/bot.py @@ -59,8 +59,8 @@ class Bot(AbstractUser): if isinstance(id, int): self.tg_whitelist.append(id) - async def start(self): - await super().start() + async def start(self, delete_unless_authenticated=False): + await super().start(delete_unless_authenticated) if not await self.is_logged_in(): await self.client.sign_in(bot_token=self.token) await self.post_login() diff --git a/mautrix_telegram/public/__init__.py b/mautrix_telegram/public/__init__.py index c9f8362d..2dfd4548 100644 --- a/mautrix_telegram/public/__init__.py +++ b/mautrix_telegram/public/__init__.py @@ -159,12 +159,14 @@ class PublicBridgeWebsite: if "mxid" not in data: return self.render_login(error="Please enter your Matrix ID.", status=400) - user = await User.get_by_mxid(data["mxid"]).ensure_started(even_if_no_session=True) + user = await User.get_by_mxid(data["mxid"]).ensure_started() if not user.whitelisted: return self.render_login(mxid=user.mxid, error="You are not whitelisted.", status=403) elif await user.is_logged_in(): return self.render_login(mxid=user.mxid, username=user.username) + await user.ensure_started(even_if_no_session=True) + if "phone" in data: return await self.post_login_phone(user, data["phone"]) elif "token" in data: diff --git a/mautrix_telegram/user.py b/mautrix_telegram/user.py index 06418203..b49ecb66 100644 --- a/mautrix_telegram/user.py +++ b/mautrix_telegram/user.py @@ -143,11 +143,9 @@ class User(AbstractUser): self.log.debug(f"Ensuring post_login() for {self.name}") asyncio.ensure_future(self.post_login(), loop=self.loop) elif delete_unless_authenticated: - self.log.debug(f"Unauthenticated user {self.name} start()ed, deleting...") - # User not logged in -> forget user + self.log.debug(f"Unauthenticated user {self.name} start()ed, deleting session...") self.client.disconnect() self.client.session.delete() - self.delete() return self async def post_login(self, info=None): @@ -343,4 +341,4 @@ def init(context): config = context.config users = [User.from_db(user) for user in DBUser.query.all()] - return [user.start(delete_unless_authenticated=True) for user in users] + return [user.ensure_started() for user in users]