discord_auth.svelte 1.3 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(
  11. async () => {
  12. const res = await fetch("/login/discord", {
  13. method: "post"
  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. await goto("/");
  21. }
  22. }
  23. );
  24. </script>
  25. <div class="flex items-center justify-center bg-gray-900 h-screen w-screen">
  26. <div class="bg-gray-800 rounded-sm text-center px-20 py-5 shadow-lg">
  27. <h1 class="text-white text-4xl font-light">Logging in</h1>
  28. {#if ok}
  29. <div class="text-white"><Icon data={spinner} spin scale={1.5} /></div>
  30. {:else}
  31. <div class="text-red-600 max-w-md py-4">{error}</div>
  32. <a class="text-sm bg-blue-700 hover:bg-blue-800 p-2 text-white hover:text-gray-100 rounded-sm" href="/">Back to login</a>
  33. {/if}
  34. </div>
  35. </div>