diff --git a/server/routes/takeoverCredits.js b/server/routes/takeoverCredits.js index 04c1022..84dfa61 100644 --- a/server/routes/takeoverCredits.js +++ b/server/routes/takeoverCredits.js @@ -2,6 +2,7 @@ import { Router } from 'express' import { config } from '../config.js' import { getSessionCustomerId, requireSession } from '../middleware/session.js' import { getDocument, listDocuments, Query } from '../services/appwriteAdmin.js' +import { signFileLink } from '../services/signedLinks.js' import { answerQuestion, applyTakeoverCredit, @@ -176,9 +177,21 @@ takeoverAdminRouter.get('/open-count', async (_req, res) => { } }) +// Nachweise bekommen einen signierten Link (15 min) auf den Team-Eingang: das Ticketsystem oeffnet sie ohne +// Authorization-Header (routes/team/files.js). Bei jedem Oeffnen des Antrags neu signiert. +function withSignedFileUrls(detail, now = Date.now()) { + const id = detail.request.id + const base = `${config.publicBaseUrl}/api/team/takeover-credits/${encodeURIComponent(id)}/files` + const files = detail.request.files.map((file) => { + const { exp, sig } = signFileLink({ kind: 'takeover', customerId: id, id: file.id, now }) + return { ...file, url: `${base}/${encodeURIComponent(file.id)}?exp=${exp}&sig=${sig}` } + }) + return { ...detail, request: { ...detail.request, files } } +} + takeoverAdminRouter.get('/:id', async (req, res) => { try { - return res.json(await getAdminDetail(req.params.id)) + return res.json(withSignedFileUrls(await getAdminDetail(req.params.id))) } catch (err) { return sendError(res, err, 'Antrag konnte nicht geladen werden') } diff --git a/server/routes/team/files.js b/server/routes/team/files.js index ac1cfcf..fb35f35 100644 --- a/server/routes/team/files.js +++ b/server/routes/team/files.js @@ -1,9 +1,10 @@ import { Router } from 'express' import { openAttachment, sendAttachment } from '../../services/chatAttachments.js' import { verifyFileLink } from '../../services/signedLinks.js' +import { getTakeoverRequest, readUpload } from '../../services/takeoverCredits.js' /** - * Anhaenge mit signiertem Link (?exp=&sig=, 15 min) ohne JWT ausliefern: ,