|
|
|
@ -2,57 +2,71 @@ import { derived, writable, get } from "svelte/store" |
|
|
|
import api from "../../builderStore/api" |
|
|
|
|
|
|
|
export function createAuthStore() { |
|
|
|
const user = writable(null) |
|
|
|
const store = derived(user, $user => { |
|
|
|
const auth = writable({ |
|
|
|
user: null, |
|
|
|
tenantId: "default", |
|
|
|
}) |
|
|
|
const store = derived(auth, $store => { |
|
|
|
let initials = null |
|
|
|
let isAdmin = false |
|
|
|
let isBuilder = false |
|
|
|
let tenantId = "default" |
|
|
|
if ($user) { |
|
|
|
if ($user.firstName) { |
|
|
|
initials = $user.firstName[0] |
|
|
|
if ($user.lastName) { |
|
|
|
initials += $user.lastName[0] |
|
|
|
if ($store.user) { |
|
|
|
const user = $store.user |
|
|
|
if (user.firstName) { |
|
|
|
initials = user.firstName[0] |
|
|
|
if (user.lastName) { |
|
|
|
initials += user.lastName[0] |
|
|
|
} |
|
|
|
} else if ($user.email) { |
|
|
|
initials = $user.email[0] |
|
|
|
} else if (user.email) { |
|
|
|
initials = user.email[0] |
|
|
|
} else { |
|
|
|
initials = "Unknown" |
|
|
|
} |
|
|
|
isAdmin = !!$user.admin?.global |
|
|
|
isBuilder = !!$user.builder?.global |
|
|
|
tenantId = $user.tenantId || tenantId |
|
|
|
isAdmin = !!user.admin?.global |
|
|
|
isBuilder = !!user.builder?.global |
|
|
|
} |
|
|
|
return { |
|
|
|
user: $user, |
|
|
|
user: $store.user, |
|
|
|
tenantId: $store.tenantId, |
|
|
|
initials, |
|
|
|
isAdmin, |
|
|
|
isBuilder, |
|
|
|
tenantId, |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
function setUser(user) { |
|
|
|
auth.update(store => { |
|
|
|
store.user = user |
|
|
|
return store |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
return { |
|
|
|
subscribe: store.subscribe, |
|
|
|
setOrg: tenantId => { |
|
|
|
auth.update(store => { |
|
|
|
store.tenantId = tenantId |
|
|
|
return store |
|
|
|
}) |
|
|
|
}, |
|
|
|
checkAuth: async () => { |
|
|
|
const response = await api.get("/api/admin/users/self") |
|
|
|
if (response.status !== 200) { |
|
|
|
user.set(null) |
|
|
|
setUser(null) |
|
|
|
} else { |
|
|
|
const json = await response.json() |
|
|
|
user.set(json) |
|
|
|
setUser(json) |
|
|
|
} |
|
|
|
}, |
|
|
|
login: async creds => { |
|
|
|
const tenantId = creds.tenantId || get(store).tenantId |
|
|
|
delete creds.tenantId |
|
|
|
const tenantId = get(store).tenantId |
|
|
|
const response = await api.post( |
|
|
|
`/api/admin/auth/${tenantId}/login`, |
|
|
|
creds |
|
|
|
) |
|
|
|
const json = await response.json() |
|
|
|
if (response.status === 200) { |
|
|
|
user.set(json.user) |
|
|
|
setUser(json.user) |
|
|
|
} else { |
|
|
|
throw "Invalid credentials" |
|
|
|
} |
|
|
|
@ -64,13 +78,13 @@ export function createAuthStore() { |
|
|
|
throw "Unable to create logout" |
|
|
|
} |
|
|
|
await response.json() |
|
|
|
user.set(null) |
|
|
|
setUser(null) |
|
|
|
}, |
|
|
|
updateSelf: async fields => { |
|
|
|
const newUser = { ...get(user), ...fields } |
|
|
|
const response = await api.post("/api/admin/users/self", newUser) |
|
|
|
if (response.status === 200) { |
|
|
|
user.set(newUser) |
|
|
|
setUser(newUser) |
|
|
|
} else { |
|
|
|
throw "Unable to update user details" |
|
|
|
} |
|
|
|
|