Show phone number when username doesn't exist. Fixes #213
This commit is contained in:
@@ -38,14 +38,15 @@ class AuthAPI(abc.ABC):
|
||||
|
||||
@abstractmethod
|
||||
def get_login_response(self, status: int = 200, state: str = "", username: str = "",
|
||||
mxid: str = "", message: str = "", error: str = "",
|
||||
errcode: str = "") -> web.Response:
|
||||
phone: str = "", human_tg_id: str = "", mxid: str = "",
|
||||
message: str = "", error: str = "", errcode: str = "") -> web.Response:
|
||||
raise NotImplementedError()
|
||||
|
||||
@abstractmethod
|
||||
def get_mx_login_response(self, status: int = 200, state: str = "", username: str = "",
|
||||
mxid: str = "", message: str = "", error: str = "",
|
||||
errcode: str = "") -> web.Response:
|
||||
phone: str = "", human_tg_id: str = "", mxid: str = "",
|
||||
message: str = "", error: str = "", errcode: str = ""
|
||||
) -> web.Response:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def post_matrix_token(self, user: User, token: str) -> web.Response:
|
||||
@@ -114,7 +115,8 @@ class AuthAPI(abc.ABC):
|
||||
if user.command_status and user.command_status["action"] == "Login":
|
||||
user.command_status = None
|
||||
return self.get_login_response(mxid=user.mxid, state="logged-in", status=200,
|
||||
username=user_info.username)
|
||||
username=user_info.username, phone=None,
|
||||
human_tg_id=f"@{user_info.username}")
|
||||
except AccessTokenInvalidError:
|
||||
return self.get_login_response(mxid=user.mxid, state="token", status=401,
|
||||
errcode="bot_token_invalid",
|
||||
@@ -135,8 +137,10 @@ class AuthAPI(abc.ABC):
|
||||
asyncio.ensure_future(user.post_login(user_info), loop=self.loop)
|
||||
if user.command_status and user.command_status["action"] == "Login":
|
||||
user.command_status = None
|
||||
human_tg_id = f"@{user_info.username}" if user_info.username else f"+{user_info.phone}"
|
||||
return self.get_login_response(mxid=user.mxid, state="logged-in", status=200,
|
||||
username=user_info.username)
|
||||
username=user_info.username, phone=user_info.phone,
|
||||
human_tg_id=human_tg_id)
|
||||
except PhoneCodeInvalidError:
|
||||
return self.get_login_response(mxid=user.mxid, state="code", status=401,
|
||||
errcode="phone_code_invalid",
|
||||
@@ -168,8 +172,10 @@ class AuthAPI(abc.ABC):
|
||||
asyncio.ensure_future(user.post_login(user_info), loop=self.loop)
|
||||
if user.command_status and user.command_status["action"] == "Login (password entry)":
|
||||
user.command_status = None
|
||||
human_tg_id = f"@{user_info.username}" if user_info.username else f"+{user_info.phone}"
|
||||
return self.get_login_response(mxid=user.mxid, state="logged-in", status=200,
|
||||
username=user_info.username)
|
||||
username=user_info.username, phone=user_info.phone,
|
||||
human_tg_id=human_tg_id)
|
||||
except PasswordEmptyError:
|
||||
return self.get_login_response(mxid=user.mxid, state="password", status=400,
|
||||
errcode="password_empty",
|
||||
|
||||
@@ -75,7 +75,7 @@ class ProvisioningAPI(AuthAPI):
|
||||
return self.get_error_response(404, "portal_not_found",
|
||||
"Portal with given Matrix ID not found.")
|
||||
user, _ = await self.get_user(request.query.get("user_id", None), expect_logged_in=None,
|
||||
require_puppeting=False)
|
||||
require_puppeting=False)
|
||||
return web.json_response({
|
||||
"mxid": portal.mxid,
|
||||
"chat_id": get_peer_id(portal.peer),
|
||||
@@ -102,7 +102,7 @@ class ProvisioningAPI(AuthAPI):
|
||||
return self.get_error_response(404, "portal_not_found",
|
||||
"Portal to given Telegram chat not found.")
|
||||
user, _ = await self.get_user(request.query.get("user_id", None), expect_logged_in=None,
|
||||
require_puppeting=False)
|
||||
require_puppeting=False)
|
||||
return web.json_response({
|
||||
"mxid": portal.mxid,
|
||||
"chat_id": get_peer_id(portal.peer),
|
||||
@@ -380,16 +380,18 @@ class ProvisioningAPI(AuthAPI):
|
||||
"errcode": errcode,
|
||||
}, status=status)
|
||||
|
||||
def get_mx_login_response(self, status=200, state="", username="", mxid="", message="",
|
||||
error="", errcode=""):
|
||||
def get_mx_login_response(self, status=200, state="", username="", phone="", human_tg_id="",
|
||||
mxid="", message="", error="", errcode=""):
|
||||
raise NotImplementedError()
|
||||
|
||||
def get_login_response(self, status=200, state="", username="", mxid="", message="", error="",
|
||||
errcode="") -> web.Response:
|
||||
if username:
|
||||
def get_login_response(self, status=200, state="", username="", phone: str = "",
|
||||
human_tg_id: str = "", mxid="", message="", error="", errcode=""
|
||||
) -> web.Response:
|
||||
if username or phone:
|
||||
resp = {
|
||||
"state": "logged-in",
|
||||
"username": username,
|
||||
"phone": phone,
|
||||
}
|
||||
elif message:
|
||||
resp = {
|
||||
@@ -436,7 +438,8 @@ class ProvisioningAPI(AuthAPI):
|
||||
if expect_logged_in is not None:
|
||||
logged_in = await user.is_logged_in()
|
||||
if not expect_logged_in and logged_in:
|
||||
return user, self.get_login_response(username=user.username, status=409,
|
||||
return user, self.get_login_response(username=user.username, phone=user.phone,
|
||||
status=409,
|
||||
error="You are already logged in.",
|
||||
errcode="already_logged_in")
|
||||
elif expect_logged_in and not logged_in:
|
||||
|
||||
@@ -716,6 +716,9 @@ responses:
|
||||
username:
|
||||
type: string
|
||||
description: The Telegram username the user is logged in as.
|
||||
phone:
|
||||
type: string
|
||||
description: The phone number of the account the user is logged into.
|
||||
BadRequest:
|
||||
description: Invalid JSON.
|
||||
schema:
|
||||
@@ -800,7 +803,7 @@ definitions:
|
||||
example: A.
|
||||
phone:
|
||||
type: string
|
||||
example: +123456789
|
||||
example: 123456789
|
||||
is_bot:
|
||||
type: boolean
|
||||
example: false
|
||||
@@ -858,6 +861,9 @@ definitions:
|
||||
username:
|
||||
type: string
|
||||
description: The Telegram username the user is logged in as. Only applicable if state=logged-in
|
||||
phone:
|
||||
type: string
|
||||
description: The phone number of the account the user logged into. Only applicable if state=logged-in
|
||||
|
||||
HumanReadableError:
|
||||
type: string
|
||||
|
||||
@@ -84,7 +84,7 @@ class PublicBridgeWebsite(AuthAPI):
|
||||
if not await user.is_logged_in():
|
||||
return self.get_login_response(mxid=user.mxid, state=state)
|
||||
|
||||
return self.get_login_response(mxid=user.mxid, username=user.username)
|
||||
return self.get_login_response(mxid=user.mxid, human_tg_id=user.human_tg_id)
|
||||
|
||||
async def get_matrix_login(self, request: web.Request) -> web.Response:
|
||||
mxid = self.verify_token(request.rel_url.query.get("token", None), endpoint="/matrix-login")
|
||||
@@ -109,18 +109,19 @@ class PublicBridgeWebsite(AuthAPI):
|
||||
return self.get_mx_login_response(mxid=user.mxid)
|
||||
|
||||
def get_login_response(self, status: int = 200, state: str = "", username: str = "",
|
||||
mxid: str = "", message: str = "", error: str = "",
|
||||
errcode: str = "") -> web.Response:
|
||||
phone: str = "", human_tg_id: str = "", mxid: str = "",
|
||||
message: str = "", error: str = "", errcode: str = "") -> web.Response:
|
||||
return web.Response(status=status, content_type="text/html",
|
||||
text=self.login.render(username=username, state=state, error=error,
|
||||
message=message, mxid=mxid))
|
||||
text=self.login.render(human_tg_id=human_tg_id, state=state,
|
||||
error=error, message=message, mxid=mxid))
|
||||
|
||||
def get_mx_login_response(self, status: int = 200, state: str = "", username: str = "",
|
||||
mxid: str = "", message: str = "", error: str = "",
|
||||
errcode: str = "") -> web.Response:
|
||||
phone: str = "", human_tg_id: str = "", mxid: str = "",
|
||||
message: str = "", error: str = "", errcode: str = ""
|
||||
) -> web.Response:
|
||||
return web.Response(status=status, content_type="text/html",
|
||||
text=self.mx_login.render(username=username, state=state, error=error,
|
||||
message=message, mxid=mxid))
|
||||
text=self.mx_login.render(human_tg_id=human_tg_id, state=state,
|
||||
error=error, message=message, mxid=mxid))
|
||||
|
||||
async def post_matrix_login(self, request: web.Request) -> web.Response:
|
||||
mxid = self.verify_token(request.rel_url.query.get("token", None), endpoint="/matrix-login")
|
||||
@@ -157,7 +158,7 @@ class PublicBridgeWebsite(AuthAPI):
|
||||
return self.get_login_response(mxid=user.mxid, error="You are not whitelisted.",
|
||||
status=403)
|
||||
elif await user.is_logged_in():
|
||||
return self.get_login_response(mxid=user.mxid, username=user.username)
|
||||
return self.get_login_response(mxid=user.mxid, human_tg_id=user.human_tg_id)
|
||||
|
||||
await user.ensure_started(even_if_no_session=True)
|
||||
|
||||
|
||||
@@ -51,25 +51,25 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
</head>
|
||||
<body>
|
||||
<main class="container">
|
||||
% if username:
|
||||
% if human_tg_id:
|
||||
% if state == "logged-in":
|
||||
<h1>Logged in successfully!</h1>
|
||||
<p>
|
||||
Logged in as @${username}.
|
||||
Logged in as ${human_tg_id}.
|
||||
You can now close this page.
|
||||
You should be invited to Telegram portals on Matrix momentarily.
|
||||
</p>
|
||||
% elif state == "bot-logged-in":
|
||||
<h1>Logged in successfully!</h1>
|
||||
<p>
|
||||
Logged in as @${username}.
|
||||
Logged in as ${human_tg_id}.
|
||||
You can now close this page.
|
||||
You should be invited to Telegram portals on Matrix momentarily.
|
||||
</p>
|
||||
% else:
|
||||
<h1>You're already logged in!</h1>
|
||||
<p>
|
||||
You're logged in as @${username}.
|
||||
You're logged in as ${human_tg_id}.
|
||||
</p>
|
||||
<p>
|
||||
If you want to log in with another account, log out using the <code>logout</code>
|
||||
|
||||
Reference in New Issue
Block a user