revised backend service getObjects

This commit is contained in:
2025-06-19 10:31:31 +02:00
parent 28e93fe943
commit a2ac88af50
3 changed files with 95 additions and 58 deletions

View File

@@ -1,17 +1,73 @@
import { fail, redirect } from '@sveltejs/kit';
import { fail } from '@sveltejs/kit';
import { BUCKET, client, TOKENFILENAME } from '$lib/minio';
import { checkIfExactDirectoryExists } from './s3ClientService';
export const getVorgangByCaseId = async (caseId: string, token: string) => {
const isValidCase = await checkIfVorgangExists(caseId);
const isValidToken = await hasValidToken(caseId, token);
// const prefix = params.vorgang ? `${params.vorgang}/` : '';
// const stream = client.listObjectsV2(BUCKET, caseId, false, '');
// let files: any[] = [];
return new Promise((resolve, reject) => {
const stream = client.listObjectsV2(BUCKET, caseId, false, '');
const result = [];
stream.on('data', (item) => {
result.push(item);
});
stream.on('end', () => {
resolve(result);
});
stream.on('error', (err) => {
reject(err);
});
});
// const readableStream = new ReadableStream({
// start(controller) {
// stream.on('data', (data) => {
// if (caseId === '') {
// if (data.prefix)
// controller.enqueue(`${JSON.stringify({ ...data, name: data.prefix.slice(0, -1) })}\n`);
// return;
// }
// const name = data?.name?.slice(caseId.length);
// if (name === 'config.json') return;
// // zugangscode datei
// if (name === '__perm__') return;
// controller.enqueue(`${JSON.stringify({ ...data, name, caseId })}\n`);
// });
// stream.on('end', () => {
// controller.close();
// });
// },
// cancel() {
// stream.destroy();
// }
// });
// return files;
// return new Response(result, {
// headers: {
// 'content-type': 'text/event-stream'
// }
// });
};
/**
* Checks if Vorgang exists and token is valid.
* @param request
* @returns redirect to /list/caseId or error
*/
export const redirectIfVorgangExists = async (request: Request) => {
const data = await request.formData();
const caseId = data.get('case-id');
const caseToken = data.get('case-token');
const checkIfVorgangExists = async (caseId) => {
if (!caseId) {
return fail(400, {
success: false,
@@ -28,55 +84,22 @@ export const redirectIfVorgangExists = async (request: Request) => {
});
}
const isTokenValid = await hasValidToken(caseId, caseToken);
return true;
if (!isTokenValid) {
return fail(400, {
success: false,
caseId,
error: { message: 'Der Token ist ungültig.' }
});
}
// const isTokenValid = await hasValidToken(caseId, caseToken);
redirect(303, `/list/${caseId}?token=${caseToken}`);
// if (!isTokenValid) {
// return fail(400, {
// success: false,
// caseId,
// error: { message: 'Der Token ist ungültig.' }
// });
// }
// redirect(303, `/list/${caseId}?token=${caseToken}`);
};
export const getVorgangByCaseId = ({ params }) => {
const prefix = params.vorgang ? `${params.vorgang}/` : '';
const stream = client.listObjectsV2(BUCKET, prefix, false, '');
const result = new ReadableStream({
start(controller) {
stream.on('data', (data) => {
if (prefix === '') {
if (data.prefix)
controller.enqueue(`${JSON.stringify({ ...data, name: data.prefix.slice(0, -1) })}\n`);
return;
}
const name = data.name.slice(prefix.length);
if (name === 'config.json') return;
// zugangscode datei
if (name === '__perm__') return;
controller.enqueue(`${JSON.stringify({ ...data, name, prefix })}\n`);
});
stream.on('end', () => {
controller.close();
});
},
cancel() {
stream.destroy();
}
});
return new Response(result, {
headers: {
'content-type': 'text/event-stream'
}
});
};
export const hasValidToken = async (caseId: string, caseToken: string) => {
const hasValidToken = async (caseId: string, caseToken: string) => {
const objPath = `${caseId}/${TOKENFILENAME}`;
try {
@@ -84,9 +107,17 @@ export const hasValidToken = async (caseId: string, caseToken: string) => {
const res = await client.getObject(BUCKET, objPath);
const savedToken = await new Response(res).text();
const token = await new Response(res).text();
return savedToken === caseToken ? true : false;
if (!token) {
return fail(400, {
success: false,
caseId,
error: { message: 'Der Token ist ungültig.' }
});
}
return token === caseToken ? true : false;
} catch (error) {
if (error.name == 'S3Error') {
console.log(error);

View File

@@ -1,9 +1,15 @@
import { loginUser, logoutUser } from '$lib/server/authService';
import { redirectIfVorgangExists } from '$lib/server/vorgangService.js';
import { getVorgangByCaseId } from '$lib/server/vorgangService.js';
export const actions = {
login: ({ request, cookies }) => loginUser({ request, cookies }),
logout: (event) => logoutUser(event),
redirectToVorgang: ({request}) => redirectIfVorgangExists(request)
getVorgangById: async ({ request }) => {
const data = await request.formData();
const caseId = data.get('case-id');
const caseToken = data.get('case-token');
const result = await getVorgangByCaseId(caseId, caseToken);
console.log(result);
}
} as const;

View File

@@ -24,7 +24,7 @@
<div class="w-full max-w-sm mx-auto">
<div class="relative mt-5 bg-gray-50 rounded-xl shadow-xl p-3 pt-1">
<div class="mt-10">
<form action="?/redirectToVorgang" method="POST">
<form action="?/getVorgangById" method="POST">
<BaseInputField
id="case-id"
name="case-id"