Skip to content

Commit e4a2bd2

Browse files
committed
Catch authorization errors in get_me()
1 parent a132916 commit e4a2bd2

File tree

3 files changed

+42
-18
lines changed

3 files changed

+42
-18
lines changed

mautrix_telegram/commands/telegram/auth.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,13 @@
4646
help_section=SECTION_AUTH,
4747
help_text="Check if you're logged into Telegram.")
4848
async def ping(evt: CommandEvent) -> EventID:
49-
me = await evt.sender.client.get_me() if await evt.sender.is_logged_in() else None
50-
if me:
51-
human_tg_id = f"@{me.username}" if me.username else f"+{me.phone}"
52-
return await evt.reply(f"You're logged in as {human_tg_id}")
49+
if await evt.sender.is_logged_in():
50+
me = await evt.sender.get_me()
51+
if me:
52+
human_tg_id = f"@{me.username}" if me.username else f"+{me.phone}"
53+
return await evt.reply(f"You're logged in as {human_tg_id}")
54+
else:
55+
return await evt.reply("You were logged in, but there appears to have been an error.")
5356
else:
5457
return await evt.reply("You're not logged in.")
5558

mautrix_telegram/user.py

+20-3
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@
2222
from telethon.tl.types import (TypeUpdate, UpdateNewMessage, UpdateNewChannelMessage,
2323
UpdateShortChatMessage, UpdateShortMessage, User as TLUser, Chat,
2424
ChatForbidden, UpdateFolderPeers, UpdatePinnedDialogs,
25-
UpdateNotifySettings, NotifyPeer)
25+
UpdateNotifySettings, NotifyPeer, InputUserSelf)
2626
from telethon.tl.custom import Dialog
2727
from telethon.tl.types.contacts import ContactsNotModified
2828
from telethon.tl.functions.contacts import GetContactsRequest, SearchRequest
2929
from telethon.tl.functions.account import UpdateStatusRequest
30-
from telethon.errors import AuthKeyDuplicatedError
30+
from telethon.tl.functions.users import GetUsersRequest
31+
from telethon.errors import (AuthKeyDuplicatedError, UserDeactivatedError, UserDeactivatedBanError,
32+
SessionRevokedError, UnauthorizedError)
3133

3234
from mautrix.client import Client
3335
from mautrix.errors import MatrixRequestError, MNotFound
@@ -333,8 +335,22 @@ async def set_presence(self, online: bool = True) -> None:
333335
if not self.is_bot:
334336
await self.client(UpdateStatusRequest(offline=not online))
335337

338+
async def get_me(self) -> Optional[TLUser]:
339+
try:
340+
return (await self.client(GetUsersRequest([InputUserSelf()])))[0]
341+
except UnauthorizedError as e:
342+
self.log.error(f"Authorization error in get_me(): {e}")
343+
await self.push_bridge_state(BridgeStateEvent.BAD_CREDENTIALS, error="tg-auth-error",
344+
message=str(e), ttl=3600)
345+
await self.stop()
346+
return None
347+
336348
async def update_info(self, info: TLUser = None) -> None:
337-
info = info or await self.client.get_me()
349+
if not info:
350+
info = await self.get_me()
351+
if not info:
352+
self.log.warning("get_me() returned None, aborting update_info()")
353+
return
338354
changed = False
339355
if self.is_bot != info.bot:
340356
self.is_bot = info.bot
@@ -350,6 +366,7 @@ async def update_info(self, info: TLUser = None) -> None:
350366
self.by_tgid[self.tgid] = self
351367
if changed:
352368
await self.save()
369+
return info
353370

354371
async def log_out(self) -> bool:
355372
puppet = pu.Puppet.get(self.tgid)

mautrix_telegram/web/provisioning/__init__.py

+15-11
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@
2121
from aiohttp import web
2222

2323
from telethon.utils import get_peer_id, resolve_id
24-
from telethon.tl.types import ChatForbidden, ChannelForbidden, TypeChat
24+
from telethon.tl.types import ChatForbidden, ChannelForbidden, TypeChat, InputUserSelf
25+
from telethon.tl.functions.users import GetUsersRequest
26+
from telethon.errors import (UserDeactivatedError, UserDeactivatedBanError, SessionRevokedError,
27+
UnauthorizedError)
2528

2629
from mautrix.appservice import AppService
2730
from mautrix.errors import MatrixRequestError, IntentError
@@ -294,16 +297,17 @@ async def get_user_info(self, request: web.Request) -> web.Response:
294297

295298
user_data = None
296299
if await user.is_logged_in():
297-
me = await user.client.get_me()
298-
await user.update_info(me)
299-
user_data = {
300-
"id": user.tgid,
301-
"username": user.username,
302-
"first_name": me.first_name,
303-
"last_name": me.last_name,
304-
"phone": me.phone,
305-
"is_bot": user.is_bot,
306-
}
300+
me = await user.get_me()
301+
if me:
302+
await user.update_info(me)
303+
user_data = {
304+
"id": user.tgid,
305+
"username": user.username,
306+
"first_name": me.first_name,
307+
"last_name": me.last_name,
308+
"phone": me.phone,
309+
"is_bot": user.is_bot,
310+
}
307311
return web.json_response({
308312
"telegram": user_data,
309313
"mxid": user.mxid,

0 commit comments

Comments
 (0)