fix: restore telegram mini app auth
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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