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