diff options
Diffstat (limited to 'fe/src/stores')
| -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(); |
