3 Commits

Author SHA1 Message Date
0bbbe0064b Merge pull request 'f105_umstellung_seaweedS3' (#32) from f105_umstellung_seaweedS3 into development
All checks were successful
InnoHub Processor/tatort/pipeline/head This commit looks good
Reviewed-on: #32
2025-09-04 15:17:38 +02:00
d007513e82 formatting 2025-09-04 10:56:11 +02:00
b9c03831cb switch from minio to seaweed S3 storage: configs and buckets (dev vs. prod, refactoring magic strings) 2025-09-04 10:55:45 +02:00
7 changed files with 28 additions and 25 deletions

View File

@@ -1,10 +1,10 @@
{
"minio": {
"endPoint": "api-s3.innovation-hub-niedersachsen.de",
"endPoint": "sws3.innovation-hub-niedersachsen.de",
"port": 443,
"useSSL": true,
"accessKey": "GxKhfnfkNvlDU7qzsz0D",
"secretKey": "cqSM5rIRr4MPtqzu2sNKgmB9k2OghPbyxwAWogeM"
"accessKey": "wjpKrmaqXra99rX3D61H",
"secretKey": "fTPi0u0FR6Lv9Y9IKydWv6WM0EA5XrsK008HCt9u"
},
"jwt": {
"secret": "@S2!q@@wXz$dCQ8JoVsHLpzaJ6JCfB",

View File

@@ -1,9 +1,9 @@
import { client } from '$lib/minio';
import { client, BUCKET } from '$lib/minio';
export default async function vorgangNumberOccupied (vorgangNumber: string): Promise<boolean> {
export default async function vorgangNumberOccupied(vorgangNumber: string): Promise<boolean> {
const prefix = `${vorgangNumber}`;
const promise: Promise<boolean> = new Promise((resolve) => {
const stream = client.listObjectsV2('tatort', prefix, false, '');
const stream = client.listObjectsV2(BUCKET, prefix, false, '');
stream.on('data', () => {
stream.destroy();
resolve(true);

View File

@@ -7,6 +7,10 @@ import config from '$lib/config';
/** export const client = new Minio.Client(config.minio); */
export const client = new Client(config.minio);
export const BUCKET = 'tatort';
const isProd = process.env.NODE_ENV == 'production';
const BUCKET = isProd ? 'tatort' : 'tatort-dev';
export { BUCKET };
export const TOKENFILENAME = '__perm__';
export const CONFIGFILENAME = 'config.json';

View File

@@ -1,5 +1,5 @@
import { Readable } from 'stream';
import { client } from '$lib/minio';
import { BUCKET, client } from '$lib/minio';
import { fail } from '@sveltejs/kit';
import { v4 as uuidv4 } from 'uuid';
@@ -51,7 +51,7 @@ export const actions = {
objectName += '.glb';
}
const url = await client.presignedPutObject('tatort', objectName);
const url = await client.presignedPutObject(BUCKET, objectName);
return { url };
},
@@ -95,7 +95,7 @@ export const actions = {
const vorgang = data.vorgang;
const name = data.name;
const url = await client.presignedPutObject('tatort', `${vorgang}/${name}`, 60);
const url = await client.presignedPutObject(BUCKET, `${vorgang}/${name}`, 60);
return { url };
},
@@ -106,7 +106,7 @@ export const actions = {
const stream = data.file.stream();
const metaData = { 'Content-Type': 'model-gtlf-binary', 'X-VorgangsNr': '4711' };
const result = new Promise((resolve, reject) => {
client.putObject('tatort', name, Readable.from(stream), metaData, function (err, etag) {
client.putObject(BUCKET, name, Readable.from(stream), metaData, function (err, etag) {
if (err) return reject(err);
resolve(etag);
});

View File

@@ -1,8 +1,8 @@
import { client } from '$lib/minio';
import { BUCKET, client } from '$lib/minio';
import type { PageServerLoad } from './$types';
export const load: PageServerLoad = async ({ params }) => {
const { vorgang, tatort } = params;
const url = await client.presignedUrl('GET', 'tatort', `${vorgang}/${tatort}`);
const url = await client.presignedUrl('GET', BUCKET, `${vorgang}/${tatort}`);
return { url };
}
};

View File

@@ -1,4 +1,4 @@
import { client } from '$lib/minio';
import { BUCKET, client } from '$lib/minio';
import {
deleteVorgangByToken,
getCrimesListByToken,
@@ -11,7 +11,7 @@ export async function DELETE({ params }) {
const object_list = await new Promise((resolve, reject) => {
const res = [];
const items_str = client.listObjects('tatort', vorgangToken, true);
const items_str = client.listObjects(BUCKET, vorgangToken, true);
items_str.on('data', (obj) => {
res.push(obj.name);
@@ -24,7 +24,7 @@ export async function DELETE({ params }) {
});
});
await client.removeObjects('tatort', object_list);
await client.removeObjects(BUCKET, object_list);
deleteVorgangByToken(vorgangToken);
return new Response(null, { status: 204 });

View File

@@ -40,10 +40,9 @@ export async function PUT({ params, request }) {
const vorgangToken = params.vorgang;
// prepare copy, incl. check if new name exists already
const crimeOldName = data['oldName'];
const crimeS3FullBucketPathOld = `/tatort/${vorgangToken}/${crimeOldName}`;
const crimeS3FullBucketPathOld = `/${BUCKET}/${vorgangToken}/${crimeOldName}`;
const crimeNewName = `${vorgangToken}/${data['newName']}`;
if (!crimeOldName || !crimeNewName) {
@@ -51,14 +50,14 @@ export async function PUT({ params, request }) {
}
try {
await client.statObject('tatort', crimeNewName);
await client.statObject(BUCKET, crimeNewName);
return json({ msg: 'Die Datei existiert bereits.' }, { status: 400 });
} catch (error) {
console.log(error, 'continue operation');
}
await client.copyObject('tatort', crimeNewName, crimeS3FullBucketPathOld);
await client.removeObject('tatort', `${vorgangToken}/${crimeOldName}`);
await client.copyObject(BUCKET, crimeNewName, crimeS3FullBucketPathOld);
await client.removeObject(BUCKET, `${vorgangToken}/${crimeOldName}`);
return json({ success: 'success' }, { status: 200 });
}