[client/ui-wails] Wire up the SSO login flow end-to-end

Mirror the Fyne client's login path: the daemon Login RPC now defaults
ProfileName/Username from GetActiveProfile + the OS user and sets
IsUnixDesktopClient on Linux/FreeBSD so the daemon picks the SSO
browser flow. A new OpenURL service launches the user's default
browser via xdg-open / open / rundll32 (Fyne's openURL helper) — the
embedded WebKit's window.open silently fails for external URLs.

The frontend gains a Login page that drives the full Login →
window.open via OpenURL → WaitSSOLogin → Up sequence with progress
states. Status surfaces a Login button while the daemon reports
NeedsLogin/SessionExpired, and the tray's status row stops being a
purely-decorative label: it becomes a clickable Login entry whenever
re-authentication is required.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Zoltán Papp
2026-05-06 17:48:47 +02:00
parent 91c745e5e8
commit bb2bf673a0
7 changed files with 213 additions and 15 deletions

View File

@@ -28,6 +28,17 @@ export function Logout(p: $models.LogoutParams): $CancellablePromise<void> {
return $Call.ByID(4028053230, p);
}
/**
* OpenURL launches the user's preferred browser to display url. Mirrors the
* Fyne client's openURL helper so the SSO flow can pop the verification page
* the same way as the legacy UI — WebKitGTK's window.open is blocked by the
* embedded webview, and asking the user to copy/paste defeats the point of
* SSO. Honors $BROWSER first, then falls back to the platform default.
*/
export function OpenURL(url: string): $CancellablePromise<void> {
return $Call.ByID(4267001345, url);
}
export function Up(p: $models.UpParams): $CancellablePromise<void> {
return $Call.ByID(1178388469, p);
}