From c82779e15b9a04b2cf8aaa0c461a91ab07357546 Mon Sep 17 00:00:00 2001
From: 3252a8 <3252a8@proton.me>
Date: Fri, 22 May 2026 14:47:01 +0300
Subject: [PATCH] fix: restore telegram mini app auth
---
frontend/src/App.svelte | 2 ++
.../src/lib/webapp/stores/accountStore.js | 1 +
frontend/src/lib/webapp/webappBoot.js | 10 +++---
.../src/webapp/screens/SettingsScreen.svelte | 13 ++++---
tests/test_webapp_telegram_logout.py | 35 +++++++++++++++++++
5 files changed, 51 insertions(+), 10 deletions(-)
create mode 100644 tests/test_webapp_telegram_logout.py
diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte
index fe4f70a..21bb499 100644
--- a/frontend/src/App.svelte
+++ b/frontend/src/App.svelte
@@ -397,6 +397,7 @@
$: telegramOAuthClientId = Number(CFG.telegramOAuthClientId || telegramLoginBotId || 0);
$: telegramMiniAppInitData = tg?.initData || readTelegramMiniAppInitDataFromLocation();
$: telegramMiniAppAuthAvailable = Boolean(telegramMiniAppInitData);
+ $: telegramMiniAppContext = hasTelegramLaunchParams();
$: telegramLoginUnavailable =
!telegramMiniAppAuthAvailable && !telegramOAuthClientId && telegramSdkStatus !== "loading";
$: telegramLoginChecking =
@@ -1407,6 +1408,7 @@
{user}
{userAgreementUrl}
{userLanguage}
+ showLogout={!telegramMiniAppContext}
linkTelegramAccount={accountStore.linkTelegramAccount}
logout={accountStore.logout}
{openAdminPanel}
diff --git a/frontend/src/lib/webapp/stores/accountStore.js b/frontend/src/lib/webapp/stores/accountStore.js
index 34a59eb..0345a02 100644
--- a/frontend/src/lib/webapp/stores/accountStore.js
+++ b/frontend/src/lib/webapp/stores/accountStore.js
@@ -362,6 +362,7 @@ export function createAccountStore({
}
async function logout() {
+ if (telegramSdk.hasLaunchParams()) return;
markManualLogout();
clearToken();
try {
diff --git a/frontend/src/lib/webapp/webappBoot.js b/frontend/src/lib/webapp/webappBoot.js
index feea227..33e9b23 100644
--- a/frontend/src/lib/webapp/webappBoot.js
+++ b/frontend/src/lib/webapp/webappBoot.js
@@ -61,11 +61,6 @@ export async function runWebappBoot({
);
}
- if (isManuallyLoggedOut()) {
- showLogin();
- return;
- }
-
const widgetAuthData = readTelegramLoginWidgetAuthData();
if (widgetAuthData && (await finalizeTelegramAuth(widgetAuthData, "auth_data"))) return;
@@ -78,6 +73,11 @@ export async function runWebappBoot({
}
}
+ if (isManuallyLoggedOut()) {
+ showLogin();
+ return;
+ }
+
if (getToken() || getCsrfToken()) {
try {
await loadData();
diff --git a/frontend/src/webapp/screens/SettingsScreen.svelte b/frontend/src/webapp/screens/SettingsScreen.svelte
index e056f63..68b70f5 100644
--- a/frontend/src/webapp/screens/SettingsScreen.svelte
+++ b/frontend/src/webapp/screens/SettingsScreen.svelte
@@ -34,6 +34,7 @@
export let user = {};
export let userAgreementUrl = "";
export let userLanguage = "";
+ export let showLogout = true;
export let linkTelegramAccount = () => {};
export let logout = () => {};
@@ -187,10 +188,12 @@
{/if}
-
+ {#if showLogout}
+
+ {/if}
diff --git a/tests/test_webapp_telegram_logout.py b/tests/test_webapp_telegram_logout.py
new file mode 100644
index 0000000..eb5a262
--- /dev/null
+++ b/tests/test_webapp_telegram_logout.py
@@ -0,0 +1,35 @@
+from pathlib import Path
+
+REPO_ROOT = Path(__file__).resolve().parents[1]
+
+
+def _read(path: str) -> str:
+ return (REPO_ROOT / path).read_text(encoding="utf-8")
+
+
+def test_telegram_init_data_login_runs_before_manual_logout_gate():
+ source = _read("frontend/src/lib/webapp/webappBoot.js")
+
+ init_data_pos = source.index("const initData = getInitDataForBoot();")
+ manual_logout_pos = source.index("if (isManuallyLoggedOut())")
+
+ assert init_data_pos < manual_logout_pos
+
+
+def test_logout_button_is_controlled_by_telegram_context():
+ app_source = _read("frontend/src/App.svelte")
+ settings_source = _read("frontend/src/webapp/screens/SettingsScreen.svelte")
+
+ assert "$: telegramMiniAppContext = hasTelegramLaunchParams();" in app_source
+ assert "showLogout={!telegramMiniAppContext}" in app_source
+ assert "export let showLogout = true;" in settings_source
+ assert "{#if showLogout}" in settings_source
+
+
+def test_logout_handler_is_noop_inside_telegram_mini_app():
+ source = _read("frontend/src/lib/webapp/stores/accountStore.js")
+
+ guard_pos = source.index("if (telegramSdk.hasLaunchParams()) return;")
+ mark_logout_pos = source.index("markManualLogout();")
+
+ assert guard_pos < mark_logout_pos