Files
Webklar-Kundenbereich/server/services/analyseLegal.js
T

55 lines
2.0 KiB
JavaScript

// Veroeffentlichte Rechtstexte der Website-Analyse (je Fassung feste Dateien unter public/rechtliches/)
import { readFile } from 'node:fs/promises'
import { fileURLToPath } from 'node:url'
import { join } from 'node:path'
import { Router } from 'express'
import { config } from '../config.js'
const publicDir = fileURLToPath(new URL('../../public/', import.meta.url))
const VERSION_RE = /^\d{4}-\d{2}-\d{2}$/
function checkVersion(version) {
if (!VERSION_RE.test(String(version))) throw new Error('Analyse: ungültige Fassung')
return String(version)
}
export function legalPaths(version) {
const v = checkVersion(version)
return {
avv: `/rechtliches/avv-website-analyse-${v}.html`,
lb: `/rechtliches/leistungsbeschreibung-website-analyse-${v}.html`,
}
}
export function legalPdfFiles(version) {
const v = checkVersion(version)
return {
avv: { filename: `AVV-Website-Analyse-${v}.pdf`, path: join(publicDir, 'rechtliches', `avv-website-analyse-${v}.pdf`) },
lb: { filename: `Leistungsbeschreibung-Website-Analyse-${v}.pdf`, path: join(publicDir, 'rechtliches', `leistungsbeschreibung-website-analyse-${v}.pdf`) },
}
}
/** Beide PDFs als Mail-Anhaenge; wirft, wenn eine Datei fehlt oder nicht lesbar ist. */
export async function legalPdfAttachments(version) {
const files = legalPdfFiles(version)
return Promise.all(
[files.avv, files.lb].map(async (f) => ({
filename: f.filename,
content: await readFile(f.path),
contentType: 'application/pdf',
}))
)
}
/** Adressen ohne Fassung liefern immer die aktuelle geprüfte Fassung (config.analyse.avvVersion). */
export function analyseLegalRouter() {
const router = Router()
const send = (key) => (_req, res, next) => {
const file = join(publicDir, legalPaths(config.analyse.avvVersion)[key])
res.sendFile(file, (err) => err && next(err.code === 'ENOENT' ? undefined : err))
}
router.get('/avv-website-analyse.html', send('avv'))
router.get('/leistungsbeschreibung-website-analyse.html', send('lb'))
return router
}