So Im trying to verify my webhooks like stated in the docs but I weirdly get it to work on one webhook but not on two others.
My middleware code is this:
app.use((req, res, next) => {
logger.info(`${req.method} ${req.originalUrl} | ${req.ip}`);
if (!req.ip) return res.status(401).json({message: 'Unauthorized'});
const requestIp = req.ip.replace('::ffff:', '');
if (requestIp !== process.env.AUTHORIZED_IP) return res.status(401).json({message: 'Unauthorized'});
console.log('made it 1')
const signatureHeader = req.headers['x-appwrite-webhook-signature'];
const userAgent = req.headers["user-agent"];
const token = generateWebhookSignature(req.body, `${req.protocol}://${req.get("host")}${req.originalUrl}`);
console.log(token)
console.log(signatureHeader)
if (!userAgent || !userAgent.startsWith('Appwrite-Server')) return res.status(401).json({message: 'Unauthorized'});
console.log('made it 2')
if (!signatureHeader || signatureHeader !== token) return res.status(401).json({message: 'Unauthorized'});
console.log('made it 3')
next();
})
export const generateWebhookSignature = (payload: any, url: string) => {
console.log(url + JSON.stringify(payload))
return crypto
.createHmac("sha1", process.env.APPWRITE_SIG_KEY || "")
.update(url + JSON.stringify(payload))
.digest("base64");
};
As I said weirdly enough this generates the correct signature when a webhook is received by a document creation in my database but it generates different signatures when a document is deleted/updated and thus "fails" to authorize. Am I doing something wrong?
These are the webhooks:
import {Router} from 'express';
const router = Router();
router.post('/database/events/create', (req, res) => {
console.log("create")
res.status(200).send({ success: true });
});
router.post('/database/events/update', (req, res) => {
console.log("update")
res.status(200).send({ success: true });
});
router.post('/database/events/delete', (req, res) => {
console.log("delete")
res.status(200).send({ success: true });
});
export default router;
Recommended threads
- TablesDB `updateRows` returns `database_...
Hi Appwrite team! I’m seeing a strange issue with TablesDB bulk row updates on a self-hosted Appwrite instance. **Environment** - Appwrite self-hosted `1.9.0` ...
- [SOLVED] Realtime Missing Channels
```js useEffect(() => { let subscription: RealtimeSubscription; async function loadChips() { try { const {rows: chi...
- Functions executed by events does not ap...
Hello, Running self-hosted Appwrite version 1.9.0 (with console 7.8.26). When functions are triggered by an event (eg. databases.\*tables.\*.rows.\*.create) doe...