|
@@ -1,27 +1,55 @@
|
|
|
<script>
|
|
<script>
|
|
|
- import { onMount } from 'svelte';
|
|
|
|
|
- import { goto } from '$app/navigation';
|
|
|
|
|
- import { browser } from '$app/environment';
|
|
|
|
|
- import { writable } from 'svelte/store';
|
|
|
|
|
|
|
+ import { onMount, onDestroy } from 'svelte';
|
|
|
|
|
+ import { goto } from '$app/navigation';
|
|
|
|
|
+ import { browser } from '$app/environment';
|
|
|
|
|
+ import { writable } from 'svelte/store';
|
|
|
|
|
|
|
|
- const authorized = writable(false);
|
|
|
|
|
|
|
+ const authorized = writable(false);
|
|
|
|
|
|
|
|
//TODO: When will has a token validation we need to validate the token here
|
|
//TODO: When will has a token validation we need to validate the token here
|
|
|
- //tenho que verificar se realmente vai ser feito essa validacao a cada minuto
|
|
|
|
|
- let flag = 'approved';
|
|
|
|
|
|
|
+ //tenho que verificar se realmente vai ser feito essa validacao a cada minuto
|
|
|
|
|
+ const apiUrl = import.meta.env.VITE_API_URL;
|
|
|
|
|
+ let intervalId = null;
|
|
|
|
|
|
|
|
- onMount(async () => {
|
|
|
|
|
- if (flag !== 'approved') {
|
|
|
|
|
- goto('/');
|
|
|
|
|
- } else {
|
|
|
|
|
- authorized.set(true);
|
|
|
|
|
- }
|
|
|
|
|
- setInterval(() => {
|
|
|
|
|
- console.log('passou pelo dashboard guard');
|
|
|
|
|
- }, 100000);
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ async function validate() {
|
|
|
|
|
+ if (!browser) return;
|
|
|
|
|
+ const m1 = document.cookie.match(/(?:^|; )auth_token=([^;]+)/);
|
|
|
|
|
+ const m2 = document.cookie.match(/(?:^|; )company_id=([^;]+)/);
|
|
|
|
|
+ const token = m1 ? decodeURIComponent(m1[1]) : null;
|
|
|
|
|
+ const v = m2 ? decodeURIComponent(m2[1]) : null;
|
|
|
|
|
+ const companyId = v && /^-?\d+$/.test(v) ? Number(v) : v;
|
|
|
|
|
+ if (!token || companyId == null) {
|
|
|
|
|
+ authorized.set(false);
|
|
|
|
|
+ goto('/');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await fetch(`${apiUrl}/auth/validate-token`, {
|
|
|
|
|
+ method: 'POST',
|
|
|
|
|
+ headers: {
|
|
|
|
|
+ 'content-type': 'application/json',
|
|
|
|
|
+ 'Authorization': `Bearer ${token}`
|
|
|
|
|
+ },
|
|
|
|
|
+ body: JSON.stringify({ token, companyId })
|
|
|
|
|
+ });
|
|
|
|
|
+ if (!res.ok) throw new Error('invalid');
|
|
|
|
|
+ authorized.set(true);
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ authorized.set(false);
|
|
|
|
|
+ goto('/');
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ onMount(() => {
|
|
|
|
|
+ validate();
|
|
|
|
|
+ intervalId = setInterval(validate, 60000);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ onDestroy(() => {
|
|
|
|
|
+ if (intervalId) clearInterval(intervalId);
|
|
|
|
|
+ });
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
{#if $authorized}
|
|
{#if $authorized}
|
|
|
- <slot />
|
|
|
|
|
|
|
+ <slot />
|
|
|
{/if}
|
|
{/if}
|