Return error if user tries to send empty login code to API

This commit is contained in:
Tulir Asokan
2022-02-09 12:05:16 +02:00
parent 7950c5aa61
commit 2fb08d59c7
3 changed files with 23 additions and 8 deletions
+2 -1
View File
@@ -195,7 +195,8 @@ class User(DBUser, AbstractUser, BaseUser):
if self.tgid: if self.tgid:
await self.push_bridge_state(BridgeStateEvent.UNKNOWN_ERROR, message=str(e)) await self.push_bridge_state(BridgeStateEvent.UNKNOWN_ERROR, message=str(e))
except UnauthorizedError as e: except UnauthorizedError as e:
self.log.error(f"Authorization error in start(): {type(e)}: {e}") if delete_unless_authenticated or self.tgid:
self.log.error(f"Authorization error in start(): {type(e)}: {e}")
if self.tgid: if self.tgid:
await self.push_bridge_state( await self.push_bridge_state(
BridgeStateEvent.BAD_CREDENTIALS, BridgeStateEvent.BAD_CREDENTIALS,
+20 -6
View File
@@ -126,8 +126,10 @@ class AuthAPI(abc.ABC):
mxid=user.mxid, mxid=user.mxid,
state="code", state="code",
status=200, status=200,
message="Code requested successfully. Check your SMS " message=(
"or Telegram client and enter the code below.", "Code requested successfully. Check your SMS "
"or Telegram client and enter the code below."
),
) )
except PhoneNumberInvalidError: except PhoneNumberInvalidError:
return self.get_login_response( return self.get_login_response(
@@ -167,8 +169,10 @@ class AuthAPI(abc.ABC):
state="request", state="request",
status=429, status=429,
errcode="phone_number_flood", errcode="phone_number_flood",
error="Your phone number has been temporarily blocked for flooding. " error=(
"The ban is usually applied for around a day.", "Your phone number has been temporarily blocked for flooding. "
"The ban is usually applied for around a day."
),
) )
except FloodWaitError as e: except FloodWaitError as e:
return self.get_login_response( return self.get_login_response(
@@ -176,8 +180,10 @@ class AuthAPI(abc.ABC):
state="request", state="request",
status=429, status=429,
errcode="flood_wait", errcode="flood_wait",
error="Your phone number has been temporarily blocked for flooding. " error=(
f"Please wait for {format_duration(e.seconds)} before trying again.", "Your phone number has been temporarily blocked for flooding. "
f"Please wait for {format_duration(e.seconds)} before trying again."
),
) )
except Exception: except Exception:
self.log.exception("Error requesting phone code") self.log.exception("Error requesting phone code")
@@ -237,6 +243,14 @@ class AuthAPI(abc.ABC):
async def post_login_code( async def post_login_code(
self, user: User, code: int, password_in_data: bool self, user: User, code: int, password_in_data: bool
) -> web.Response | None: ) -> web.Response | None:
if not code:
return self.get_login_response(
mxid=user.mxid,
state="code",
status=400,
errcode="phone_code_missing",
error="You must provide the code from your phone.",
)
try: try:
user_info = await user.client.sign_in(code=code) user_info = await user.client.sign_in(code=code)
await self.postprocess_login(user, user_info) await self.postprocess_login(user, user_info)
+1 -1
View File
@@ -6,7 +6,7 @@ yarl>=1,<2
mautrix>=0.14.9,<0.15 mautrix>=0.14.9,<0.15
#telethon>=1.24,<1.25 #telethon>=1.24,<1.25
# Fork to make session storage async and update to layer 138 # Fork to make session storage async and update to layer 138
tulir-telethon==1.25.0a4 tulir-telethon==1.25.0a5
asyncpg>=0.20,<0.26 asyncpg>=0.20,<0.26
mako>=1,<2 mako>=1,<2
setuptools setuptools