Auth.svelte 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <script lang="ts">
  2. import {
  3. state as _state,
  4. createAuth,
  5. deleteAuth,
  6. renameAuth,
  7. updateAuthParams,
  8. } from "$lib/state.svelte";
  9. import { Button } from "$lib/components/ui/button";
  10. import { Trash, Plus } from "@lucide/svelte";
  11. import { Input } from "./ui/input";
  12. import Editable from "./Editable.svelte";
  13. import AuthParams from "./AuthParams.svelte";
  14. </script>
  15. <div class="space-y-6">
  16. <div>
  17. <h1 class="p-2 text-lg">Authentication</h1>
  18. <p class="p-2 text-sm">
  19. Create workspace-wide authentication schemes. Use the schemes created here
  20. in request/collection tabs.
  21. </p>
  22. </div>
  23. <!-- Create auth -->
  24. <div class="space-y-2">
  25. <div class="flex gap-2">
  26. <Button variant="outline" onclick={() => createAuth("Token")}>
  27. <Plus class="h-4 w-4 mr-2" /> Token
  28. </Button>
  29. <Button variant="outline" onclick={() => createAuth("Basic")}>
  30. <Plus class="h-4 w-4 mr-2" /> Basic
  31. </Button>
  32. <Button variant="outline" onclick={() => createAuth("OAuth")}>
  33. <Plus class="h-4 w-4 mr-2" /> OAuth
  34. </Button>
  35. </div>
  36. </div>
  37. {#each _state.auth as auth}
  38. <div class="p-2 border rounded-xl">
  39. <div class="mx-2 flex items-center border-b space-y-2">
  40. <div class="w-full">
  41. <Editable
  42. bind:value={auth.name}
  43. onSave={(value) => {
  44. renameAuth(auth.id, value);
  45. }}
  46. >
  47. {#snippet display({ value, startEdit })}
  48. <h2 ondblclick={startEdit}>
  49. {auth.name}
  50. </h2>
  51. {/snippet}
  52. </Editable>
  53. </div>
  54. <Trash
  55. class="mb-2 h-4 w-4 cursor-pointer text-muted-foreground hover:text-destructive"
  56. size={16}
  57. onclick={() => deleteAuth(auth.id)}
  58. />
  59. </div>
  60. <div class="p-2">
  61. <AuthParams bind:auth readonly={false} />
  62. </div>
  63. </div>
  64. {/each}
  65. </div>