diff --git a/src/lib/components/index.ts b/src/lib/components/index.ts index bd3ebd58e..96e13637b 100644 --- a/src/lib/components/index.ts +++ b/src/lib/components/index.ts @@ -27,3 +27,4 @@ export { default as Search } from './search.svelte'; export { default as GridItem1 } from './gridItem1.svelte'; export { default as Steps } from './steps.svelte'; export { default as Step } from './step.svelte'; +export { default as Secret } from './secret.svelte'; diff --git a/src/lib/components/secret.svelte b/src/lib/components/secret.svelte new file mode 100644 index 000000000..458005a93 --- /dev/null +++ b/src/lib/components/secret.svelte @@ -0,0 +1,28 @@ + + +
+ {#if show} + {value} + {:else} + •••••• + {/if} +
+ + + + +
+
diff --git a/src/routes/console/project-[project]/overview/keys/+page.svelte b/src/routes/console/project-[project]/overview/keys/+page.svelte index ebe4a4379..5f611048c 100644 --- a/src/routes/console/project-[project]/overview/keys/+page.svelte +++ b/src/routes/console/project-[project]/overview/keys/+page.svelte @@ -39,7 +39,7 @@ {key.name} - {toLocaleDateTime(key.$createdAt)} + {key.accessedAt ? toLocaleDateTime(key.accessedAt) : 'never'} {toLocaleDateTime(key.$updatedAt)} diff --git a/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte b/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte index a168fd26f..e84332823 100644 --- a/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte +++ b/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte @@ -2,16 +2,8 @@ import { afterNavigate } from '$app/navigation'; import { base } from '$app/paths'; import { page } from '$app/stores'; - import { CardGrid, Collapsible, CollapsibleItem } from '$lib/components'; - import { scopes } from '$lib/constants'; - import { - Button, - Form, - FormList, - InputChoice, - InputPassword, - InputText - } from '$lib/elements/forms'; + import { CardGrid, Secret } from '$lib/components'; + import { Button, Form, FormList, InputText } from '$lib/elements/forms'; import InputDateTime from '$lib/elements/forms/inputDateTime.svelte'; import { difference } from '$lib/helpers/array'; import { toLocaleDateTime } from '$lib/helpers/date'; @@ -21,39 +13,30 @@ import { sdkForConsole } from '$lib/stores/sdk'; import { onMount } from 'svelte'; import { project } from '../../../store'; + import Scopes from '../scopes.svelte'; import Delete from './delete.svelte'; import { key } from './store'; const projectId = $page.params.project; const keyId = $page.params.key; - const activeScopes = scopes.reduce((prev, next) => { - prev[next.scope] = false; - - return prev; - }, {}); let loaded = false; let showDelete = false; let name: string = null; let secret: string = null; let expire: string = null; + let scopes: string[] = null; onMount(handle); afterNavigate(handle); async function handle(event = null) { - const promise = key.load(projectId, keyId); - if ($key?.$id !== keyId) { - await promise; - } + await key.load(projectId, keyId); name ??= $key.name; secret ??= $key.secret; expire ??= $key.expire; - unselectAll(); - $key.scopes.forEach((scope) => { - activeScopes[scope] = true; - }); + scopes ??= $key.scopes; updateLayout({ navigate: event, @@ -120,13 +103,8 @@ async function updateScopes() { try { - await sdkForConsole.projects.updateKey( - $project.$id, - $key.$id, - $key.name, - selectedScoped - ); - $key.scopes = selectedScoped; + await sdkForConsole.projects.updateKey($project.$id, $key.$id, $key.name, scopes); + $key.scopes = scopes; addNotification({ type: 'success', message: 'API Key scopes has been updated' @@ -138,22 +116,6 @@ }); } } - - function selectAll() { - for (const scope in activeScopes) { - activeScopes[scope] = true; - } - } - - function unselectAll() { - for (const scope in activeScopes) { - activeScopes[scope] = false; - } - } - - $: selectedScoped = scopes - .filter((scope) => activeScopes[scope.scope]) - .map(({ scope }) => scope); @@ -162,13 +124,14 @@ {#if loaded} + {@const accessedAt = $key.accessedAt ? toLocaleDateTime($key.accessedAt) : 'never'}
{$key.name}

- Last accessed: {toLocaleDateTime($key.accessedAt)}
+ Last accessed: {accessedAt}
Scopes granted: {$key.scopes.length}

@@ -178,18 +141,9 @@
API Key Secret
- + - - - -
@@ -220,35 +174,15 @@ practice to allow only the permissions you need to meet your project goals.

-
- - -
- - {#each ['Authentication', 'Database', 'Functions', 'Storage', 'Other'] as category} - - {category} - - {#each scopes.filter((s) => s.category === category) as scope} - - {scope.description} - - {/each} - - - {/each} - +
@@ -278,7 +212,7 @@
{$key.name}
-

Last accessed: {toLocaleDateTime($key.accessedAt)}

+

Last accessed: {accessedAt}

diff --git a/src/routes/console/project-[project]/overview/keys/create.svelte b/src/routes/console/project-[project]/overview/keys/create.svelte index 80765d20c..043cae7cb 100644 --- a/src/routes/console/project-[project]/overview/keys/create.svelte +++ b/src/routes/console/project-[project]/overview/keys/create.svelte @@ -1,32 +1,21 @@ - + Create API Key - {#each scopes as scope} - - {/each} + diff --git a/src/routes/console/project-[project]/overview/keys/scopes.svelte b/src/routes/console/project-[project]/overview/keys/scopes.svelte new file mode 100644 index 000000000..d60f14730 --- /dev/null +++ b/src/routes/console/project-[project]/overview/keys/scopes.svelte @@ -0,0 +1,72 @@ + + +
+ + +
+ + {#each ['Authentication', 'Database', 'Functions', 'Storage', 'Other'] as category} + + {category} + + {#each allScopes.filter((s) => s.category === category) as scope} + + {scope.description} + + {/each} + + + {/each} +