32 lines
1.9 KiB
JavaScript
32 lines
1.9 KiB
JavaScript
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: <img>/<audio>/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))
|
|
}
|
|
})
|