Skip to content

Commit 4c26d34

Browse files
committed
fix(security): resolve CodeQL alerts for rate limiting and NoSQL injection
1 parent ad3be91 commit 4c26d34

4 files changed

Lines changed: 12 additions & 9 deletions

File tree

‎.env.example‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,7 @@ RAZORPAY_KEY_SECRET=xxxxxxxxxxxxxxxxxxxx
4848
RAZORPAY_PLAN_ID=plan_xxxxxxxxxxxx
4949

5050
# Set from: Razorpay Dashboard → Settings → Webhooks → Add Endpoint → copy secret
51-
RAZORPAY_WEBHOOK_SECRET=xxxxxxxxxxxxxxxxxxxx
51+
RAZORPAY_KEY_ID=rzp_testx_xxxx
52+
RAZORPAY_KEY_SECRET=xxxx
53+
RAZORPAY_PLAN_ID=xxxx
54+
RAZORPAY_WEBHOOK_SECRET=xxxx

‎apps/dashboard-api/src/controllers/billing.controller.js‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ module.exports.handleWebhook = async (req, res, next) => {
101101

102102
// Extract developer_id from subscription notes
103103
const developerId = payload.notes?.developer_id;
104-
if (!developerId) {
105-
console.warn('Razorpay webhook: no developer_id in notes');
106-
return res.json({ success: true, message: 'No developer_id in notes. Skipped.' });
104+
if (!developerId || typeof developerId !== 'string') {
105+
console.warn('Razorpay webhook: no valid developer_id in notes');
106+
return res.json({ success: true, message: 'No valid developer_id in notes. Skipped.' });
107107
}
108108

109109
const developer = await Developer.findById(developerId);
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
const express = require('express');
22
const router = express.Router();
33
const authMiddleware = require('../middlewares/authMiddleware');
4+
const { authLimiter, publicLimiter } = require('../middlewares/auth_limiter');
45
const { createCheckout, handleWebhook } = require('../controllers/billing.controller');
56

6-
// Create a Lemon Squeezy checkout session (authenticated)
7-
router.post('/checkout', authMiddleware, createCheckout);
7+
// Create a Razorpay checkout session (authenticated)
8+
router.post('/checkout', authLimiter, authMiddleware, createCheckout);
89

9-
// Receive webhook events from Lemon Squeezy (public — validated by HMAC signature)
10-
router.post('/webhook', handleWebhook);
10+
// Receive webhook events from Razorpay (public — validated by HMAC signature)
11+
router.post('/webhook', publicLimiter, handleWebhook);
1112

1213
module.exports = router;

‎tools/db-queries/backfill-developer-plans.js‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
const dotenv = require('dotenv');
22
const path = require('path');
33

4-
// Load environment variables from repo root .env
54
dotenv.config({ path: path.join(__dirname, '../../.env') });
65

76
const { Developer, connectDB } = require('../../packages/common');

0 commit comments

Comments
 (0)