Background: Google blocks OAuth in embedded WebView (403 disallowed_useragent). Solution: open Google login in the Android system browser, then deep-link back to the Tauri app via custom scheme after callback. Changes: - Tauri: add tauri-plugin-opener + tauri-plugin-deep-link to Cargo.toml - Tauri: register plugins in lib.rs, add capabilities - Web: auth-form.tsx Google button uses openUrl() via @tauri-apps/plugin-opener on Tauri (opens in system browser), falls back to window.location.href - Web: add lib/tauri.ts for isTauri() detection + lazy opens - API: /auth/google accepts ?platform=tauri → encodes into OAuth state param - API: /auth/google/callback decodes state → if tauri, renders HTML page that deep-links back via zeavisedu:// scheme; if web, 302 redirect - Android: patch script adds deep link intent filter for zeavisedu:// scheme Co-Authored-By: Claude <noreply@anthropic.com>
26 lines
685 B
TypeScript
26 lines
685 B
TypeScript
/**
|
|
* Lightweight Tauri environment detection and utilities.
|
|
* Avoids importing @tauri-apps/api at module level so the web build
|
|
* doesn't bundle Tauri internals.
|
|
*/
|
|
|
|
let _isTauri: boolean | null = null;
|
|
|
|
export function isTauri(): boolean {
|
|
if (_isTauri !== null) return _isTauri;
|
|
_isTauri =
|
|
typeof window !== 'undefined' &&
|
|
'__TAURI_INTERNALS__' in window;
|
|
return _isTauri;
|
|
}
|
|
|
|
export async function openUrl(url: string): Promise<void> {
|
|
if (!isTauri()) {
|
|
window.location.href = url;
|
|
return;
|
|
}
|
|
// Lazy-import Tauri opener only in Tauri context
|
|
const { openUrl: tauriOpenUrl } = await import('@tauri-apps/plugin-opener');
|
|
await tauriOpenUrl(url);
|
|
}
|