Webhook receiver template
Шаблон сервиса, который принимает webhook от Unimoni и проверяет подпись.
Node.js / Express
import crypto from 'crypto';
import express from 'express';
const SECRET = process.env.UNIMONI_WEBHOOK_SECRET;
const app = express();
app.post('/webhook', express.text({ type: 'application/json' }), (req, res) => {
const ts = req.header('X-Unimoni-Timestamp');
const sig = req.header('X-Unimoni-Signature');
if (!ts || !sig) return res.sendStatus(400);
const skew = Math.abs(Date.now() / 1000 - parseInt(ts, 10));
if (skew > 300) return res.sendStatus(403);
const expected = crypto.createHmac('sha256', SECRET).update(ts + '.' + req.body).digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) {
return res.sendStatus(403);
}
const event = JSON.parse(req.body);
console.log('Got alert:', event.rule_name, event.state);
res.sendStatus(200);
});