discord_auth.svelte 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <script lang="typescript">
  2. import Icon from "svelte-awesome/components/Icon.svelte";
  3. import { faSpinner } from "@fortawesome/free-solid-svg-icons";
  4. import { onMount, tick } from "svelte";
  5. import { Option } from "@shared/common/async_utils";
  6. import { goto } from "@sapper/app";
  7. const spinner = (faSpinner as unknown) as undefined;
  8. let error = "";
  9. let ok = true;
  10. onMount(async () => {
  11. const res = await fetch("/login/discord", {
  12. method: "post",
  13. credentials: "include",
  14. });
  15. const result = (await res.json()) as Option<unknown, { error: string }>;
  16. if (!result.ok) {
  17. ok = result.ok;
  18. error = result.error;
  19. } else {
  20. // Force auth to happen again
  21. window.open("/", "_self");
  22. }
  23. });
  24. </script>
  25. <svelte:head>
  26. <title>Logging in</title>
  27. </svelte:head>
  28. <div class="bg-gray-800 rounded-sm text-center px-20 py-5 shadow-lg">
  29. <h1 class="text-white text-4xl font-light">Logging in</h1>
  30. {#if ok}
  31. <div class="text-white">
  32. <Icon data={spinner} spin scale={1.5} />
  33. </div>
  34. {:else}
  35. <div class="text-red-600 max-w-md py-4">{error}</div>
  36. <a
  37. class="text-sm bg-blue-700 hover:bg-blue-800 p-2 text-white
  38. hover:text-gray-100 rounded-sm"
  39. href="/">Back to login</a>
  40. {/if}
  41. </div>