feat(acls): refactor & acl descriptions

This commit is contained in:
DecDuck
2025-02-07 17:26:23 +11:00
parent 090d2e6586
commit 0877638fc4
23 changed files with 291 additions and 253 deletions

View File

@ -1,5 +1,6 @@
import aclManager from "~/server/internal/acls";
import prisma from "~/server/internal/db/database";
import objectHandler from "~/server/internal/objects";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, [
@ -36,7 +37,7 @@ export default defineEventHandler(async (h3) => {
throw createError({ statusCode: 400, statusMessage: "Image not found" });
game.mImageLibrary.splice(imageIndex, 1);
await h3.context.objects.delete(imageId);
await objectHandler.delete(imageId);
if (game.mBannerId === imageId) {
game.mBannerId = game.mImageLibrary[0];

View File

@ -1,5 +1,6 @@
import aclManager from "~/server/internal/acls";
import libraryManager from "~/server/internal/library";
import metadataHandler from "~/server/internal/metadata";
import {
GameMetadataSearchResult,
GameMetadataSource,
@ -30,8 +31,8 @@ export default defineEventHandler(async (h3) => {
});
if (!metadata || !metadata.id || !metadata.sourceId) {
return await h3.context.metadataHandler.createGameWithoutMetadata(path);
return await metadataHandler.createGameWithoutMetadata(path);
} else {
return await h3.context.metadataHandler.createGame(metadata, path);
return await metadataHandler.createGame(metadata, path);
}
});

View File

@ -1,5 +1,5 @@
import aclManager from "~/server/internal/acls";
import libraryManager from "~/server/internal/library";
import metadataHandler from "~/server/internal/metadata";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, [
@ -12,7 +12,7 @@ export default defineEventHandler(async (h3) => {
if (!search)
throw createError({ statusCode: 400, statusMessage: "Invalid search" });
const results = await h3.context.metadataHandler.search(search);
const results = await metadataHandler.search(search);
if (results.length == 0)
throw createError({

View File

@ -0,0 +1,9 @@
import aclManager from "~/server/internal/acls";
import { userACLDescriptions } from "~/server/internal/acls/descriptions";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, []); // No ACLs only allows session authentication
if (!userId) throw createError({ statusCode: 403 });
return userACLDescriptions;
});

View File

@ -3,6 +3,7 @@ import prisma from "~/server/internal/db/database";
import { createHash } from "~/server/internal/security/simple";
import { v4 as uuidv4 } from "uuid";
import * as jdenticon from "jdenticon";
import objectHandler from "~/server/internal/objects";
// Only really a simple test, in case people mistype their emails
const mailRegex = /^\S+@\S+\.\S+$/;
@ -88,7 +89,7 @@ export default defineEventHandler(async (h3) => {
const userId = uuidv4();
const profilePictureId = uuidv4();
await h3.context.objects.createFromSource(
await objectHandler.createFromSource(
profilePictureId,
async () => jdenticon.toPng(username, 256),
{},

View File

@ -1,4 +1,5 @@
import clientHandler from "~/server/internal/clients/handler";
import { useCertificateAuthority } from "~/server/plugins/ca";
export default defineEventHandler(async (h3) => {
const body = await readBody(h3);
@ -27,14 +28,14 @@ export default defineEventHandler(async (h3) => {
statusMessage: "Invalid token",
});
const ca = h3.context.ca;
const bundle = await ca.generateClientCertificate(
const certificateAuthority = useCertificateAuthority();
const bundle = await certificateAuthority.generateClientCertificate(
clientId,
metadata.data.name
);
const client = await clientHandler.finialiseClient(clientId);
await ca.storeClientCertificate(clientId, bundle);
await certificateAuthority.storeClientCertificate(clientId, bundle);
return {
private: bundle.priv,

View File

@ -1,4 +1,5 @@
import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
import objectHandler from "~/server/internal/objects";
export default defineClientEventHandler(async (h3, utils) => {
const id = getRouterParam(h3, "id");
@ -6,7 +7,7 @@ export default defineClientEventHandler(async (h3, utils) => {
const user = await utils.fetchUser();
const object = await h3.context.objects.fetchWithPermissions(id, user.id);
const object = await objectHandler.fetchWithPermissions(id, user.id);
if (!object)
throw createError({ statusCode: 404, statusMessage: "Object not found" });

View File

@ -1,4 +1,5 @@
import aclManager from "~/server/internal/acls";
import objectHandler from "~/server/internal/objects";
export default defineEventHandler(async (h3) => {
const id = getRouterParam(h3, "id");
@ -6,6 +7,6 @@ export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["object:delete"]);
const result = await h3.context.objects.deleteWithPermission(id, userId);
const result = await objectHandler.deleteWithPermission(id, userId);
return { success: result };
});

View File

@ -1,4 +1,5 @@
import aclManager from "~/server/internal/acls";
import objectHandler from "~/server/internal/objects";
export default defineEventHandler(async (h3) => {
const id = getRouterParam(h3, "id");
@ -6,7 +7,7 @@ export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["object:read"]);
const object = await h3.context.objects.fetchWithPermissions(id, userId);
const object = await objectHandler.fetchWithPermissions(id, userId);
if (!object)
throw createError({ statusCode: 404, statusMessage: "Object not found" });

View File

@ -1,4 +1,5 @@
import aclManager from "~/server/internal/acls";
import objectHandler from "~/server/internal/objects";
export default defineEventHandler(async (h3) => {
const id = getRouterParam(h3, "id");
@ -14,7 +15,7 @@ export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, ["object:update"]);
const buffer = Buffer.from(body);
const result = await h3.context.objects.writeWithPermissions(
const result = await objectHandler.writeWithPermissions(
id,
async () => buffer,
userId