From ce86d103039b22695b04714ee85e9ef3e1e032b5 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Sun, 23 Jan 2022 11:41:42 +0100 Subject: feat(auth): Implements first draft of basic auth gen/validation --- .../carbon-extras/NativeDateInput.svelte | 21 +++ src/webapp/src/lib/api/account.ts | 26 ++++ src/webapp/src/lib/configuration.ts | 6 +- src/webapp/src/lib/models/IAccessToken.ts | 9 ++ src/webapp/src/lib/models/ICreateTokenRequest.ts | 7 + src/webapp/src/routes/app/_header.svelte | 11 +- .../routes/app/modals/access-tokens-modal.svelte | 148 +++++++++++++++++++++ .../app/modals/new-access-token-modal.svelte | 131 ++++++++++++++++++ 8 files changed, 356 insertions(+), 3 deletions(-) create mode 100644 src/webapp/src/components/carbon-extras/NativeDateInput.svelte create mode 100644 src/webapp/src/lib/models/IAccessToken.ts create mode 100644 src/webapp/src/lib/models/ICreateTokenRequest.ts create mode 100644 src/webapp/src/routes/app/modals/new-access-token-modal.svelte (limited to 'src/webapp') diff --git a/src/webapp/src/components/carbon-extras/NativeDateInput.svelte b/src/webapp/src/components/carbon-extras/NativeDateInput.svelte new file mode 100644 index 0000000..ccdec53 --- /dev/null +++ b/src/webapp/src/components/carbon-extras/NativeDateInput.svelte @@ -0,0 +1,21 @@ + + +
+ +
+ +
+
diff --git a/src/webapp/src/lib/api/account.ts b/src/webapp/src/lib/api/account.ts index f1c1708..eaf7592 100644 --- a/src/webapp/src/lib/api/account.ts +++ b/src/webapp/src/lib/api/account.ts @@ -1,5 +1,6 @@ import {api_base} from "@/lib/configuration"; import type {ICreateSessionRequest} from "@/lib/models/ICreateSessionRequest"; +import type {ICreateTokenRequest} from "@/lib/models/ICreateTokenRequest"; export async function create_session_async(request: ICreateSessionRequest): Promise { return fetch(api_base("account/create-session"), { @@ -25,3 +26,28 @@ export async function end_session_async(): Promise { credentials: "include" }); } + +export async function get_tokens_async(): Promise { + return fetch(api_base("account/tokens"), { + method: "get", + credentials: "include" + }); +} + +export async function create_token_async(request: ICreateTokenRequest): Promise { + return fetch(api_base("account/create-token"), { + method: "post", + credentials: "include", + body: JSON.stringify(request), + headers: { + "Content-Type": "application/json;charset=UTF-8" + } + }); +} + +export async function delete_token_async(token_id: string): Promise { + return fetch(api_base("account/delete-token?id=" + token_id), { + method: "delete", + credentials: "include" + }); +} diff --git a/src/webapp/src/lib/configuration.ts b/src/webapp/src/lib/configuration.ts index e7dbcfe..2b9c2af 100644 --- a/src/webapp/src/lib/configuration.ts +++ b/src/webapp/src/lib/configuration.ts @@ -1,7 +1,9 @@ -const api_version = "v1/"; +export const api_version = "v1"; +export const api_docs = "http://localhost:5003/swagger/index.html"; +export const api_url = "http://localhost:5003"; export function api_base(path) { - return is_development() ? "http://localhost:5003/" + api_version + path : "/" + api_version + path; + return `${api_url}/${api_version}/${path}`; } export function is_development() { diff --git a/src/webapp/src/lib/models/IAccessToken.ts b/src/webapp/src/lib/models/IAccessToken.ts new file mode 100644 index 0000000..218f888 --- /dev/null +++ b/src/webapp/src/lib/models/IAccessToken.ts @@ -0,0 +1,9 @@ +export interface IAccessToken { + id: string, + created: Date, + expiry_date: Date, + allow_read: boolean; + allow_create: boolean; + allow_update: boolean; + allow_delete: boolean; +} diff --git a/src/webapp/src/lib/models/ICreateTokenRequest.ts b/src/webapp/src/lib/models/ICreateTokenRequest.ts new file mode 100644 index 0000000..6e3c7a5 --- /dev/null +++ b/src/webapp/src/lib/models/ICreateTokenRequest.ts @@ -0,0 +1,7 @@ +export interface ICreateTokenRequest { + allow_read: boolean; + allow_create: boolean; + allow_update: boolean; + allow_delete: boolean; + expiry_date: Date; +} diff --git a/src/webapp/src/routes/app/_header.svelte b/src/webapp/src/routes/app/_header.svelte index 4b2ddb7..04eb405 100644 --- a/src/webapp/src/routes/app/_header.svelte +++ b/src/webapp/src/routes/app/_header.svelte @@ -12,11 +12,13 @@ import Help16 from "carbon-icons-svelte/lib/Help16"; import {end_session_async} from "@/lib/api/account"; import {clear_entries} from "@/lib/stores/entries"; + import AccessTokensModal from "./modals/access-tokens-modal.svelte"; let profile_dropdown_is_open = false; let options_dropdown_is_open = false; let enable_dark_theme = get(preferences).theme === ApplicationTheme.DARK; let enable_site_report = get(preferences).enable_site_report; + let access_token_modal_is_open = false; preferences.subscribe(e => { enable_site_report = e.enable_site_report; @@ -43,7 +45,11 @@ } function manage_access_tokens() { - alert("Not implemented"); + access_token_modal_is_open = true; + } + + function on_access_tokens_modal_close() { + access_token_modal_is_open = false; } function toggle_site_report() { @@ -62,6 +68,9 @@ } + +
diff --git a/src/webapp/src/routes/app/modals/access-tokens-modal.svelte b/src/webapp/src/routes/app/modals/access-tokens-modal.svelte index e69de29..af4b524 100644 --- a/src/webapp/src/routes/app/modals/access-tokens-modal.svelte +++ b/src/webapp/src/routes/app/modals/access-tokens-modal.svelte @@ -0,0 +1,148 @@ + + + + + + + + + API documentation + + + + Delete all tokens + + + + + + + {#if cell.key === "overflow"} + + + + {:else} + {cell.value} + {/if} + + + + + + +
+
+ + diff --git a/src/webapp/src/routes/app/modals/new-access-token-modal.svelte b/src/webapp/src/routes/app/modals/new-access-token-modal.svelte new file mode 100644 index 0000000..8999b0b --- /dev/null +++ b/src/webapp/src/routes/app/modals/new-access-token-modal.svelte @@ -0,0 +1,131 @@ + + + open = false} + bind:open={open} + on:submit={form.submit}> +
+ + + + + + + + + +
+
-- cgit v1.3