31 lines
1.1 KiB
JavaScript
31 lines
1.1 KiB
JavaScript
import express from 'express';
|
|
import { enqueueNatAdd, enqueueNatRemove } from '../services/natQueue.js';
|
|
import { error, info, warn } from '../util/Console.js';
|
|
|
|
const router = express.Router();
|
|
|
|
router.post('/', (req, res) => {
|
|
const sig = req.headers['x-webhook-signature'] || req.headers['x-hook-signature'] || '';
|
|
const secret = process.env.WEBHOOK_SECRET || '';
|
|
if (!sig || sig !== secret) return res.status(403).json({ error: 'invalid signature' });
|
|
|
|
const body = req.body || {};
|
|
const event = body.event || '';
|
|
const data = body || {};
|
|
info(`Webhook: ${event}\nbody: ${JSON.stringify(body)}`);
|
|
try {
|
|
if (event === 'created: Allocation') {
|
|
enqueueNatAdd(data.ip, data.port);
|
|
} else if (event === 'deleted: Allocation') {
|
|
enqueueNatRemove(data.ip, data.port);
|
|
} else {
|
|
warn(`Unhandled webhook event: ${event}`);
|
|
}
|
|
return res.json({ success: true });
|
|
} catch (err) {
|
|
error(err);
|
|
return res.status(500).json({ error: 'error ocurred' });
|
|
}
|
|
});
|
|
|
|
export default router; |