Wire Tauri AppImage to native keyring
This commit is contained in:
+37
-1
@@ -1,5 +1,35 @@
|
||||
<script lang="ts">
|
||||
import { onMount } from 'svelte';
|
||||
import { invoke } from '@tauri-apps/api/core';
|
||||
|
||||
type ClientSettings = { server_address: string; username: string };
|
||||
|
||||
function nativeClientAvailable() {
|
||||
return typeof window !== 'undefined' && '__TAURI_INTERNALS__' in window;
|
||||
}
|
||||
|
||||
async function saveNativeSession() {
|
||||
if (!nativeClientAvailable() || !username || !serverAddress || !sessionToken) return;
|
||||
const settings: ClientSettings = { server_address: serverAddress, username };
|
||||
await invoke('save_client_settings', { settings });
|
||||
await invoke('store_server_session', { settings, session: sessionToken });
|
||||
}
|
||||
|
||||
async function clearNativeSession() {
|
||||
if (!nativeClientAvailable() || !username || !serverAddress) return;
|
||||
await invoke('clear_server_session', { settings: { server_address: serverAddress, username } satisfies ClientSettings });
|
||||
}
|
||||
|
||||
async function loadNativeSettings() {
|
||||
if (!nativeClientAvailable()) return;
|
||||
try {
|
||||
const settings = await invoke<ClientSettings>('load_client_settings');
|
||||
serverAddress = settings.server_address;
|
||||
username = settings.username;
|
||||
} catch {
|
||||
authError = 'Native settings could not be read. Enter the server address and username again.';
|
||||
}
|
||||
}
|
||||
|
||||
let serverAddress = 'http://127.0.0.1:8787';
|
||||
let connectionState = 'OFFLINE';
|
||||
@@ -205,6 +235,9 @@
|
||||
sessionToken = result.session_token;
|
||||
authenticated = true;
|
||||
mustReplaceCredentials = result.must_replace_credentials;
|
||||
await saveNativeSession().catch(() => {
|
||||
authError = 'Login succeeded, but the session could not be stored in the Linux keyring.';
|
||||
});
|
||||
connectionState = 'CONNECTED';
|
||||
await loadActivity();
|
||||
await loadNotifications();
|
||||
@@ -267,6 +300,7 @@
|
||||
sessionToken = '';
|
||||
authenticated = false;
|
||||
mustReplaceCredentials = false;
|
||||
await clearNativeSession().catch(() => undefined);
|
||||
username = newUsername;
|
||||
password = '';
|
||||
newPassword = '';
|
||||
@@ -285,6 +319,7 @@
|
||||
if (sessionToken) {
|
||||
await fetch(`${serverAddress}/api/v1/auth/logout`, { method: 'POST', headers: { authorization: `Bearer ${sessionToken}` } }).catch(() => undefined);
|
||||
}
|
||||
await clearNativeSession().catch(() => undefined);
|
||||
sessionToken = '';
|
||||
authenticated = false;
|
||||
mustReplaceCredentials = false;
|
||||
@@ -1026,7 +1061,8 @@
|
||||
});
|
||||
}
|
||||
|
||||
onMount(() => {
|
||||
onMount(async () => {
|
||||
await loadNativeSettings();
|
||||
void checkServer();
|
||||
void loadPublicCommands();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user