fix: restore telegram mini app auth

This commit is contained in:
3252a8
2026-05-22 14:47:01 +03:00
parent 9e56715e77
commit c82779e15b
5 changed files with 51 additions and 10 deletions
+2
View File
@@ -397,6 +397,7 @@
$: telegramOAuthClientId = Number(CFG.telegramOAuthClientId || telegramLoginBotId || 0); $: telegramOAuthClientId = Number(CFG.telegramOAuthClientId || telegramLoginBotId || 0);
$: telegramMiniAppInitData = tg?.initData || readTelegramMiniAppInitDataFromLocation(); $: telegramMiniAppInitData = tg?.initData || readTelegramMiniAppInitDataFromLocation();
$: telegramMiniAppAuthAvailable = Boolean(telegramMiniAppInitData); $: telegramMiniAppAuthAvailable = Boolean(telegramMiniAppInitData);
$: telegramMiniAppContext = hasTelegramLaunchParams();
$: telegramLoginUnavailable = $: telegramLoginUnavailable =
!telegramMiniAppAuthAvailable && !telegramOAuthClientId && telegramSdkStatus !== "loading"; !telegramMiniAppAuthAvailable && !telegramOAuthClientId && telegramSdkStatus !== "loading";
$: telegramLoginChecking = $: telegramLoginChecking =
@@ -1407,6 +1408,7 @@
{user} {user}
{userAgreementUrl} {userAgreementUrl}
{userLanguage} {userLanguage}
showLogout={!telegramMiniAppContext}
linkTelegramAccount={accountStore.linkTelegramAccount} linkTelegramAccount={accountStore.linkTelegramAccount}
logout={accountStore.logout} logout={accountStore.logout}
{openAdminPanel} {openAdminPanel}
@@ -362,6 +362,7 @@ export function createAccountStore({
} }
async function logout() { async function logout() {
if (telegramSdk.hasLaunchParams()) return;
markManualLogout(); markManualLogout();
clearToken(); clearToken();
try { try {
+5 -5
View File
@@ -61,11 +61,6 @@ export async function runWebappBoot({
); );
} }
if (isManuallyLoggedOut()) {
showLogin();
return;
}
const widgetAuthData = readTelegramLoginWidgetAuthData(); const widgetAuthData = readTelegramLoginWidgetAuthData();
if (widgetAuthData && (await finalizeTelegramAuth(widgetAuthData, "auth_data"))) return; if (widgetAuthData && (await finalizeTelegramAuth(widgetAuthData, "auth_data"))) return;
@@ -78,6 +73,11 @@ export async function runWebappBoot({
} }
} }
if (isManuallyLoggedOut()) {
showLogin();
return;
}
if (getToken() || getCsrfToken()) { if (getToken() || getCsrfToken()) {
try { try {
await loadData(); await loadData();
@@ -34,6 +34,7 @@
export let user = {}; export let user = {};
export let userAgreementUrl = ""; export let userAgreementUrl = "";
export let userLanguage = ""; export let userLanguage = "";
export let showLogout = true;
export let linkTelegramAccount = () => {}; export let linkTelegramAccount = () => {};
export let logout = () => {}; export let logout = () => {};
@@ -187,10 +188,12 @@
<ArrowRight size={17} /> <ArrowRight size={17} />
</button> </button>
{/if} {/if}
{#if showLogout}
<button class="settings-row settings-row-logout" type="button" onclick={logout}> <button class="settings-row settings-row-logout" type="button" onclick={logout}>
<UserRound size={21} /> <UserRound size={21} />
<span><strong>{t("wa_logout")}</strong><small>{t("wa_end_session")}</small></span> <span><strong>{t("wa_logout")}</strong><small>{t("wa_end_session")}</small></span>
<ArrowRight size={17} /> <ArrowRight size={17} />
</button> </button>
{/if}
</div> </div>
</main> </main>
+35
View File
@@ -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