fix: restore telegram mini app auth
This commit is contained in:
@@ -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}
|
||||
|
||||
@@ -362,6 +362,7 @@ export function createAccountStore({
|
||||
}
|
||||
|
||||
async function logout() {
|
||||
if (telegramSdk.hasLaunchParams()) return;
|
||||
markManualLogout();
|
||||
clearToken();
|
||||
try {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 @@
|
||||
<ArrowRight size={17} />
|
||||
</button>
|
||||
{/if}
|
||||
<button class="settings-row settings-row-logout" type="button" onclick={logout}>
|
||||
<UserRound size={21} />
|
||||
<span><strong>{t("wa_logout")}</strong><small>{t("wa_end_session")}</small></span>
|
||||
<ArrowRight size={17} />
|
||||
</button>
|
||||
{#if showLogout}
|
||||
<button class="settings-row settings-row-logout" type="button" onclick={logout}>
|
||||
<UserRound size={21} />
|
||||
<span><strong>{t("wa_logout")}</strong><small>{t("wa_end_session")}</small></span>
|
||||
<ArrowRight size={17} />
|
||||
</button>
|
||||
{/if}
|
||||
</div>
|
||||
</main>
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user