discord_auth.svelte 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. });
  14. const result = (await res.json()) as Option<unknown, { error: string }>;
  15. if (!result.ok) {
  16. ok = result.ok;
  17. error = result.error;
  18. } else {
  19. // Force auth to happen again
  20. window.open("/", "_self");
  21. }
  22. });
  23. </script>
  24. <svelte:head>
  25. <title>Logging in</title>
  26. </svelte:head>
  27. <div class="bg-gray-800 rounded-sm text-center px-20 py-5 shadow-lg">
  28. <h1 class="text-white text-4xl font-light">Logging in</h1>
  29. {#if ok}
  30. <div class="text-white">
  31. <Icon data={spinner} spin scale={1.5} />
  32. </div>
  33. {:else}
  34. <div class="text-red-600 max-w-md py-4">{error}</div>
  35. <a
  36. class="text-sm bg-blue-700 hover:bg-blue-800 p-2 text-white
  37. hover:text-gray-100 rounded-sm"
  38. href="/">Back to login</a>
  39. {/if}
  40. </div>