Skip to content
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

Dhruv gupta week4 assignment #57

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 29 additions & 16 deletions week-4/middlewares/01-ratelimitter.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,40 @@
// You have to create a middleware for rate limiting a users request based on their username passed in the header

const express = require('express');
const app = express();

// Your task is to create a global middleware (app.use) which will
// rate limit the requests from a user to only 5 request per second
// If a user sends more than 5 requests in a single second, the server
// should block them with a 404.
// User will be sending in their user id in the header as 'user-id'
// You have been given a numberOfRequestsForUser object to start off with which
// clears every one second

let numberOfRequestsForUser = {};

// Clears the request count for each user every second
setInterval(() => {
numberOfRequestsForUser = {};
}, 1000)
}, 1000);

// Rate limiting middleware
app.use((req, res, next) => {
const userId = req.headers['user-id'];

if (!userId) {
return res.status(400).json({ error: 'User ID missing in headers' });
}

if (!numberOfRequestsForUser[userId]) {
numberOfRequestsForUser[userId] = 0;
}

numberOfRequestsForUser[userId]++;

if (numberOfRequestsForUser[userId] > 5) {
return res.status(404).json({ error: 'Too many requests' });
}

next();
});

app.get('/user', function(req, res) {
res.status(200).json({ name: 'john' });
app.get('/user', (req, res) => {
res.status(200).json({ name: 'john' });
});

app.post('/user', function(req, res) {
res.status(200).json({ msg: 'created dummy user' });
app.post('/user', (req, res) => {
res.status(200).json({ msg: 'created dummy user' });
});

module.exports = app;
module.exports = app;
126 changes: 99 additions & 27 deletions week-4/middlewares/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion week-4/middlewares/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"license": "ISC",
"description": "",
"dependencies": {
"express": "^4.18.2"
"express": "^4.20.0"
},
"devDependencies": {
"@babel/plugin-transform-modules-commonjs": "^7.23.3",
Expand Down
16 changes: 15 additions & 1 deletion week-5/backend/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,15 @@
// start writing from here
const express = require("express");
const jwt = require("jsonwebtoken");
const userRoutes = require("./routes/user"); // Import the routes from user.js
const todoRoutes = require("./routes/todo");

const app = express();

app.use(express.json());

app.use("/users", userRoutes); // Use the routes defined in user.js
app.use("/todos", todoRoutes); // Register the todo routes

app.listen(3000, () => {
console.log("Server is running on port 3000");
});
36 changes: 35 additions & 1 deletion week-5/backend/middleware/user.js
Original file line number Diff line number Diff line change
@@ -1 +1,35 @@
// start writing from here
const express = require("express");
const jwt = require("jsonwebtoken");
const { route } = require("../routes/user");

const JWT_SECRET = "namaste";

// Middleware function for authentication
function auth(req, res, next) {
console.log("Auth middleware is being called"); // Log to check if middleware is called

const token = req.header("token");

if (!token) {
return res.status(401).json({
message: "Access Denied. No token provided."
});
}

try {
const decodedData = jwt.verify(token, JWT_SECRET);
req.username = decodedData.username; // Pass the username to the next middleware
console.log("Token is valid. Username:", req.username); // Log the decoded username
next(); // Continue to the next middleware/route handler
} catch (error) {
console.log("Token is invalid");
res.status(400).json({
message: "Invalid token"
});
}
}




module.exports = auth; // Export the auth middleware
Loading