Unterschriftenservice: Datei-Lesen von Platte (behebt transforms-Fehler), Marker-Token [[..]] statt paragraph, Breite/Versatz aus hinterlegter Signatur (Service + Brief)
This commit is contained in:
@@ -21,6 +21,8 @@ import path from 'node:path';
|
||||
|
||||
/** Basisordner der generierten Auftragsdateien (read-only in Directus gemountet). */
|
||||
const OUTPUT_DIR = process.env.SKRIFT_OUTPUT_DIR || '/var/skrift-output';
|
||||
/** Directus-Upload-Ordner (lokaler Storage) – zum direkten Datei-Lesen. */
|
||||
const UPLOAD_ROOT = process.env.STORAGE_LOCAL_ROOT || '/directus/uploads';
|
||||
|
||||
// ── Sicherer Formel-Interpreter (kein eval) ─────────────────────────────────
|
||||
// Erlaubt: Zahlen, Variablen, + - * / ( ), unäres Minus, Vergleiche
|
||||
@@ -158,13 +160,14 @@ const handler = (router, { services, getSchema, logger }) => {
|
||||
// Signatur-Plotter-Service (intern über das npm-Netz per container_name erreichbar).
|
||||
const SIGN_URL = (process.env.SKRIFT_SIGN_URL || 'http://skrift-signature-service:8000').replace(/\/$/, '');
|
||||
|
||||
/** Liest eine Directus-Datei (Upload) serverseitig als Buffer. */
|
||||
/** Liest eine Directus-Datei (Upload) serverseitig als Buffer – direkt von der
|
||||
* Platte (lokaler Storage), wie der Mailer. Vermeidet AssetsService.getAsset,
|
||||
* dessen Signatur je nach Directus-Version „transforms"-Fehler wirft. */
|
||||
async function dateiBytes(schema, id) {
|
||||
const assets = new AssetsService({ schema, accountability: null });
|
||||
const { stream } = await assets.getAsset(id, {});
|
||||
const chunks = [];
|
||||
for await (const c of stream) chunks.push(c);
|
||||
return Buffer.concat(chunks);
|
||||
const f = await new ItemsService('directus_files', { schema, accountability: null })
|
||||
.readOne(id, { fields: ['filename_disk'] });
|
||||
if (!f?.filename_disk) throw new Error(`Datei ${id} nicht gefunden.`);
|
||||
return fs.readFileSync(path.join(UPLOAD_ROOT, f.filename_disk));
|
||||
}
|
||||
|
||||
/** Baut die Multipart-Anfrage an den Signatur-Service (Vorschau/Render). */
|
||||
@@ -179,9 +182,9 @@ const handler = (router, { services, getSchema, logger }) => {
|
||||
const svgBytes = await dateiBytes(schema, s.file_id);
|
||||
const svgName = `sig${i + 1}.svg`;
|
||||
form.append('svgs', new Blob([svgBytes], { type: 'image/svg+xml' }), svgName);
|
||||
const marker = String(s.marker_key || `SIG${i + 1}`).replace(/§/g, '').trim();
|
||||
const marker = String(s.marker_key || `SIG${i + 1}`).replace(/[§[\]]/g, '').trim();
|
||||
jobs.push({
|
||||
token: `§§${marker}§§`,
|
||||
token: `[[${marker}]]`,
|
||||
svg_id: svgName,
|
||||
position: ['genau', 'ueber', 'unter'].includes(s.position) ? s.position : 'genau',
|
||||
breite_mm: Number(s.width_mm) > 0 ? Number(s.width_mm) : 45,
|
||||
|
||||
Reference in New Issue
Block a user