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
- Realtime with multiple connections
I need the Realtime on multiple Collections for diffrent applicational logic. So my question is: Is there a way to have only 1 Websocket connection or do I need...
- Can't login or deploy functions in Appwr...
Hello, since i updatet to the appwrite cli 6.1.0 i can't login or deploy functions with the cli. When i call the command: "appwrite get account --verbose" i ge...
- Create admin user?
I'm not really sure how this is supposed to work, I installed Appwrite through docker-compose and set it up. When I launched the app and went into it, I created...