diff --git a/api/src/framework/express/user.ts b/api/src/framework/express/user.ts index 08fea14..d3e9c55 100644 --- a/api/src/framework/express/user.ts +++ b/api/src/framework/express/user.ts @@ -69,17 +69,17 @@ export function Routes(services: Services) { ); router.get( '/read/:uuid', + CheckPermissions(), ReadUserSchema(), SchemaValidator(), - CheckPermissions(), ReadHandler(services), ); router.post( '/create', + CheckPermissions(), CreateUserSchema(), SchemaValidator(), - CheckPermissions(), CreateHandler(services), ); diff --git a/www/src/App.svelte b/www/src/App.svelte index 4802038..856b0ae 100644 --- a/www/src/App.svelte +++ b/www/src/App.svelte @@ -1,10 +1,25 @@ diff --git a/www/src/functions/request.ts b/www/src/functions/request.ts index 6050926..0f0fb0b 100644 --- a/www/src/functions/request.ts +++ b/www/src/functions/request.ts @@ -4,18 +4,15 @@ enum Methods { 'PUT' = 'PUT', } -export async function get(route: string): Promise { +export async function get(route: string): Promise { return request('GET', route); } -export async function post( - route: string, - data?: unknown, -): Promise { +export async function post(route: string, data?: unknown): Promise { return request('POST', route, data); } -export async function put(route: string, data: unknown): Promise { +export async function put(route: string, data: unknown): Promise { return request('PUT', route, data); } @@ -23,7 +20,7 @@ async function request( method: keyof typeof Methods, route: string, data?: unknown, -): Promise { +): Promise { const response = await fetch(`${process.env.APIURL}${route}`, { headers: { 'content-type': 'application/json', @@ -34,8 +31,11 @@ async function request( body: data ? JSON.stringify(data) : null, }); + if (!response.ok) throw new Error(await response.json()); + if (response.ok && response.status !== 204) { return response.json() as T; } - return null; + + return {} as T; } diff --git a/www/src/functions/user.ts b/www/src/functions/user.ts index c63a6fc..04ad500 100644 --- a/www/src/functions/user.ts +++ b/www/src/functions/user.ts @@ -1,22 +1,18 @@ import type { CreateUserBody, LoginUserBody, UserInfo } from '@core'; import { post, get } from './request'; -import { currentUser } from '../store/user'; export async function login(raw: LoginUserBody) { - const user = await post('/user/login', raw); - currentUser.set(user); - return user; + return post('/user/login', raw); } export async function logout() { - await post('/user/logout'); - currentUser.set(null); + await post('/user/logout'); } export async function read(uuid: string) { - const user = await get(`/user/read/${uuid}`); + return get(`/user/read/${uuid}`); } export async function create(raw: CreateUserBody) { - const user = await post('/user/create', raw); + return post('/user/create', raw); } diff --git a/www/src/pages/Login.svelte b/www/src/pages/Login.svelte index a918172..c0e6e4b 100644 --- a/www/src/pages/Login.svelte +++ b/www/src/pages/Login.svelte @@ -3,6 +3,7 @@ import NavBar from '../components/NavBar.svelte'; import { Form, Input, Button } from 'spaper'; import { login } from '../functions/user'; + import { currentUser } from '../store/user'; import { useNavigate } from 'svelte-navigator'; const user: LoginUserBody = { @@ -13,10 +14,11 @@ const navigate = useNavigate(); const loginHandler = async () => { - const result = await login(user); - if (result) { + try { + const res = await login(user); + currentUser.set(res); navigate('/'); - } + } catch (error) {} }; @@ -39,7 +41,7 @@ type="secondary" class="row sm-2 col-4" block - on:click={() => loginHandler()}>Sign inSign in diff --git a/www/src/pages/Profile.svelte b/www/src/pages/Profile.svelte index 0bfe38b..f75a8ac 100644 --- a/www/src/pages/Profile.svelte +++ b/www/src/pages/Profile.svelte @@ -8,12 +8,16 @@ const navigate = useNavigate(); const logoutHandler = async () => { - await logout(); - navigate('/'); + try { + await logout(); + } finally { + currentUser.set(null); + navigate('/'); + } }; - + {$currentUser?.uuid} {$currentUser?.username} {$currentUser?.role}