aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/login/callback/ok/+page.svelte
blob: 75fb10c530e79ae3db4e0995a0ec9f805e6e2407 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<script lang="ts">
  import { page } from '$app/state';
  import { onDestroy, onMount } from 'svelte';

  let _target = $derived(page.url.searchParams.get('next') || '/');
  let target = $derived(
    new URL(_target, page.url.href).host !== page.url.host ? '/' : _target
  );
  let loopDetected = $state(false);
  let mounted = $state(false);
  onMount(() => {
    try {
      if (
        Number(
          sessionStorage.getItem('lastLoginRedirect') ?? Date.now().toString()
        ) +
          1000 >
        Date.now() - 2500
      ) {
        if (sessionStorage.getItem('loopCheck')) {
          loopDetected = true;
        }
        setTimeout(() => sessionStorage.setItem('loopCheck', '1'), 100);
      } else {
        sessionStorage.removeItem('loopCheck');
      }
      sessionStorage.setItem('lastLoginRedirect', Date.now().toString());
    } catch (error) {
      console.warn('Loop Detect Error:', error);
    }
    mounted = true;
  });
  onDestroy(() => (mounted = false));
</script>

<svelte:head>
  {#if !loopDetected}
    <noscript>
      <meta http-equiv="refresh" content="0.1; url={target}" />
    </noscript>
  {/if}
  {#if mounted && !loopDetected}
    <meta http-equiv="refresh" content="0.1; url={target}" />
  {/if}
</svelte:head>

{#if loopDetected}
  <h2 class="text-xl">Loop Detected</h2>
  <p>
    We detected a possible redirect loop and as such did not automatically
    continue.
  </p>
  <p>
    To continue anyway, click <a
      href={target}
      onclick={() => {
        loopDetected = false;
        sessionStorage.setItem('lastLoginRedirect', Date.now().toString());
        sessionStorage.removeItem('loopCheck');
      }}>here</a
    >.
  </p>
{:else}
  <h2 class="text-xl">Redirecting...</h2>
  <p>If nothing happens, click <a href={target}>here</a>.</p>
{/if}