Basic userstore

This commit is contained in:
Nicolai Ort 2023-04-19 10:35:22 +02:00
parent f927cc916b
commit 88f36575fb
Signed by: niggl
GPG Key ID: 13AFA55AF62F269F

92
src/lib/userstore.ts Normal file
View File

@ -0,0 +1,92 @@
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: number
};
const userStore = () => {
const state: UserState = {
access_token: '',
refresh_token: '',
isLoggedIn: false,
refreshInterval: 0
};
const { subscribe, set, update } = writable(state);
const methods = {
async login(resAuth: ResponseAuth) {
update((state: UserState) => {
if (!resAuth) {
return state;
}
state.access_token = resAuth.access_token;
state.refresh_token = resAuth.refresh_token;
state.isLoggedIn = true;
state.refreshInterval = setInterval(() => {
this.refreshAuth();
}, 2 * 60000)
localStorage.setItem('userdata', JSON.stringify(state));
localStorage.setItem('access_token', state.access_token);
localStorage.setItem('refresh_token', state.refresh_token);
return state;
});
},
async refreshAuth() {
try {
const authRes = await AuthService.authControllerRefresh({ token: state.refresh_token }) as ResponseAuth;
OpenAPI.TOKEN = authRes.access_token;
} catch {
this.logout();
}
},
loginFromStorage() {
console.log('loginFromStorage');
const access_token = localStorage.getItem('token');
if (!access_token) {
throw new Error('Unauthorized');
}
const storagedata = localStorage.getItem('userdata');
const userdata = JSON.parse(storagedata || '{}') as UserState;
update((state: UserState) => {
state.access_token = access_token;
state.refresh_token = userdata.refresh_token;
state.isLoggedIn = true;
state.refreshInterval = setInterval(() => {
this.refreshAuth();
}, 2 * 60000);
return state;
});
this.refreshAuth
},
async logout() {
update((state: UserState) => {
state.isLoggedIn = false;
state.access_token = '';
state.refresh_token = '';
state.refreshInterval = 0;
localStorage.clear();
return state;
});
}
};
return {
subscribe,
set,
update,
state,
...methods
};
};
export default userStore();