From 6a2ba41b6195ce69c37b81e7abbfdedcf45017d7 Mon Sep 17 00:00:00 2001 From: Jana Vlachova Date: Wed, 2 Oct 2024 18:36:03 +0200 Subject: [PATCH 01/11] studio - login --- .vscode/terminals.json | 21 +++++++ agdb_api/typescript/src/client.ts | 10 +-- agdb_api/typescript/tests/api.test.ts | 2 +- agdb_studio/package-lock.json | 49 +++++++++++++++ agdb_studio/package.json | 2 + agdb_studio/src/components/auth/LoginForm.vue | 26 +++++++- agdb_studio/src/router/index.ts | 36 +++-------- agdb_studio/src/router/routes.ts | 27 ++++++++ agdb_studio/src/services/api.service.ts | 62 ------------------- agdb_studio/src/services/auth.service.ts | 37 +++++++++++ 10 files changed, 174 insertions(+), 98 deletions(-) create mode 100644 agdb_studio/src/router/routes.ts delete mode 100644 agdb_studio/src/services/api.service.ts create mode 100644 agdb_studio/src/services/auth.service.ts diff --git a/.vscode/terminals.json b/.vscode/terminals.json index bd0da09a8..dfec5988f 100644 --- a/.vscode/terminals.json +++ b/.vscode/terminals.json @@ -22,6 +22,27 @@ "open": true, "focus": false, "commands": ["cd agdb_web"] + }, + { + "name": "studio SERVER", + "description": "For running web studio server", + "open": true, + "focus": false, + "commands": ["cd agdb_studio", "npm run dev"] + }, + { + "name": "studio SCRIPTS", + "description": "For running studio scripts", + "open": true, + "focus": false, + "commands": ["cd agdb_studio"] + }, + { + "name": "api SCRIPTS", + "description": "For running api/typescript scripts", + "open": true, + "focus": false, + "commands": ["cd agdb_api/typescript"] } ] } diff --git a/agdb_api/typescript/src/client.ts b/agdb_api/typescript/src/client.ts index 10095aad4..1096e7f1a 100644 --- a/agdb_api/typescript/src/client.ts +++ b/agdb_api/typescript/src/client.ts @@ -2,10 +2,10 @@ import { OpenAPIClientAxios } from "openapi-client-axios"; import type { Client } from "./openapi"; type AgdbApi = { - token: string; + token: string | undefined; login: (username: string, password: string) => Promise; // eslint-disable-line no-unused-vars logout: () => Promise; - get_token: () => string; + get_token: () => string | undefined; set_token: (token: string) => void; // eslint-disable-line no-unused-vars }; @@ -19,19 +19,19 @@ async function login(username: string, password: string): Promise { return token.data; } -function get_token(): string { +function get_token(): string | undefined { return this.token; } async function logout(): Promise { await this.user_logout(); - this.token = ""; + this.token = undefined; this.interceptors.request.use((config) => { return config; }); } -function set_token(token: string) { +function set_token(token: string): void { this.token = token; this.interceptors.request.use((config) => { config.headers.Authorization = `Bearer ${token}`; diff --git a/agdb_api/typescript/tests/api.test.ts b/agdb_api/typescript/tests/api.test.ts index 18c2b965b..08ddedf64 100644 --- a/agdb_api/typescript/tests/api.test.ts +++ b/agdb_api/typescript/tests/api.test.ts @@ -19,7 +19,7 @@ describe("openapi test", () => { let client = await AgdbApi.client("http://localhost:3000"); await client.login("admin", "admin"); await client.logout(); - expect(client.get_token()).toEqual(""); + expect(client.get_token()).toEqual(undefined); await expect(client.db_list()).rejects.toThrowError( "Request failed with status code 401", diff --git a/agdb_studio/package-lock.json b/agdb_studio/package-lock.json index 76e345d26..61c815f90 100644 --- a/agdb_studio/package-lock.json +++ b/agdb_studio/package-lock.json @@ -8,6 +8,8 @@ "name": "agdb_studio", "version": "0.0.0", "dependencies": { + "@kalimahapps/vue-icons": "^1.7.1", + "agdb_api": "file:../agdb_api/typescript", "openapi-client-axios": "^7.5.1", "pinia": "^2.1.7", "vue": "^3.3.4", @@ -38,6 +40,30 @@ "vue-tsc": "^2.0.28" } }, + "../../agdb_api/typescript": { + "extraneous": true + }, + "../agdb_api/typescript": { + "name": "@agnesoft/agdb_api", + "version": "0.9.0", + "license": "Apache-2.0", + "dependencies": { + "openapi-client-axios": "^7.5.5" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.10.3", + "@types/node": "^20.14.10", + "@typescript-eslint/parser": "^7.16.0", + "@vitest/coverage-v8": "^2.0.2", + "copyfiles": "^2.4.1", + "eslint": "^8.56.0", + "openapicmd": "^2.4.0", + "prettier": "^3.3.3", + "typescript": "^5.5.3", + "vite": "^5.3.3", + "vitest": "^2.0.2" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -752,6 +778,20 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@kalimahapps/vue-icons": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@kalimahapps/vue-icons/-/vue-icons-1.7.1.tgz", + "integrity": "sha512-PXMiVTPOZ0LTU8DuIIcuOc1FyC9I9e2SMz9XUzByZZEPN8ruDCdNw2fyVCH8rcNpVSrlMlfqDT7di7tPZgH8XA==", + "dependencies": { + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14.16" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1713,6 +1753,10 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agdb_api": { + "resolved": "../agdb_api/typescript", + "link": true + }, "node_modules/agent-base": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", @@ -4714,6 +4758,11 @@ "node": ">=8" } }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", diff --git a/agdb_studio/package.json b/agdb_studio/package.json index 748bbf4bb..2be895d5b 100644 --- a/agdb_studio/package.json +++ b/agdb_studio/package.json @@ -16,6 +16,8 @@ "before-commit": "npm run format && npm run lint && npm run test:unit && npm run test:e2e" }, "dependencies": { + "@kalimahapps/vue-icons": "^1.7.1", + "agdb_api": "file:../agdb_api/typescript", "openapi-client-axios": "^7.5.1", "pinia": "^2.1.7", "vue": "^3.3.4", diff --git a/agdb_studio/src/components/auth/LoginForm.vue b/agdb_studio/src/components/auth/LoginForm.vue index 18ac6bf93..2c0aee2ab 100644 --- a/agdb_studio/src/components/auth/LoginForm.vue +++ b/agdb_studio/src/components/auth/LoginForm.vue @@ -1,17 +1,34 @@