Files
kiosk/src/lib/userstore.ts
Philipp Dormann c7c1c6dc41
All checks were successful
continuous-integration/drone/push Build is passing
refactor!: cleanup userdata localstorage + components
2023-04-19 18:06:13 +02:00

71 lines
1.8 KiB
TypeScript

import { AuthService, OpenAPI, type ResponseAuth } from '@odit/lfk-client-js';
import { writable } from 'svelte/store';
type UserState = {
access_token: string;
refresh_token: string;
isLoggedIn: boolean;
refreshInterval: NodeJS.Timer | undefined;
};
const state: UserState = {
access_token: '',
refresh_token: '',
isLoggedIn: false,
refreshInterval: undefined
};
const userState = writable(state);
async function auth_login(resAuth: ResponseAuth) {
if (!resAuth) {
return state;
}
state.access_token = resAuth.access_token;
state.refresh_token = resAuth.refresh_token;
state.isLoggedIn = true;
state.refreshInterval = setInterval(() => {
refreshAuth();
}, 2 * 60000);
localStorage.setItem('kiosk-userdata', JSON.stringify(state));
OpenAPI.TOKEN = resAuth.access_token;
userState.set(state);
return state;
}
async function refreshAuth() {
try {
const authRes = (await AuthService.authControllerRefresh({
token: state.refresh_token
})) as ResponseAuth;
OpenAPI.TOKEN = authRes.access_token;
} catch {
logout();
}
}
async function loginFromStorage() {
const storagedata = localStorage.getItem('kiosk-userdata');
const userdata = JSON.parse(storagedata || '{}') as UserState;
if (!userdata.access_token) {
throw new Error('Unauthorized');
}
state.access_token = userdata.access_token;
state.refresh_token = userdata.refresh_token;
state.isLoggedIn = true;
state.refreshInterval = setInterval(() => {
refreshAuth();
}, 2 * 60000);
OpenAPI.TOKEN = userdata.access_token;
userState.set(state);
return state;
}
async function logout() {
state.isLoggedIn = false;
state.access_token = '';
state.refresh_token = '';
state.refreshInterval = undefined;
localStorage.clear();
return state;
}
export { auth_login, logout, loginFromStorage, refreshAuth, userState };