aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-08-01 22:56:41 -0700
committerAdam Soltys <[email protected]>2022-08-01 22:56:41 -0700
commit63a4af3686b7a81874a87259f6ec5dd44aa97e48 (patch)
tree78f9104ff3b97f99c3e9aaa95fbf63acc064d556
parentb83994d6fb38981607c2cd4d460173457377a9ba (diff)
downloadcoinos-ui-63a4af3686b7a81874a87259f6ec5dd44aa97e48.tar.gz
coinos-ui-63a4af3686b7a81874a87259f6ec5dd44aa97e48.zip
404 on invalid user
-rw-r--r--src/hooks/index.js9
-rw-r--r--src/lib/utils.js8
-rw-r--r--src/routes/[username]/index.svelte1
-rw-r--r--src/routes/__error.svelte42
4 files changed, 45 insertions, 15 deletions
diff --git a/src/hooks/index.js b/src/hooks/index.js
index 6a9c8ec5..2284d88d 100644
--- a/src/hooks/index.js
+++ b/src/hooks/index.js
@@ -1,6 +1,10 @@
import cookie from 'cookie';
+import { get } from '$lib/utils';
+import { protectedRoutes } from '$lib/utils';
+
export async function handle({ event, resolve }) {
let {
+ params,
request: { headers }
} = event;
@@ -8,6 +12,11 @@ export async function handle({ event, resolve }) {
let { token } = cookies;
event.locals = { token };
+ if (protectedRoutes.find((p) => event.url.pathname.match(p))) {
+ let user = await get('/me', { accept: 'application/json', authorization: `Bearer ${token}` });
+ if (user.username !== params.username) throw new Error('user not found');
+ }
+
return resolve(event);
}
diff --git a/src/lib/utils.js b/src/lib/utils.js
index b80a548b..db8a490a 100644
--- a/src/lib/utils.js
+++ b/src/lib/utils.js
@@ -6,10 +6,8 @@ export function scroll(section) {
const base = browser ? '' : import.meta.env.VITE_COINOS_URL;
-export const get = (url) =>
- fetch(base + url, {
- headers: { accept: 'application/json' }
- })
+export const get = (url, headers = { accept: 'application/json' }) =>
+ fetch(base + url, { headers })
.then((r) => r.text())
.then((body) => {
try {
@@ -38,3 +36,5 @@ export function reverseFormat(val, locale) {
reversedVal = reversedVal.replace(new RegExp('\\' + decimal, 'g'), '.');
return Number.isNaN(reversedVal) ? 0 : +reversedVal;
}
+
+export let protectedRoutes = [/receive/, /customers/, /dashboard/, /settings/, /transactions/];
diff --git a/src/routes/[username]/index.svelte b/src/routes/[username]/index.svelte
index 6e3978ad..6002efdc 100644
--- a/src/routes/[username]/index.svelte
+++ b/src/routes/[username]/index.svelte
@@ -47,7 +47,6 @@
};
</script>
-<!-- need to update this IF statement to only show if the username matches a user in the DB -->
{#if username}
<AppHeader avatarPosition="left-[calc(15vw-48px)]" />
diff --git a/src/routes/__error.svelte b/src/routes/__error.svelte
index 6cdeeac7..2d617f9d 100644
--- a/src/routes/__error.svelte
+++ b/src/routes/__error.svelte
@@ -1,16 +1,38 @@
+<script context="module">
+ export function load({ error, status }) {
+ if (error.message.includes('not found')) {
+ error.message = 'Page not found';
+ status = 404;
+ }
+
+ return {
+ props: {
+ error,
+ status
+ }
+ };
+ }
+</script>
+
<script>
- import { Icon } from '$comp';
+ import { Icon, PageNotFound } from '$comp';
+ export let status, error;
</script>
-<div class="flex justify-center items-center mt-20">
- <div class="space-y-5 text-center">
- <a href="/">
- <Icon icon="logo" />
- </a>
+{#if status === 404}
+ <PageNotFound />
+{:else}
+ <div class="flex justify-center items-center mt-20">
+ <div class="space-y-5 text-center">
+ <a href="/">
+ <Icon icon="logo" />
+ </a>
- <Icon icon="error" style="mx-auto w-full" />
+ <Icon icon="error" style="mx-auto w-full" />
- <h1 class="font-bold text-5xl">Error</h1>
- <p>Please try again or contact support.</p>
+ <h1 class="font-bold text-5xl">Error</h1>
+ <p>{error.message}</p>
+ <p>Please try again or contact support.</p>
+ </div>
</div>
-</div>
+{/if}