Reviewed-on: andr3/fyp#102 Co-authored-by: Andre Henriques <andr3h3nriqu3s@gmail.com> Co-committed-by: Andre Henriques <andr3h3nriqu3s@gmail.com>
61 lines
1.1 KiB
TypeScript
61 lines
1.1 KiB
TypeScript
import { goto } from '$app/navigation';
|
|
import { rdelete } from '$lib/requests.svelte';
|
|
|
|
export type User = {
|
|
token: string;
|
|
id: string;
|
|
user_type: number;
|
|
username: string;
|
|
email: string;
|
|
};
|
|
|
|
export function createUserStore() {
|
|
let user = $state<User | undefined>(undefined);
|
|
|
|
function getValue() {
|
|
if (user == undefined) {
|
|
let storage = localStorage.getItem('user');
|
|
if (storage) {
|
|
try {
|
|
user = JSON.parse(storage);
|
|
} catch {
|
|
user = undefined;
|
|
}
|
|
}
|
|
}
|
|
return user;
|
|
}
|
|
|
|
return {
|
|
get user() {
|
|
return getValue();
|
|
},
|
|
set user(value: User | undefined) {
|
|
if (value) {
|
|
localStorage.setItem('user', JSON.stringify(value));
|
|
} else {
|
|
if (user) {
|
|
// Request the deletion of the token
|
|
rdelete('/user/token/logoff', {});
|
|
}
|
|
localStorage.removeItem('user');
|
|
}
|
|
user = value;
|
|
},
|
|
checkUser(pathOnFail: string, level?: number) {
|
|
if (user && user.level > (level ?? 2)) {
|
|
goto(pathOnFail);
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
},
|
|
isLogin() {
|
|
if (getValue()) return true;
|
|
return false;
|
|
}
|
|
};
|
|
}
|
|
|
|
export const userStore = createUserStore();
|