import { test } from 'node:test' import assert from 'node:assert/strict' import { useTestEnv } from './support/testEnv.js' // Signierte Datei-Links (15 min) fuer Anhaenge im Ticketsystem: //Download ohne Authorization-Header useTestEnv({ appwriteUrl: 'http://127.0.0.1:9/v1', stripeUrl: 'http://127.0.0.1:9' }) const { FILE_LINK_TTL_MS, signFileLink, verifyFileLink } = await import('../server/services/signedLinks.js') test('Signatur passt nur fuer dieselbe Datei, denselben Kunden und dieselbe Art', () => { assert.equal(FILE_LINK_TTL_MS, 900000) const { exp, sig } = signFileLink({ kind: 'chat', customerId: 'c1', id: 'a1', now: 1000 }) assert.equal(exp, 1000 + 900000) assert.match(sig, /^[0-9a-f]{64}$/) assert.equal(verifyFileLink({ kind: 'chat', customerId: 'c1', id: 'a1', exp, sig, now: 2000 }), true) for (const other of [{ customerId: 'c2' }, { id: 'a2' }, { kind: 'takeover' }]) { assert.equal(verifyFileLink({ kind: 'chat', customerId: 'c1', id: 'a1', exp, sig, now: 2000, ...other }), false, JSON.stringify(other)) } }) test('abgelaufen genau bei exp, manipuliertes exp, kaputte Signatur', () => { const { exp, sig } = signFileLink({ kind: 'chat', customerId: 'c1', id: 'a1', now: 0 }) assert.equal(verifyFileLink({ kind: 'chat', customerId: 'c1', id: 'a1', exp, sig, now: exp }), false) assert.equal(verifyFileLink({ kind: 'chat', customerId: 'c1', id: 'a1', exp: exp + 1, sig, now: 0 }), false) assert.equal(verifyFileLink({ kind: 'chat', customerId: 'c1', id: 'a1', exp: String(exp), sig, now: 0 }), true, 'exp aus der Query ist ein String') for (const bad of ['', 'abc', 'x'.repeat(64), undefined]) { assert.equal(verifyFileLink({ kind: 'chat', customerId: 'c1', id: 'a1', exp, sig: bad, now: 0 }), false, String(bad)) } for (const badExp of ['', 'abc', undefined, NaN]) { assert.equal(verifyFileLink({ kind: 'chat', customerId: 'c1', id: 'a1', exp: badExp, sig, now: 0 }), false, String(badExp)) } })