const express = require('express');
const crypto = require('crypto');
const app = express();
const WEBHOOK_SECRET = 'your_webhook_secret_here';
// Must parse raw body to verify signature correctly
app.use(express.json());
app.post('/webhook/reotp', (req, res) => {
const signatureHeader = req.headers['x-webhook-signature'];
const payloadString = JSON.stringify(req.body);
// Calculate HMAC SHA256
const expectedSignature = crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(payloadString)
.digest('hex');
// Securely compare signatures
if (signatureHeader !== expectedSignature) {
return res.status(401).send('Invalid signature');
}
// Handle successful verification
const { event, phoneNumber, requestId } = req.body;
if (event === 'verification.success') {
console.log(`User ${phoneNumber} verified! (ID: ${requestId})`);
// Login user, create session, update DB, etc.
}
// Must return 200 OK so we know it was delivered
res.status(200).send('OK');
});
app.listen(3000, () => console.log('Listening for Webhooks...'));