discord_auth.svelte 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  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. await goto("/");
  20. }
  21. });
  22. </script>
  23. <div class="bg-gray-800 rounded-sm text-center px-20 py-5 shadow-lg">
  24. <h1 class="text-white text-4xl font-light">Logging in</h1>
  25. {#if ok}
  26. <div class="text-white">
  27. <Icon data={spinner} spin scale={1.5} />
  28. </div>
  29. {:else}
  30. <div class="text-red-600 max-w-md py-4">{error}</div>
  31. <a
  32. class="text-sm bg-blue-700 hover:bg-blue-800 p-2 text-white
  33. hover:text-gray-100 rounded-sm"
  34. href="/">Back to login</a>
  35. {/if}
  36. </div>