-
Notifications
You must be signed in to change notification settings - Fork 0
Worked on email templete #8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
utils/transporter.js
Outdated
| const transporter = nodemailer.createTransport({ | ||
| service: "gmail", | ||
| auth: { | ||
| user: "santanrathore75209@gmail.com", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Better to use any credentials used in config files or default.json. Can be used at multiple places and will have to update at one place only, if needed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay
| `, | ||
| }; | ||
|
|
||
| try { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should try-catch the whole function, and return the error. Anything could fail not just the mail.
app.js
Outdated
| require("dotenv").config(); | ||
| require("./db/connectionDB"); | ||
| require('./models/user') | ||
| require('./models/Survey') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should be /survey. Filename case should match always.
|
This pull request sets up GitHub code scanning for this repository. Once the scans have completed and the checks have passed, the analysis results for this pull request branch will appear on this overview. Once you merge this pull request, the 'Security' tab will show more code scanning analysis results (for example, for the default branch). Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results. For more information about GitHub code scanning, check out the documentation. |
| res.send({ token }); | ||
| try { | ||
| const { email, password } = req.body; | ||
| const user = await User.findOne({ email }); |
Check failure
Code scanning / CodeQL
Database query built from user-controlled sources High
user-provided value
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI about 2 months ago
The best way to fix this problem is to ensure that the email value used in MongoDB queries is always interpreted as a literal value and not as a query object. There are two safe approaches:
- Use the
$eqoperator in the query:{ email: { $eq: email } }, which ensures that the value is not interpreted as a query object. - Explicitly check that
emailis a string before constructing the query object.
We will edit controllers/auth.js at line 168 in the login function. We'll change the call from:
const user = await User.findOne({ email });to:
const user = await User.findOne({ email: { $eq: email } });Optionally, for extra safety, you can add a type check for email. But using $eq is sufficient and idiomatic.
No additional imports or dependencies are needed.
-
Copy modified line R168
| @@ -165,7 +165,7 @@ | ||
| const login = async (req, res) => { | ||
| try { | ||
| const { email, password } = req.body; | ||
| const user = await User.findOne({ email }); | ||
| const user = await User.findOne({ email: { $eq: email } }); | ||
|
|
||
| if (user) { | ||
| const { _id } = user; |
| const updateProfile = async (req, res) => { | ||
| try { | ||
| const { _id } = req.body; | ||
| const userexist = await User.findOneAndUpdate({ _id }, { $set: req.body }); |
Check failure
Code scanning / CodeQL
Database query built from user-controlled sources High
user-provided value
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI about 2 months ago
To fix the vulnerability, we should validate that _id from req.body is a string (or a valid MongoDB ObjectId, if required by your schema) and not an object that could be used for query manipulation. This can be done by checking typeof _id === "string" or, for better security and compatibility, by using the ObjectId.isValid helper from the mongodb or mongoose library and converting to ObjectId. Alternatively, you could use the $eq operator in the query to ensure the user input is interpreted as a literal value.
Best fix:
In the block for updateProfile, add a check:
- If
_idis not a string (and optionally not a valid ObjectId), return a 400 error response. - Otherwise, proceed as normal using
_idsafely.
Required changes:
Add a type check on _id at the start of the updateProfile function, before passing it to .findOneAndUpdate. If possible, validate it as an ObjectId. (As shown code uses Mongoose, so you can use mongoose.Types.ObjectId.isValid if ObjectId is used, else keep a string check.)
-
Copy modified lines R188-R192
| @@ -185,6 +185,11 @@ | ||
| const updateProfile = async (req, res) => { | ||
| try { | ||
| const { _id } = req.body; | ||
| // Validate _id is a string (or valid ObjectId) | ||
| if (typeof _id !== "string") { | ||
| res.status(400).send("Invalid user id"); | ||
| return; | ||
| } | ||
| const userexist = await User.findOneAndUpdate({ _id }, { $set: req.body }); | ||
| if (userexist) { | ||
| res.send("user updated successfully"); |
| const updateProfile = async (req, res) => { | ||
| try { | ||
| const { _id } = req.body; | ||
| const userexist = await User.findOneAndUpdate({ _id }, { $set: req.body }); |
Check failure
Code scanning / CodeQL
Database query built from user-controlled sources High
user-provided value
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI about 2 months ago
To fix the vulnerability, only a predefined list of fields should be updatable by the user. This can be accomplished by creating an explicit whitelist (array) of allowed fields for User updates, extracting just those fields from req.body, and then using that filtered object for the update operation.
- Add an array of allowed profile fields (e.g.,
['username', 'email', 'phoneNo']—add fields as fits your model). - Extract only these fields from
req.body, e.g., via.reduceor a library likelodash.pick—but since we cannot add new dependencies unnecessarily, use only plain JavaScript here. - Use the filtered object in
{ $set: filteredBody }in the update operation. - Optionally, reject any requests where the body attempts to update fields not in the whitelist.
All changes are to be made within the updateProfile function in controllers/auth.js.
-
Copy modified lines R188-R196
| @@ -185,7 +185,15 @@ | ||
| const updateProfile = async (req, res) => { | ||
| try { | ||
| const { _id } = req.body; | ||
| const userexist = await User.findOneAndUpdate({ _id }, { $set: req.body }); | ||
| // Only allow the following fields to be updated: | ||
| const allowedFields = ['username', 'email', 'phoneNo']; // Add more as appropriate | ||
| const updateData = {}; | ||
| for (const field of allowedFields) { | ||
| if (Object.prototype.hasOwnProperty.call(req.body, field)) { | ||
| updateData[field] = req.body[field]; | ||
| } | ||
| } | ||
| const userexist = await User.findOneAndUpdate({ _id }, { $set: updateData }); | ||
| if (userexist) { | ||
| res.send("user updated successfully"); | ||
| } else { |
|
|
||
| router.post("/signup", signup); | ||
| router.post("/activate", verifyAccount); | ||
| router.post("/activate/:token", verifyAccount); |
Check failure
Code scanning / CodeQL
Missing rate limiting High
authorization
This route handler performs
a database access
This route handler performs
a database access
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI about 2 months ago
To resolve this issue, a rate limiting middleware should be applied to the /activate/:token endpoint in routes/auth.js. The most common solution is to use the popular express-rate-limit package. The process involves:
- Importing
express-rate-limitat the top of the file. - Instantiating a rate limit middleware (e.g., restrict to a reasonable number of requests per time window).
- Applying the middleware to the
/activate/:tokenroute, ensuring only this route is affected. - No changes to the underlying handler (
verifyAccount) or to unrelated routes.
This fix does not change existing functionality provided by the route handler, and instead adds a layer of protection for the flagged endpoint.
-
Copy modified line R2 -
Copy modified lines R16-R24
| @@ -1,4 +1,5 @@ | ||
| const express = require("express"); | ||
| const rateLimit = require("express-rate-limit"); | ||
|
|
||
| const router = express.Router(); | ||
|
|
||
| @@ -12,7 +13,15 @@ | ||
| } = require("../controllers/auth"); | ||
|
|
||
| router.post("/signup", signup); | ||
| router.post("/activate/:token", verifyAccount); | ||
|
|
||
| // Limit requests to the account activation endpoint | ||
| const activateLimiter = rateLimit({ | ||
| windowMs: 15 * 60 * 1000, // 15 minutes | ||
| max: 5, // max 5 requests per windowMs per IP | ||
| message: "Too many activation attempts from this IP, please try again later.", | ||
| }); | ||
| router.post("/activate/:token", activateLimiter, verifyAccount); | ||
|
|
||
| router.post("/resetlink", resetlink); | ||
| router.post("/changepassword/:token", changepassword); | ||
| router.post("/login", login); |
-
Copy modified lines R22-R23
| @@ -19,7 +19,8 @@ | ||
| "mailgun-js": "^0.22.0", | ||
| "mongoose": "^5.12.12", | ||
| "nodemailer": "^6.6.1", | ||
| "nodemon": "^2.0.7" | ||
| "nodemon": "^2.0.7", | ||
| "express-rate-limit": "^8.0.1" | ||
| }, | ||
| "devDependencies": {}, | ||
| "description": "" |
| Package | Version | Security advisories |
| express-rate-limit (npm) | 8.0.1 | None |
| router.post("/activate/:token", verifyAccount); | ||
| router.post("/resetlink", resetlink); | ||
| router.post("/changepassword", changepassword); | ||
| router.post("/changepassword/:token", changepassword); |
Check failure
Code scanning / CodeQL
Missing rate limiting High
authorization
This route handler performs
a database access
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI about 2 months ago
To address the missing rate-limiting concern with minimal impact on existing functionality, we will introduce the well-known express-rate-limit middleware for the affected routes. We'll install and import express-rate-limit and then configure a rate limiter specifically for password-related endpoints (or, optionally, for all endpoints if that's desired). We'll apply the rate limiter only to those routes (like /changepassword/:token, /resetlink, /signup, etc.) within routes/auth.js. This will provide targeted protection against brute-force and denial-of-service attacks without overly restricting normal usage.
Import express-rate-limit at the top of the file. Then, create an instance of the rate limiter (e.g., limit to 5 requests per IP per 15 minutes—this is customizable). Next, attach the limiter as middleware to the /changepassword/:token route (and optionally other auth routes if desired). Only these changes are needed in routes/auth.js to address the finding.
-
Copy modified line R2 -
Copy modified lines R15-R21 -
Copy modified lines R24-R26
| @@ -1,4 +1,5 @@ | ||
| const express = require("express"); | ||
| const rateLimit = require("express-rate-limit"); | ||
|
|
||
| const router = express.Router(); | ||
|
|
||
| @@ -11,11 +12,18 @@ | ||
| updateProfile, | ||
| } = require("../controllers/auth"); | ||
|
|
||
| // Define a rate limiter for sensitive authentication endpoints | ||
| const authLimiter = rateLimit({ | ||
| windowMs: 15 * 60 * 1000, // 15 minutes | ||
| max: 5, // limit each IP to 5 requests per windowMs | ||
| message: "Too many attempts from this IP, please try again after 15 minutes" | ||
| }); | ||
|
|
||
| router.post("/signup", signup); | ||
| router.post("/activate/:token", verifyAccount); | ||
| router.post("/resetlink", resetlink); | ||
| router.post("/changepassword/:token", changepassword); | ||
| router.post("/login", login); | ||
| router.post("/resetlink", authLimiter, resetlink); | ||
| router.post("/changepassword/:token", authLimiter, changepassword); | ||
| router.post("/login", authLimiter, login); | ||
| router.put("/updateprofile", updateProfile); | ||
|
|
||
| module.exports = router; |
-
Copy modified lines R22-R23
| @@ -19,7 +19,8 @@ | ||
| "mailgun-js": "^0.22.0", | ||
| "mongoose": "^5.12.12", | ||
| "nodemailer": "^6.6.1", | ||
| "nodemon": "^2.0.7" | ||
| "nodemon": "^2.0.7", | ||
| "express-rate-limit": "^8.0.1" | ||
| }, | ||
| "devDependencies": {}, | ||
| "description": "" |
| Package | Version | Security advisories |
| express-rate-limit (npm) | 8.0.1 | None |
| router.post("/changepassword", changepassword); | ||
| router.post("/changepassword/:token", changepassword); | ||
| router.post("/login", login); | ||
| router.put("/updateprofile", updateProfile); |
Check failure
Code scanning / CodeQL
Missing rate limiting High
a database access
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI about 2 months ago
To fix this issue, you should employ a rate-limiting middleware for the route in question. The most established and effective way to do this in an Express application is to use the express-rate-limit package. You should add an import for express-rate-limit, define a limiter (for example, allowing only 5 update attempts per minute per IP), and then apply it as middleware to the /updateprofile route. To minimize impact on the rest of the code, only the relevant import, limiter definition, and the route handler line need to be modified or extended.
- Add
const rateLimit = require('express-rate-limit');near the top. - Define a
updateProfileLimiter(e.g., allowing 5 attempts per minute) after the router declaration. - Apply the limiter to the
/updateprofileroute, e.g.:
router.put("/updateprofile", updateProfileLimiter, updateProfile);
These changes should all be made within routes/auth.js.
-
Copy modified line R2 -
Copy modified lines R6-R12 -
Copy modified line R24
| @@ -1,7 +1,15 @@ | ||
| const express = require("express"); | ||
| const rateLimit = require("express-rate-limit"); | ||
|
|
||
| const router = express.Router(); | ||
|
|
||
| // Limit requests to /updateprofile to 5 per minute per IP | ||
| const updateProfileLimiter = rateLimit({ | ||
| windowMs: 60 * 1000, // 1 minute | ||
| max: 5, | ||
| message: "Too many profile update attempts from this IP, please try again after a minute.", | ||
| }); | ||
|
|
||
| const { | ||
| signup, | ||
| verifyAccount, | ||
| @@ -16,6 +21,6 @@ | ||
| router.post("/resetlink", resetlink); | ||
| router.post("/changepassword/:token", changepassword); | ||
| router.post("/login", login); | ||
| router.put("/updateprofile", updateProfile); | ||
| router.put("/updateprofile", updateProfileLimiter, updateProfile); | ||
|
|
||
| module.exports = router; |
-
Copy modified lines R22-R23
| @@ -19,7 +19,8 @@ | ||
| "mailgun-js": "^0.22.0", | ||
| "mongoose": "^5.12.12", | ||
| "nodemailer": "^6.6.1", | ||
| "nodemon": "^2.0.7" | ||
| "nodemon": "^2.0.7", | ||
| "express-rate-limit": "^8.0.1" | ||
| }, | ||
| "devDependencies": {}, | ||
| "description": "" |
| Package | Version | Security advisories |
| express-rate-limit (npm) | 8.0.1 | None |
|
|
||
| router.post("/createsurvey", createSurvey); | ||
|
|
||
| router.post("/createsurvey", protect, createSurvey); |
Check failure
Code scanning / CodeQL
Missing rate limiting High
authorization
This route handler performs
a database access
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI about 2 months ago
To fix the issue, we will apply a rate-limiting middleware to the /createsurvey route. The most common approach in Express is to use the express-rate-limit package, which can be installed and configured to set a maximum number of requests per time period. We will:
- Import
express-rate-limitat the top of the file. - Instantiate the rate limiter with appropriate parameters (e.g., 100 requests per 15 minutes per IP).
- Apply the rate limiter to the
/createsurveyroute, placing it immediately before theprotectmiddleware. - Only edit code shown within
routes/survey.js. - Do not affect other routes unless they are equally vulnerable and highlighted.
Required steps:
- Add the rate limiter import and definition.
- Update the
/createsurveyroute to include the rate limiter middleware.
-
Copy modified lines R4-R12 -
Copy modified line R21
| @@ -1,6 +1,15 @@ | ||
| const { response } = require("express"); | ||
| const express = require("express"); | ||
| const router = express.Router(); | ||
| // Rate limiter middleware | ||
| const rateLimit = require("express-rate-limit"); | ||
| // Set up rate limiter: (100 requests per 15 minutes per IP) | ||
| const surveyLimiter = rateLimit({ | ||
| windowMs: 15 * 60 * 1000, | ||
| max: 100, | ||
| message: "Too many requests, please try again later.", | ||
| }); | ||
|
|
||
| const { protect } = require("../middlewares/requireLogin"); | ||
| const { | ||
| createSurvey, | ||
| @@ -9,7 +18,7 @@ | ||
| getSurvey, | ||
| } = require("../controllers/survey"); | ||
|
|
||
| router.post("/createsurvey", protect, createSurvey); | ||
| router.post("/createsurvey", surveyLimiter, protect, createSurvey); | ||
| router.put("/response/yes/:id", responseYes); | ||
| router.put("/response/no/:id", responseNo); | ||
| router.get("/getSurvey", getSurvey); |
-
Copy modified lines R22-R23
| @@ -19,7 +19,8 @@ | ||
| "mailgun-js": "^0.22.0", | ||
| "mongoose": "^5.12.12", | ||
| "nodemailer": "^6.6.1", | ||
| "nodemon": "^2.0.7" | ||
| "nodemon": "^2.0.7", | ||
| "express-rate-limit": "^8.0.1" | ||
| }, | ||
| "devDependencies": {}, | ||
| "description": "" |
| Package | Version | Security advisories |
| express-rate-limit (npm) | 8.0.1 | None |
| router.post("/createsurvey", createSurvey); | ||
|
|
||
| router.post("/createsurvey", protect, createSurvey); | ||
| router.put("/response/yes/:id", responseYes); |
Check failure
Code scanning / CodeQL
Missing rate limiting High
a database access
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI about 2 months ago
To fix the missing rate limiting, a rate-limiting middleware should be added to the affected route(s). The canonical approach in Express is to use the popular express-rate-limit package, which can throttle requests by client as configured. To minimize code changes and avoid altering existing logic, we should import and configure express-rate-limit within this file, and apply the middleware specifically to the endpoints needing rate protection.
Concretely:
- Install and import
express-rate-limit. - Configure a rate limiter (e.g., maximum 100 requests per 15 minutes per IP).
- Apply the rate limiter middleware to the
/response/yes/:idroute (and, ideally, also to similar/response/no/:idroute to cover all survey responses). - Only modify code in
routes/survey.js, as shown.
-
Copy modified line R4 -
Copy modified lines R13-R20 -
Copy modified lines R22-R23
| @@ -1,6 +1,7 @@ | ||
| const { response } = require("express"); | ||
| const express = require("express"); | ||
| const router = express.Router(); | ||
| const rateLimit = require("express-rate-limit"); | ||
| const { protect } = require("../middlewares/requireLogin"); | ||
| const { | ||
| createSurvey, | ||
| @@ -9,8 +10,16 @@ | ||
| getSurvey, | ||
| } = require("../controllers/survey"); | ||
|
|
||
| // Rate limiter: max 100 requests per IP per 15 minutes | ||
| const surveyResponseLimiter = rateLimit({ | ||
| windowMs: 15 * 60 * 1000, // 15 minutes | ||
| max: 100, // Limit each IP to 100 requests per windowMs | ||
| standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers | ||
| legacyHeaders: false, // Disable the `X-RateLimit-*` headers | ||
| }); | ||
|
|
||
| router.post("/createsurvey", protect, createSurvey); | ||
| router.put("/response/yes/:id", responseYes); | ||
| router.put("/response/no/:id", responseNo); | ||
| router.put("/response/yes/:id", surveyResponseLimiter, responseYes); | ||
| router.put("/response/no/:id", surveyResponseLimiter, responseNo); | ||
| router.get("/getSurvey", getSurvey); | ||
| module.exports = router; |
-
Copy modified lines R22-R23
| @@ -19,7 +19,8 @@ | ||
| "mailgun-js": "^0.22.0", | ||
| "mongoose": "^5.12.12", | ||
| "nodemailer": "^6.6.1", | ||
| "nodemon": "^2.0.7" | ||
| "nodemon": "^2.0.7", | ||
| "express-rate-limit": "^8.0.1" | ||
| }, | ||
| "devDependencies": {}, | ||
| "description": "" |
| Package | Version | Security advisories |
| express-rate-limit (npm) | 8.0.1 | None |
|
|
||
| router.post("/createsurvey", protect, createSurvey); | ||
| router.put("/response/yes/:id", responseYes); | ||
| router.put("/response/no/:id", responseNo); |
Check failure
Code scanning / CodeQL
Missing rate limiting High
a database access
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI about 2 months ago
To fix the missing rate limiting vulnerability in the given Express router, we should add a rate-limiting middleware to the specific route /response/no/:id. The recommended approach is to use the widely used express-rate-limit package. We should:
- Add the required import for
express-rate-limit. - Define a rate limiter (e.g., allow a reasonable number of requests per window per IP).
- Apply the limiter specifically to the vulnerable route, rather than all routes, to minimally change existing behaviour.
All code changes should be made withinroutes/survey.js, at the top for imports and in the routing section for middleware application.
-
Copy modified line R3 -
Copy modified lines R13-R18 -
Copy modified line R21
| @@ -1,5 +1,6 @@ | ||
| const { response } = require("express"); | ||
| const express = require("express"); | ||
| const rateLimit = require("express-rate-limit"); | ||
| const router = express.Router(); | ||
| const { protect } = require("../middlewares/requireLogin"); | ||
| const { | ||
| @@ -9,8 +10,14 @@ | ||
| getSurvey, | ||
| } = require("../controllers/survey"); | ||
|
|
||
| // Define a rate limiter for responseNo | ||
| const responseNoLimiter = rateLimit({ | ||
| windowMs: 15 * 60 * 1000, // 15 minutes | ||
| max: 100, // limit to 100 requests per window per IP | ||
| }); | ||
|
|
||
| router.post("/createsurvey", protect, createSurvey); | ||
| router.put("/response/yes/:id", responseYes); | ||
| router.put("/response/no/:id", responseNo); | ||
| router.put("/response/no/:id", responseNoLimiter, responseNo); | ||
| router.get("/getSurvey", getSurvey); | ||
| module.exports = router; |
-
Copy modified lines R22-R23
| @@ -19,7 +19,8 @@ | ||
| "mailgun-js": "^0.22.0", | ||
| "mongoose": "^5.12.12", | ||
| "nodemailer": "^6.6.1", | ||
| "nodemon": "^2.0.7" | ||
| "nodemon": "^2.0.7", | ||
| "express-rate-limit": "^8.0.1" | ||
| }, | ||
| "devDependencies": {}, | ||
| "description": "" |
| Package | Version | Security advisories |
| express-rate-limit (npm) | 8.0.1 | None |
| router.post("/createsurvey", protect, createSurvey); | ||
| router.put("/response/yes/:id", responseYes); | ||
| router.put("/response/no/:id", responseNo); | ||
| router.get("/getSurvey", getSurvey); |
Check failure
Code scanning / CodeQL
Missing rate limiting High
a database access
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI about 2 months ago
To fix this, we should add a rate-limiting middleware to the /getSurvey route to restrict the number of requests allowed per IP/user within a certain time window. The most common and well-supported package for this in Express is express-rate-limit. Import express-rate-limit, define a limiter (e.g., max 100 requests per 15 minutes is reasonable), and apply it to the /getSurvey route.
The following changes are needed:
- Add
express-rate-limitimport at the top of the file. - Instantiate a rate limiter with appropriate configuration.
- Apply the rate limiter middleware to the
/getSurveyroute as the first argument.
No changes are needed to existing route handlers except for updating the route definition to include the middleware.
-
Copy modified lines R4-R11 -
Copy modified line R23
| @@ -1,6 +1,14 @@ | ||
| const { response } = require("express"); | ||
| const express = require("express"); | ||
| const router = express.Router(); | ||
| const rateLimit = require("express-rate-limit"); | ||
|
|
||
| // Rate limiter: max 100 requests per 15 minutes per IP | ||
| const surveyLimiter = rateLimit({ | ||
| windowMs: 15 * 60 * 1000, // 15 minutes | ||
| max: 100, | ||
| message: "Too many requests from this IP, please try again later.", | ||
| }); | ||
| const { protect } = require("../middlewares/requireLogin"); | ||
| const { | ||
| createSurvey, | ||
| @@ -12,5 +20,5 @@ | ||
| router.post("/createsurvey", protect, createSurvey); | ||
| router.put("/response/yes/:id", responseYes); | ||
| router.put("/response/no/:id", responseNo); | ||
| router.get("/getSurvey", getSurvey); | ||
| router.get("/getSurvey", surveyLimiter, getSurvey); | ||
| module.exports = router; |
-
Copy modified lines R22-R23
| @@ -19,7 +19,8 @@ | ||
| "mailgun-js": "^0.22.0", | ||
| "mongoose": "^5.12.12", | ||
| "nodemailer": "^6.6.1", | ||
| "nodemon": "^2.0.7" | ||
| "nodemon": "^2.0.7", | ||
| "express-rate-limit": "^8.0.1" | ||
| }, | ||
| "devDependencies": {}, | ||
| "description": "" |
| Package | Version | Security advisories |
| express-rate-limit (npm) | 8.0.1 | None |
No description provided.