34 lines
1.3 KiB
JavaScript
34 lines
1.3 KiB
JavaScript
import test from 'brittle'
|
|
import {
|
|
signWebhookPayload,
|
|
verifyWebhookSignature,
|
|
isWebhookSigningEnabled,
|
|
} from '../server/services/notify.js'
|
|
|
|
test('sign and verify webhook HMAC', (t) => {
|
|
const secret = 'test-secret'
|
|
const ts = '1710000000000'
|
|
const body = '{"type":"anomaly","severity":"critical"}'
|
|
const sig = signWebhookPayload(secret, ts, body)
|
|
t.ok(sig.startsWith('sha256='))
|
|
t.ok(verifyWebhookSignature(secret, ts, body, sig, { now: Number(ts) }))
|
|
t.absent(verifyWebhookSignature(secret, ts, body + 'x', sig, { now: Number(ts) }))
|
|
t.absent(
|
|
verifyWebhookSignature(secret, ts, body, sig, { now: Number(ts) + 10 * 60_000 })
|
|
)
|
|
})
|
|
|
|
test('isWebhookSigningEnabled defaults on with secret', (t) => {
|
|
const prevSecret = process.env.PEARDATA_WEBHOOK_SECRET
|
|
const prevSign = process.env.PEARDATA_WEBHOOK_SIGN
|
|
process.env.PEARDATA_WEBHOOK_SECRET = 'abc'
|
|
delete process.env.PEARDATA_WEBHOOK_SIGN
|
|
t.ok(isWebhookSigningEnabled())
|
|
process.env.PEARDATA_WEBHOOK_SIGN = '0'
|
|
t.absent(isWebhookSigningEnabled())
|
|
if (prevSecret == null) delete process.env.PEARDATA_WEBHOOK_SECRET
|
|
else process.env.PEARDATA_WEBHOOK_SECRET = prevSecret
|
|
if (prevSign == null) delete process.env.PEARDATA_WEBHOOK_SIGN
|
|
else process.env.PEARDATA_WEBHOOK_SIGN = prevSign
|
|
})
|