From 435551c2071bee9eaa2b0bf4b542b97194a81f06 Mon Sep 17 00:00:00 2001 From: DecDuck Date: Wed, 9 Oct 2024 14:43:06 +1100 Subject: [PATCH] object storage + full permission system + testing Object storage now works fully, with the permission system. It still needs additional external endpoints for updating and deleting objects from the API, but it is otherwise complete. Further tasks include writing an S3 adapter. --- .env.example | 5 +- composables/user.ts | 2 +- middleware/require-user.global.ts | 2 +- package.json | 3 + pages/register.vue | 2 +- pages/signin.vue | 2 +- .../migration.sql | 12 ++ prisma/schema.prisma | 5 +- server/api/v1/auth/signup/simple.post.ts | 72 ++++++++---- server/api/v1/client/auth/handshake.post.ts | 3 +- server/api/v1/object/[id]/index.get.ts | 13 +++ server/api/v1/user/index.get.ts | 4 + server/api/v1/whoami.get.ts | 4 - server/h3.d.ts | 12 +- server/internal/clients/event-handler.ts | 3 +- server/internal/objects/fsBackend.ts | 100 ++++++++++++++++ server/internal/objects/index.ts | 66 +++++++++-- server/plugins/ca.ts | 9 ++ server/plugins/objects.ts | 11 ++ yarn.lock | 109 ++++++++++++++++-- 20 files changed, 376 insertions(+), 63 deletions(-) create mode 100644 prisma/migrations/20241009032354_add_account_details/migration.sql create mode 100644 server/api/v1/object/[id]/index.get.ts create mode 100644 server/api/v1/user/index.get.ts delete mode 100644 server/api/v1/whoami.get.ts create mode 100644 server/internal/objects/fsBackend.ts create mode 100644 server/plugins/objects.ts diff --git a/.env.example b/.env.example index e63ad16f..bae34f6a 100644 --- a/.env.example +++ b/.env.example @@ -2,4 +2,7 @@ DATABASE_URL="postgres://drop:drop@127.0.0.1:5432/drop" CLIENT_CERTIFICATES="./.data/ca" -GIANT_BOMB_API_KEY=""data \ No newline at end of file +FS_BACKEND_PATH="./.data/objects" + +GIANT_BOMB_API_KEY="" + diff --git a/composables/user.ts b/composables/user.ts index cbe55810..a86cb670 100644 --- a/composables/user.ts +++ b/composables/user.ts @@ -12,5 +12,5 @@ export const updateUser = async () => { if (user.value === null) return; // SSR calls have to be after uses - user.value = await $fetch("/api/v1/whoami", { headers }); + user.value = await $fetch("/api/v1/user", { headers }); }; diff --git a/middleware/require-user.global.ts b/middleware/require-user.global.ts index 82732793..37395109 100644 --- a/middleware/require-user.global.ts +++ b/middleware/require-user.global.ts @@ -1,4 +1,4 @@ -const whitelistedPrefixes = ["/signin", "/register"]; +const whitelistedPrefixes = ["/signin", "/register", "/api"]; export default defineNuxtRouteMiddleware(async (to, from) => { if (import.meta.server) return; diff --git a/package.json b/package.json index e12a51d0..d1917d83 100644 --- a/package.json +++ b/package.json @@ -16,10 +16,13 @@ "@prisma/client": "5.20.0", "axios": "^1.7.7", "bcrypt": "^5.1.1", + "file-type-mime": "^0.4.3", "moment": "^2.30.1", "nuxt": "^3.13.0", "prisma": "^5.20.0", + "sanitize-filename": "^1.6.3", "stream": "^0.0.3", + "stream-mime-type": "^2.0.0", "turndown": "^7.2.0", "uuid": "^10.0.0", "vue": "latest", diff --git a/pages/register.vue b/pages/register.vue index 210fbc34..93a21858 100644 --- a/pages/register.vue +++ b/pages/register.vue @@ -1,7 +1,7 @@