Files
peardata/test/webhook-sign.test.js
T
Raven Scott 462cce4b5b
CI / test (push) Successful in 58s
Release rolling / release (push) Successful in 7m10s
Updates
2026-07-18 19:16:58 -04:00

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
})