diff options
Diffstat (limited to 'fe/src/stores/auth.ts')
-rw-r--r-- | fe/src/stores/auth.ts | 153 |
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 @@ | |||
1 | import type { Invalidator, Subscriber, Unsubscriber } from 'svelte/store'; | 1 | import type { Preference, TokenStore, Nullable, UserStore, User, PreferenceStore } from "../types"; |
2 | import type { Preference } from '../types'; | 2 | import { writable, derived } from "svelte/store"; |
3 | import { writable, derived } from 'svelte/store'; | ||
4 | 3 | ||
5 | type Nullable<T> = T | null; | ||
6 | |||
7 | interface User { | ||
8 | uuid: string; | ||
9 | username: string; | ||
10 | } | ||
11 | |||
12 | interface TokenStore { | ||
13 | subscribe: (run: Subscriber<Nullable<string>>, invalidate?: Invalidator<Nullable<string>>) => Unsubscriber, | ||
14 | authenticate: (newToken: string) => void, | ||
15 | unauthenticate: () => void | ||
16 | } | ||
17 | |||
18 | |||
19 | interface UserStore { | ||
20 | subscribe: (run: Subscriber<Nullable<User>>, invalidate?: Invalidator<Nullable<User>>) => Unsubscriber, | ||
21 | setUser: (user: User) => void, | ||
22 | reset: () => void | ||
23 | } | ||
24 | |||
25 | interface PreferenceStore { | ||
26 | subscribe: (run: Subscriber<Preference>, invalidate?: Invalidator<Preference>) => Unsubscriber, | ||
27 | set: (this: void, value: Preference) => void | ||
28 | } | ||
29 | 4 | ||
30 | function createTokenStore(): TokenStore { | 5 | function 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 | ||
55 | function onTokenChange($token: Nullable<string>): boolean { | 30 | function onTokenChange($token: Nullable<string>): boolean { |
56 | return $token ? true : false; | 31 | return $token ? true : false; |
57 | } | 32 | } |
58 | 33 | ||
59 | function createUserStore(): UserStore { | 34 | function 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 | ||
82 | function createPreferenceStore(): PreferenceStore { | 57 | function 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 | ||
100 | export const token = createTokenStore(); | 87 | export const token = createTokenStore(); |