aboutsummaryrefslogtreecommitdiff
path: root/fe/src/stores/auth.ts
diff options
context:
space:
mode:
Diffstat (limited to 'fe/src/stores/auth.ts')
-rw-r--r--fe/src/stores/auth.ts153
1 files changed, 70 insertions, 83 deletions
diff --git a/fe/src/stores/auth.ts b/fe/src/stores/auth.ts
index 0efc80b..63f027e 100644
--- a/fe/src/stores/auth.ts
+++ b/fe/src/stores/auth.ts
@@ -1,100 +1,87 @@
1import type { Invalidator, Subscriber, Unsubscriber } from 'svelte/store'; 1import type { Preference, TokenStore, Nullable, UserStore, User, PreferenceStore } from "../types";
2import type { Preference } from '../types'; 2import { writable, derived } from "svelte/store";
3import { writable, derived } from 'svelte/store';
4 3
5type Nullable<T> = T | null;
6
7interface User {
8 uuid: string;
9 username: string;
10}
11
12interface TokenStore {
13 subscribe: (run: Subscriber<Nullable<string>>, invalidate?: Invalidator<Nullable<string>>) => Unsubscriber,
14 authenticate: (newToken: string) => void,
15 unauthenticate: () => void
16}
17
18
19interface UserStore {
20 subscribe: (run: Subscriber<Nullable<User>>, invalidate?: Invalidator<Nullable<User>>) => Unsubscriber,
21 setUser: (user: User) => void,
22 reset: () => void
23}
24
25interface PreferenceStore {
26 subscribe: (run: Subscriber<Preference>, invalidate?: Invalidator<Preference>) => Unsubscriber,
27 set: (this: void, value: Preference) => void
28}
29 4
30function createTokenStore(): TokenStore { 5function createTokenStore(): TokenStore {
31 const storedToken = localStorage.getItem("token"); 6 const storedToken = localStorage.getItem("token");
32 const { subscribe, set } = writable<string | null>(storedToken); 7 const { subscribe, set } = writable<string | null>(storedToken);
33 8
34 function authenticate(newToken: string): void { 9 function authenticate(newToken: string): void {
35 try { 10 try {
36 localStorage.setItem("token", newToken); 11 localStorage.setItem("token", newToken);
37 set(newToken); 12 set(newToken);
38 } catch (e) { 13 } catch (e) {
39 console.error('error', e); 14 console.error("error", e);
15 }
16 }
17
18 function unauthenticate(): void {
19 localStorage.removeItem("token");
20 set(null);
40 } 21 }
41 } 22
42 23 return {
43 function unauthenticate(): void { 24 subscribe,
44 localStorage.removeItem("token"); 25 authenticate,
45 set(null); 26 unauthenticate
46 } 27 };
47
48 return {
49 subscribe,
50 authenticate,
51 unauthenticate
52 };
53} 28}
54 29
55function onTokenChange($token: Nullable<string>): boolean { 30function onTokenChange($token: Nullable<string>): boolean {
56 return $token ? true : false; 31 return $token ? true : false;
57} 32}
58 33
59function createUserStore(): UserStore { 34function createUserStore(): UserStore {
60 const user = localStorage.getItem('user'); 35 const user = localStorage.getItem("user");
61 const userObj: Nullable<User> = user ? JSON.parse(user) : null; 36 const userObj: Nullable<User> = user ? JSON.parse(user) : null;
62 const { subscribe, set } = writable<User | null>(userObj); 37 const { subscribe, set } = writable<User | null>(userObj);
63 38
64 const setUser = (user: User) => { 39 const setUser = (user: User) => {
65 localStorage.setItem('user', JSON.stringify(user)); 40 localStorage.setItem("user", JSON.stringify(user));
66 set(user); 41 set(user);
67 } 42 };
68 43
69 const reset = () => { 44 const reset = () => {
70 localStorage.removeItem('user'); 45 localStorage.removeItem("user");
71 set(null); 46 set(null);
72 } 47 };
73 48
74 return { 49 return {
75 subscribe, 50 subscribe,
76 setUser, 51 setUser,
77 reset 52 reset
78 } 53 };
79} 54}
80 55
81 56
82function createPreferenceStore(): PreferenceStore { 57function createPreferenceStore(): PreferenceStore {
83 const preferences = localStorage.getItem('preferences'); 58 const preferences = localStorage.getItem("preferences");
84 const preferenceObj: Preference = preferences ? JSON.parse(preferences) : { 59 const preferenceObj: Preference = preferences ? JSON.parse(preferences) : {
85 color: "#FF0000", 60 id: 0,
86 size: { 61 color: "#FF0000",
87 size: 16, 62 size_id: 0,
88 unit: 'oz' 63 user_id: 0
89 } 64 };
90 }; 65
91 66 const { subscribe, set, update } = writable<Nullable<Preference>>(preferenceObj);
92 const { subscribe, set } = writable<Preference>(preferenceObj); 67
93 68 const setPreference = (preference: Preference) => {
94 return { 69 localStorage.setItem("preference", JSON.stringify(preference));
95 subscribe, 70 set(preference);
96 set 71 };
97 } 72
73 const reset = () => {
74 localStorage.removeItem("preference");
75 set(null);
76 };
77
78 return {
79 set,
80 subscribe,
81 reset,
82 update,
83 setPreference,
84 };
98} 85}
99 86
100export const token = createTokenStore(); 87export const token = createTokenStore();