├── .gitignore ├── Kanika ├── .gitignore ├── Kanika-as2.js ├── Kanika-as4.js ├── Kanika.js ├── Kanika8thjul.js ├── kanika-as3.js └── package.json ├── Mediquity-main.zip ├── PayalDabas ├── .gitignore ├── 5thjuly.js ├── 8thjuly.js └── file.js ├── README.md ├── Rithik ├── .gitignore ├── index.js └── package.json ├── chinmay branch └── chinmay.js ├── example ├── .gitignore ├── Practical1 │ ├── .gitignore │ ├── app.js │ ├── package.json │ ├── public │ │ └── css │ │ │ └── style.css │ └── views │ │ ├── pages │ │ └── items.ejs │ │ └── partials │ │ └── header.ejs ├── Practical2 │ ├── .gitignore │ ├── package.json │ ├── public │ │ └── css │ │ │ └── style.css │ ├── server.js │ └── views │ │ ├── pages │ │ ├── index.ejs │ │ └── post.ejs │ │ └── partials │ │ ├── footer.ejs │ │ └── header.ejs └── ninthjuly │ ├── .gitignore │ ├── package.json │ ├── server.js │ └── views │ └── index.ejs └── vinay ├── .gitignore ├── BlogsWeb ├── .gitignore ├── package-lock.json ├── package.json ├── public │ ├── css │ │ └── styles.css │ └── js │ │ └── scripts.js ├── routes │ ├── comments.js │ ├── posts.js │ └── users.js ├── server.js └── views │ ├── layouts │ └── main.ejs │ ├── partials │ ├── body.ejs │ ├── footer.ejs │ └── header.ejs │ ├── posts │ ├── comments │ │ ├── edit.ejs │ │ ├── index.ejs │ │ └── new.ejs │ ├── edit.ejs │ ├── index.ejs │ ├── new.ejs │ └── show.ejs │ └── users │ ├── edit.ejs │ ├── index.ejs │ └── new.ejs ├── CORS2_UseCase ├── .gitignore ├── client │ ├── package-lock.json │ ├── package.json │ ├── public │ │ └── index.html │ └── src │ │ ├── App.js │ │ └── index.js ├── package-lock.json ├── readme.md └── server │ ├── models │ └── Task.js │ ├── package-lock.json │ ├── package.json │ ├── routes │ └── tasks.js │ └── server.js ├── CORS_UseCase ├── index.html ├── package-lock.json ├── package.json └── server.js ├── ExpressRoute ├── .gitignore ├── package.json ├── routes │ ├── posts.js │ └── users.js └── server.js ├── GET_POST2 ├── .gitignore ├── package.json ├── server.js └── views │ └── index.ejs ├── GET_POST3 ├── .gitignore ├── package.json ├── server.js └── views │ └── index.ejs ├── Practice ├── .gitignore ├── package.json └── server.js ├── Quora ├── .gitignore ├── index.js ├── package.json ├── public │ └── style.css └── views │ ├── edit.ejs │ ├── index.ejs │ ├── new.ejs │ └── show.ejs ├── Test └── readme.md ├── authInMern ├── client │ ├── .gitignore │ ├── package-lock.json │ ├── package.json │ ├── public │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── logo192.png │ │ ├── logo512.png │ │ ├── manifest.json │ │ └── robots.txt │ └── src │ │ ├── App.js │ │ ├── components │ │ ├── Login │ │ │ ├── index.jsx │ │ │ └── styles.module.css │ │ ├── Main │ │ │ ├── index.jsx │ │ │ └── styles.module.css │ │ └── Singup │ │ │ ├── index.jsx │ │ │ └── styles.module.css │ │ ├── index.css │ │ └── index.js └── server │ ├── .gitignore │ ├── db.js │ ├── index.js │ ├── models │ └── user.js │ ├── package-lock.json │ ├── package.json │ └── routes │ ├── auth.js │ └── users.js ├── final_project_eCommerce ├── Noted.txt ├── config │ └── db.js ├── controllers │ ├── cartController.js │ ├── productController.js │ └── userController.js ├── ecommerce_postman_collection.json ├── middleware │ └── auth.js ├── models │ ├── Product.js │ └── User.js ├── package-lock.json ├── package.json ├── routes │ ├── cartRoutes.js │ ├── productRoutes.js │ └── userRoutes.js ├── server.js └── serverr.js └── python └── hello.py /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | Mediquity-main 4 | Mediquity/ 5 | -------------------------------------------------------------------------------- /Kanika/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /Kanika/Kanika-as2.js: -------------------------------------------------------------------------------- 1 | // Perform basic arithmetic operations 2 | let num1 = 10; 3 | let num2 = 5; 4 | 5 | // Addition 6 | let sum = num1 + num2; 7 | 8 | // Subtraction 9 | let difference = num1 - num2; 10 | 11 | // Multiplication 12 | let product = num1 * num2; 13 | 14 | // Division (using division operator) 15 | let division = num1 / num2; 16 | 17 | // Concatenate strings 18 | let str1 = "Hello"; 19 | let str2 = "World"; 20 | let concatenatedString = str1 + " " + str2; 21 | 22 | // Use a template literal 23 | let name = "Kanika"; 24 | let age = 20; 25 | let greeting = `Hello, my name is ${name} and I am ${age} years old.`; 26 | 27 | // Print the results 28 | console.log("Sum:", sum); 29 | console.log("Difference:", difference); 30 | console.log("Product:", product); 31 | console.log("Division:", division); 32 | console.log("Concatenated string:", concatenatedString); 33 | console.log(greeting); 34 | -------------------------------------------------------------------------------- /Kanika/Kanika-as4.js: -------------------------------------------------------------------------------- 1 | // Print numbers from 1 to 10 using for loop 2 | for (let i = 1; i <= 10; i++) { 3 | console.log(i); 4 | } 5 | 6 | // Print numbers from 10 to 1 using while loop 7 | let j = 10; 8 | while (j > 0) { 9 | console.log(j); 10 | j--; 11 | } 12 | 13 | // Create an array of fruits and print each using for loop 14 | const fruits = ["apple", "banana", "orange", "mango"]; 15 | for (let fruit of fruits) { 16 | console.log(fruit); 17 | } 18 | -------------------------------------------------------------------------------- /Kanika/Kanika.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | 3 | const app = express(); 4 | 5 | app.use(express.urlencoded({ extended: true })); 6 | app.use(express.json()); 7 | 8 | app.get("/", (req, res) => { 9 | res.send("

Kanikaaaaaa

"); 10 | }); 11 | 12 | app.listen(8080, () => { 13 | console.log("Server is running on port 8080"); 14 | }); -------------------------------------------------------------------------------- /Kanika/Kanika8thjul.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const app = express(); 3 | const port = 8080; 4 | const result = '

Hello World

'; 5 | 6 | // Kanika's Simple route 7 | app.get('/apple', (req, res) => { 8 | res.send("Hello from the Apple route"); 9 | }); 10 | 11 | // Path parameter route 12 | app.get('/fruit/:type', (req, res) => { 13 | res.send(`You requested information about: ${req.params.type}`); 14 | }); 15 | 16 | // Multiple path parameters 17 | app.get('/fruit/:type/color/:color', (req, res) => { 18 | res.send(`You requested information about: ${req.params.type} with color: ${req.params.color}`); 19 | }); 20 | 21 | // Optional parameters 22 | app.get('/fruit/:type/season/:seasons?', (req, res) => { 23 | const season = req.params.seasons ? req.params.seasons : 'any season'; 24 | res.send(`You requested information about: ${req.params.type} in ${season}`); 25 | }); 26 | 27 | // Query parameter route 28 | app.get('/search', (req, res) => { 29 | res.send(`You searched for: ${req.query.q}`); 30 | }); 31 | 32 | // Chat route 33 | app.get('/chat', (req, res) => { 34 | res.send("Hello from the Chat route"); 35 | }); 36 | 37 | app.listen(port, () => { 38 | console.log(`Kanika's app is listening at port ${port}`); 39 | }); 40 | -------------------------------------------------------------------------------- /Kanika/kanika-as3.js: -------------------------------------------------------------------------------- 1 | function checkNumber(number) { 2 | if (number > 0) { 3 | console.log("The number is positive."); 4 | } else if (number < 0) { 5 | console.log("The number is negative."); 6 | } else { 7 | console.log("The number is zero."); 8 | } 9 | } 10 | 11 | // Example usage 12 | checkNumber(5); // Output: The number is positive. 13 | checkNumber(-2); // Output: The number is negative. 14 | checkNumber(0); // Output: The number is zero. 15 | 16 | 17 | function greetByTime() { 18 | const currentHour = new Date().getHours(); // Get current hour (0-23) 19 | 20 | if (currentHour >= 5 && currentHour < 12) { 21 | console.log("Good morning!"); 22 | } else if (currentHour >= 12 && currentHour < 17) { 23 | console.log("Good afternoon!"); 24 | } else { 25 | console.log("Good evening!"); 26 | } 27 | } 28 | 29 | // Example usage 30 | greetByTime(); // Output will vary depending on the current time 31 | -------------------------------------------------------------------------------- /Kanika/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "teaching", 3 | "version": "1.0.0", 4 | "description": "---", 5 | "main": "Kanika-as2.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "express": "^4.19.2" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Mediquity-main.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vinaytheprogrammer/Teaching/d83414211d00f5de48ecbdcaecdd9b32ed83a568/Mediquity-main.zip -------------------------------------------------------------------------------- /PayalDabas/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /PayalDabas/5thjuly.js: -------------------------------------------------------------------------------- 1 | // Import the express module 2 | const express = require("express"); 3 | 4 | // Create an instance of express 5 | const app = express(); 6 | 7 | // Middleware to parse URL-encoded data (form data) with the extended option set to true 8 | app.use(express.urlencoded({ extended: true })); 9 | 10 | // Middleware to parse JSON data 11 | app.use(express.json()); 12 | 13 | // Define a GET route at the root path ("/") 14 | app.get("/", (req, res) => { 15 | // Send an HTML response with a heading 16 | res.send("

Payal Dabas

"); 17 | }); 18 | 19 | // Start the server and listen on port 8080 20 | app.listen(8080, () => { 21 | // Log a message to the console indicating the server is running 22 | console.log("Server is running on port 8080"); 23 | }); 24 | -------------------------------------------------------------------------------- /PayalDabas/8thjuly.js: -------------------------------------------------------------------------------- 1 | // Import the express module 2 | const express = require("express"); 3 | 4 | // Create an instance of express 5 | const app = express(); 6 | 7 | // Define the port number where the server will listen 8 | let port = 8080; 9 | let result = '

Hello World

'; 10 | 11 | // Simple route example 12 | app.get('/apple', (req, res) => { 13 | res.send("Hello from Apple route"); 14 | }); 15 | 16 | // Route with a path parameter 17 | app.get('/fruit/:type', (req, res) => { 18 | const fruitType = req.params.type; 19 | res.send(`you requested information about: ${fruitType}`); 20 | }); 21 | 22 | // Route with multiple path parameters 23 | app.get('/fruit/:type/color/:color', (req, res) => { 24 | const fruitType = req.params.type; 25 | const color = req.params.color; 26 | res.send(`you requested information about: ${fruitType}" with color: ${color}`); 27 | }); 28 | 29 | // Route with optional parameters 30 | app.get('/fruit/:type/season/:seasons?', (req, res) => { 31 | const fruitType = req.params.type; 32 | const season = req.params.season ? req.params.season : 'any season'; 33 | res.send(`you requested information about: ${fruitType} in ${season}`); 34 | }); 35 | 36 | // Route with a query parameter 37 | app.get('/search', (req, res) => { 38 | const query = req.query.q; 39 | res.send(`You searched for: ${query}`); 40 | }); 41 | 42 | // General chat route 43 | app.get('/chat', (req, res) =>{ 44 | res.send("Hello from Chat route"); 45 | }); 46 | 47 | app.listen(port, () => { 48 | console.log(`app is listening at ${port}`); 49 | }); -------------------------------------------------------------------------------- /PayalDabas/file.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vinaytheprogrammer/Teaching/d83414211d00f5de48ecbdcaecdd9b32ed83a568/PayalDabas/file.js -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | 4 | # Teaching Repository 5 | 6 | ## Instructions 7 | 8 | 1. **Clone the Repository:** 9 | ```sh 10 | git clone https://github.com/vinaytheprogrammer/Teaching.git 11 | cd Teaching 12 | ``` 13 | 14 | 2. **Create a Directory for the Assignment:** 15 | - For assignment 1, create a directory named `ans1`. 16 | 17 | 3. **Create a File for Your Answers:** 18 | - Inside the `ans1` directory, create a file with your name (e.g., `vinay_gupta.js`). 19 | 20 | 4. **Submit Your Answers:** 21 | - Write and save your answers in the file created in the previous step. 22 | 23 | ## Example 24 | 25 | 1. **Clone the Repository:** 26 | ```sh 27 | git clone https://github.com/vinaytheprogrammer/Teaching.git 28 | cd Teaching 29 | ``` 30 | 31 | 2. **Create Directory for Assignment 1:** 32 | ```sh 33 | mkdir ans1 34 | cd ans1 35 | ``` 36 | 37 | 3. **Create Your Answer File:** 38 | ```sh 39 | touch vinay_gupta.js 40 | ``` 41 | 42 | 4. **Write Your Answers:** 43 | - Open `vinay_gupta.js` in your preferred code editor. 44 | - Write your answers and save the file. 45 | 46 | ## Contributing 47 | 48 | 1. Fork the repository. 49 | 2. Create your feature branch (`git checkout -b feature/your-feature`). 50 | 3. Commit your changes (`git commit -m 'Add some feature'`). 51 | 4. Push to the branch (`git push origin feature/your-feature`). 52 | 5. Open a pull request. 53 | 54 | --- 55 | 56 | ### Example of `vinay_gupta.js` 57 | 58 | ```javascript 59 | // Question 1: Write a function to add two numbers. 60 | function add(a, b) { 61 | return a + b; 62 | } 63 | 64 | console.log(add(2, 3)); // Output: 5 65 | ``` 66 | 67 | --- 68 | 69 | Follow these steps to ensure your work is properly organized and submitted. If you have any questions or need further assistance, feel free to contact me. 70 | 71 | -------------------------------------------------------------------------------- /Rithik/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /Rithik/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | 3 | const app = express(); 4 | 5 | app.use(express.urlencoded({ extended: true })); 6 | app.use(express.json()); 7 | 8 | app.get("/", (req, res) => { 9 | res.send("

Rithik

"); 10 | }); 11 | 12 | app.listen(5001, () => { 13 | console.log("Server is running on port 5001"); 14 | }); 15 | -------------------------------------------------------------------------------- /Rithik/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "description": "Learning Backend ", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Rithik Yadav", 10 | "license": "ISC", 11 | "dependencies": { 12 | "express": "^4.19.2", 13 | "nodemon": "^3.1.4" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /chinmay branch/chinmay.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vinaytheprogrammer/Teaching/d83414211d00f5de48ecbdcaecdd9b32ed83a568/chinmay branch/chinmay.js -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /example/Practical1/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /example/Practical1/app.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const app = express(); 3 | const port = 3000; 4 | 5 | app.set('view engine', 'ejs'); 6 | app.use(express.static('public')); 7 | 8 | const items = ['Item 1', 'Item 2', 'Item 3']; 9 | 10 | app.get('/', (req, res) => { 11 | res.render('pages/items', { items: items }); 12 | }); 13 | 14 | app.listen(port, () => { 15 | console.log(`Server is running at http://localhost:${port}`); 16 | }); 17 | -------------------------------------------------------------------------------- /example/Practical1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "ejs": "^3.1.10", 4 | "express": "^4.19.2", 5 | "path": "^0.12.7" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /example/Practical1/public/css/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Arial, sans-serif; 3 | margin: 0; 4 | padding: 0; 5 | background-color: #f4f4f4; 6 | } 7 | 8 | header { 9 | background-color: #333; 10 | color: #fff; 11 | padding: 1rem; 12 | text-align: center; 13 | } 14 | 15 | main { 16 | padding: 1rem; 17 | } 18 | 19 | ul { 20 | list-style-type: none; 21 | padding: 0; 22 | } 23 | 24 | li { 25 | background: #fff; 26 | margin: 0.5rem 0; 27 | padding: 1rem; 28 | border: 1px solid #ccc; 29 | } 30 | -------------------------------------------------------------------------------- /example/Practical1/views/pages/items.ejs: -------------------------------------------------------------------------------- 1 | <%- include('../partials/header') %> 2 |
3 | 8 |
9 | 10 | 11 | -------------------------------------------------------------------------------- /example/Practical1/views/partials/header.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Items List 8 | 9 | 10 |
11 |

Items List

12 |
13 | -------------------------------------------------------------------------------- /example/Practical2/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /example/Practical2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "ejs": "^3.1.10", 4 | "express": "^4.19.2", 5 | "path": "^0.12.7" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /example/Practical2/public/css/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Arial, sans-serif; 3 | margin: 0; 4 | padding: 0; 5 | background-color: #f4f4f4; 6 | } 7 | 8 | header { 9 | background-color: #333; 10 | color: #fff; 11 | padding: 1rem; 12 | text-align: center; 13 | } 14 | 15 | nav a { 16 | color: #fff; 17 | margin: 0 1rem; 18 | text-decoration: none; 19 | } 20 | 21 | main { 22 | padding: 1rem; 23 | } 24 | 25 | ul { 26 | list-style-type: none; 27 | padding: 0; 28 | } 29 | 30 | li { 31 | background: #fff; 32 | margin: 0.5rem 0; 33 | padding: 1rem; 34 | border: 1px solid #ccc; 35 | } 36 | 37 | footer { 38 | background-color: #333; 39 | color: #fff; 40 | padding: 1rem; 41 | text-align: center; 42 | position: absolute; 43 | bottom: 0; 44 | width: 100%; 45 | } 46 | -------------------------------------------------------------------------------- /example/Practical2/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const app = express(); 3 | const port = 3000; 4 | 5 | app.set('view engine', 'ejs'); 6 | app.use(express.static('public')); 7 | 8 | const posts = [ 9 | { id: 1, title: 'Post 1', content: 'This is the content of post 1.' }, 10 | { id: 2, title: 'Post 2', content: 'This is the content of post 2.' }, 11 | { id: 3, title: 'Post 3', content: 'This is the content of post 3.' } 12 | ]; 13 | 14 | app.get('/', (req, res) => { 15 | res.render('pages/index', { posts: posts }); 16 | }); 17 | 18 | app.get('/post/:id', (req, res) => { 19 | const post = posts.find(p => p.id == req.params.id); 20 | if (post) { 21 | res.render('pages/post', { post: post }); 22 | } else { 23 | res.status(404).send('Post not found'); 24 | } 25 | }); 26 | 27 | app.listen(port, () => { 28 | console.log(`Server is running at http://localhost:${port}`); 29 | }); 30 | -------------------------------------------------------------------------------- /example/Practical2/views/pages/index.ejs: -------------------------------------------------------------------------------- 1 | <%- include('../partials/header') %> 2 |
3 | 11 |
12 | <%- include('../partials/footer') %> 13 | -------------------------------------------------------------------------------- /example/Practical2/views/pages/post.ejs: -------------------------------------------------------------------------------- 1 | <%- include('../partials/header') %> 2 |
3 |
4 |

<%= post.title %>

5 |

<%= post.content %>

6 | Back to Home 7 |
8 |
9 | <%- include('../partials/footer') %> 10 | -------------------------------------------------------------------------------- /example/Practical2/views/partials/footer.ejs: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /example/Practical2/views/partials/header.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Instagram EJS Example 8 | 9 | 10 |
11 |

Instagram EJS Example

12 | 15 |
16 | -------------------------------------------------------------------------------- /example/ninthjuly/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /example/ninthjuly/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "ejs": "^3.1.10", 4 | "express": "^4.19.2", 5 | "path": "^0.12.7" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /example/ninthjuly/server.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const app = express(); 3 | const path = require("path"); 4 | const port = 8000; 5 | 6 | app.set("view engine", "ejs"); 7 | app.set("views", path.join(__dirname, "/views")); 8 | 9 | app.get('/', (req, res) => { 10 | let diceVal = Math.floor(Math.random() * 6) + 1; 11 | res.render("index.ejs", {diceVal}); 12 | }); 13 | 14 | app.listen(port, () => { 15 | console.log(`listening to port ${port}`); 16 | }); 17 | 18 | 19 | -------------------------------------------------------------------------------- /example/ninthjuly/views/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Welcome Page 7 | 26 | 27 | 28 |
29 |

Welcome! <%= " codingBits".toUpperCase() %>

30 |

We're glad to have you here.

31 |
32 | 33 | 34 |

Dice value : <%= diceVal %>

35 | 36 | 37 | -------------------------------------------------------------------------------- /vinay/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /vinay/BlogsWeb/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /vinay/BlogsWeb/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BlogsWeb", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "body-parser": "^1.20.2", 9 | "ejs": "^3.1.10", 10 | "express": "^4.19.2" 11 | } 12 | }, 13 | "node_modules/accepts": { 14 | "version": "1.3.8", 15 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 16 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 17 | "dependencies": { 18 | "mime-types": "~2.1.34", 19 | "negotiator": "0.6.3" 20 | }, 21 | "engines": { 22 | "node": ">= 0.6" 23 | } 24 | }, 25 | "node_modules/ansi-styles": { 26 | "version": "4.3.0", 27 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 28 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 29 | "dependencies": { 30 | "color-convert": "^2.0.1" 31 | }, 32 | "engines": { 33 | "node": ">=8" 34 | }, 35 | "funding": { 36 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 37 | } 38 | }, 39 | "node_modules/array-flatten": { 40 | "version": "1.1.1", 41 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 42 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 43 | }, 44 | "node_modules/async": { 45 | "version": "3.2.5", 46 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", 47 | "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" 48 | }, 49 | "node_modules/balanced-match": { 50 | "version": "1.0.2", 51 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 52 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 53 | }, 54 | "node_modules/body-parser": { 55 | "version": "1.20.2", 56 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", 57 | "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", 58 | "dependencies": { 59 | "bytes": "3.1.2", 60 | "content-type": "~1.0.5", 61 | "debug": "2.6.9", 62 | "depd": "2.0.0", 63 | "destroy": "1.2.0", 64 | "http-errors": "2.0.0", 65 | "iconv-lite": "0.4.24", 66 | "on-finished": "2.4.1", 67 | "qs": "6.11.0", 68 | "raw-body": "2.5.2", 69 | "type-is": "~1.6.18", 70 | "unpipe": "1.0.0" 71 | }, 72 | "engines": { 73 | "node": ">= 0.8", 74 | "npm": "1.2.8000 || >= 1.4.16" 75 | } 76 | }, 77 | "node_modules/brace-expansion": { 78 | "version": "1.1.11", 79 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 80 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 81 | "dependencies": { 82 | "balanced-match": "^1.0.0", 83 | "concat-map": "0.0.1" 84 | } 85 | }, 86 | "node_modules/bytes": { 87 | "version": "3.1.2", 88 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 89 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 90 | "engines": { 91 | "node": ">= 0.8" 92 | } 93 | }, 94 | "node_modules/call-bind": { 95 | "version": "1.0.7", 96 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", 97 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", 98 | "dependencies": { 99 | "es-define-property": "^1.0.0", 100 | "es-errors": "^1.3.0", 101 | "function-bind": "^1.1.2", 102 | "get-intrinsic": "^1.2.4", 103 | "set-function-length": "^1.2.1" 104 | }, 105 | "engines": { 106 | "node": ">= 0.4" 107 | }, 108 | "funding": { 109 | "url": "https://github.com/sponsors/ljharb" 110 | } 111 | }, 112 | "node_modules/chalk": { 113 | "version": "4.1.2", 114 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 115 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 116 | "dependencies": { 117 | "ansi-styles": "^4.1.0", 118 | "supports-color": "^7.1.0" 119 | }, 120 | "engines": { 121 | "node": ">=10" 122 | }, 123 | "funding": { 124 | "url": "https://github.com/chalk/chalk?sponsor=1" 125 | } 126 | }, 127 | "node_modules/color-convert": { 128 | "version": "2.0.1", 129 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 130 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 131 | "dependencies": { 132 | "color-name": "~1.1.4" 133 | }, 134 | "engines": { 135 | "node": ">=7.0.0" 136 | } 137 | }, 138 | "node_modules/color-name": { 139 | "version": "1.1.4", 140 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 141 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 142 | }, 143 | "node_modules/concat-map": { 144 | "version": "0.0.1", 145 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 146 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 147 | }, 148 | "node_modules/content-disposition": { 149 | "version": "0.5.4", 150 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 151 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 152 | "dependencies": { 153 | "safe-buffer": "5.2.1" 154 | }, 155 | "engines": { 156 | "node": ">= 0.6" 157 | } 158 | }, 159 | "node_modules/content-type": { 160 | "version": "1.0.5", 161 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 162 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 163 | "engines": { 164 | "node": ">= 0.6" 165 | } 166 | }, 167 | "node_modules/cookie": { 168 | "version": "0.6.0", 169 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", 170 | "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", 171 | "engines": { 172 | "node": ">= 0.6" 173 | } 174 | }, 175 | "node_modules/cookie-signature": { 176 | "version": "1.0.6", 177 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 178 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 179 | }, 180 | "node_modules/debug": { 181 | "version": "2.6.9", 182 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 183 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 184 | "dependencies": { 185 | "ms": "2.0.0" 186 | } 187 | }, 188 | "node_modules/define-data-property": { 189 | "version": "1.1.4", 190 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 191 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 192 | "dependencies": { 193 | "es-define-property": "^1.0.0", 194 | "es-errors": "^1.3.0", 195 | "gopd": "^1.0.1" 196 | }, 197 | "engines": { 198 | "node": ">= 0.4" 199 | }, 200 | "funding": { 201 | "url": "https://github.com/sponsors/ljharb" 202 | } 203 | }, 204 | "node_modules/depd": { 205 | "version": "2.0.0", 206 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 207 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 208 | "engines": { 209 | "node": ">= 0.8" 210 | } 211 | }, 212 | "node_modules/destroy": { 213 | "version": "1.2.0", 214 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 215 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 216 | "engines": { 217 | "node": ">= 0.8", 218 | "npm": "1.2.8000 || >= 1.4.16" 219 | } 220 | }, 221 | "node_modules/ee-first": { 222 | "version": "1.1.1", 223 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 224 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 225 | }, 226 | "node_modules/ejs": { 227 | "version": "3.1.10", 228 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", 229 | "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", 230 | "dependencies": { 231 | "jake": "^10.8.5" 232 | }, 233 | "bin": { 234 | "ejs": "bin/cli.js" 235 | }, 236 | "engines": { 237 | "node": ">=0.10.0" 238 | } 239 | }, 240 | "node_modules/encodeurl": { 241 | "version": "1.0.2", 242 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 243 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 244 | "engines": { 245 | "node": ">= 0.8" 246 | } 247 | }, 248 | "node_modules/es-define-property": { 249 | "version": "1.0.0", 250 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", 251 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", 252 | "dependencies": { 253 | "get-intrinsic": "^1.2.4" 254 | }, 255 | "engines": { 256 | "node": ">= 0.4" 257 | } 258 | }, 259 | "node_modules/es-errors": { 260 | "version": "1.3.0", 261 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 262 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 263 | "engines": { 264 | "node": ">= 0.4" 265 | } 266 | }, 267 | "node_modules/escape-html": { 268 | "version": "1.0.3", 269 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 270 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 271 | }, 272 | "node_modules/etag": { 273 | "version": "1.8.1", 274 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 275 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 276 | "engines": { 277 | "node": ">= 0.6" 278 | } 279 | }, 280 | "node_modules/express": { 281 | "version": "4.19.2", 282 | "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", 283 | "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", 284 | "dependencies": { 285 | "accepts": "~1.3.8", 286 | "array-flatten": "1.1.1", 287 | "body-parser": "1.20.2", 288 | "content-disposition": "0.5.4", 289 | "content-type": "~1.0.4", 290 | "cookie": "0.6.0", 291 | "cookie-signature": "1.0.6", 292 | "debug": "2.6.9", 293 | "depd": "2.0.0", 294 | "encodeurl": "~1.0.2", 295 | "escape-html": "~1.0.3", 296 | "etag": "~1.8.1", 297 | "finalhandler": "1.2.0", 298 | "fresh": "0.5.2", 299 | "http-errors": "2.0.0", 300 | "merge-descriptors": "1.0.1", 301 | "methods": "~1.1.2", 302 | "on-finished": "2.4.1", 303 | "parseurl": "~1.3.3", 304 | "path-to-regexp": "0.1.7", 305 | "proxy-addr": "~2.0.7", 306 | "qs": "6.11.0", 307 | "range-parser": "~1.2.1", 308 | "safe-buffer": "5.2.1", 309 | "send": "0.18.0", 310 | "serve-static": "1.15.0", 311 | "setprototypeof": "1.2.0", 312 | "statuses": "2.0.1", 313 | "type-is": "~1.6.18", 314 | "utils-merge": "1.0.1", 315 | "vary": "~1.1.2" 316 | }, 317 | "engines": { 318 | "node": ">= 0.10.0" 319 | } 320 | }, 321 | "node_modules/filelist": { 322 | "version": "1.0.4", 323 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", 324 | "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", 325 | "dependencies": { 326 | "minimatch": "^5.0.1" 327 | } 328 | }, 329 | "node_modules/filelist/node_modules/brace-expansion": { 330 | "version": "2.0.1", 331 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 332 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 333 | "dependencies": { 334 | "balanced-match": "^1.0.0" 335 | } 336 | }, 337 | "node_modules/filelist/node_modules/minimatch": { 338 | "version": "5.1.6", 339 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 340 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 341 | "dependencies": { 342 | "brace-expansion": "^2.0.1" 343 | }, 344 | "engines": { 345 | "node": ">=10" 346 | } 347 | }, 348 | "node_modules/finalhandler": { 349 | "version": "1.2.0", 350 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 351 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 352 | "dependencies": { 353 | "debug": "2.6.9", 354 | "encodeurl": "~1.0.2", 355 | "escape-html": "~1.0.3", 356 | "on-finished": "2.4.1", 357 | "parseurl": "~1.3.3", 358 | "statuses": "2.0.1", 359 | "unpipe": "~1.0.0" 360 | }, 361 | "engines": { 362 | "node": ">= 0.8" 363 | } 364 | }, 365 | "node_modules/forwarded": { 366 | "version": "0.2.0", 367 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 368 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 369 | "engines": { 370 | "node": ">= 0.6" 371 | } 372 | }, 373 | "node_modules/fresh": { 374 | "version": "0.5.2", 375 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 376 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 377 | "engines": { 378 | "node": ">= 0.6" 379 | } 380 | }, 381 | "node_modules/function-bind": { 382 | "version": "1.1.2", 383 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 384 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 385 | "funding": { 386 | "url": "https://github.com/sponsors/ljharb" 387 | } 388 | }, 389 | "node_modules/get-intrinsic": { 390 | "version": "1.2.4", 391 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 392 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 393 | "dependencies": { 394 | "es-errors": "^1.3.0", 395 | "function-bind": "^1.1.2", 396 | "has-proto": "^1.0.1", 397 | "has-symbols": "^1.0.3", 398 | "hasown": "^2.0.0" 399 | }, 400 | "engines": { 401 | "node": ">= 0.4" 402 | }, 403 | "funding": { 404 | "url": "https://github.com/sponsors/ljharb" 405 | } 406 | }, 407 | "node_modules/gopd": { 408 | "version": "1.0.1", 409 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 410 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 411 | "dependencies": { 412 | "get-intrinsic": "^1.1.3" 413 | }, 414 | "funding": { 415 | "url": "https://github.com/sponsors/ljharb" 416 | } 417 | }, 418 | "node_modules/has-flag": { 419 | "version": "4.0.0", 420 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 421 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 422 | "engines": { 423 | "node": ">=8" 424 | } 425 | }, 426 | "node_modules/has-property-descriptors": { 427 | "version": "1.0.2", 428 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 429 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 430 | "dependencies": { 431 | "es-define-property": "^1.0.0" 432 | }, 433 | "funding": { 434 | "url": "https://github.com/sponsors/ljharb" 435 | } 436 | }, 437 | "node_modules/has-proto": { 438 | "version": "1.0.3", 439 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", 440 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", 441 | "engines": { 442 | "node": ">= 0.4" 443 | }, 444 | "funding": { 445 | "url": "https://github.com/sponsors/ljharb" 446 | } 447 | }, 448 | "node_modules/has-symbols": { 449 | "version": "1.0.3", 450 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 451 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 452 | "engines": { 453 | "node": ">= 0.4" 454 | }, 455 | "funding": { 456 | "url": "https://github.com/sponsors/ljharb" 457 | } 458 | }, 459 | "node_modules/hasown": { 460 | "version": "2.0.2", 461 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 462 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 463 | "dependencies": { 464 | "function-bind": "^1.1.2" 465 | }, 466 | "engines": { 467 | "node": ">= 0.4" 468 | } 469 | }, 470 | "node_modules/http-errors": { 471 | "version": "2.0.0", 472 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 473 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 474 | "dependencies": { 475 | "depd": "2.0.0", 476 | "inherits": "2.0.4", 477 | "setprototypeof": "1.2.0", 478 | "statuses": "2.0.1", 479 | "toidentifier": "1.0.1" 480 | }, 481 | "engines": { 482 | "node": ">= 0.8" 483 | } 484 | }, 485 | "node_modules/iconv-lite": { 486 | "version": "0.4.24", 487 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 488 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 489 | "dependencies": { 490 | "safer-buffer": ">= 2.1.2 < 3" 491 | }, 492 | "engines": { 493 | "node": ">=0.10.0" 494 | } 495 | }, 496 | "node_modules/inherits": { 497 | "version": "2.0.4", 498 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 499 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 500 | }, 501 | "node_modules/ipaddr.js": { 502 | "version": "1.9.1", 503 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 504 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 505 | "engines": { 506 | "node": ">= 0.10" 507 | } 508 | }, 509 | "node_modules/jake": { 510 | "version": "10.9.1", 511 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", 512 | "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", 513 | "dependencies": { 514 | "async": "^3.2.3", 515 | "chalk": "^4.0.2", 516 | "filelist": "^1.0.4", 517 | "minimatch": "^3.1.2" 518 | }, 519 | "bin": { 520 | "jake": "bin/cli.js" 521 | }, 522 | "engines": { 523 | "node": ">=10" 524 | } 525 | }, 526 | "node_modules/media-typer": { 527 | "version": "0.3.0", 528 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 529 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 530 | "engines": { 531 | "node": ">= 0.6" 532 | } 533 | }, 534 | "node_modules/merge-descriptors": { 535 | "version": "1.0.1", 536 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 537 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 538 | }, 539 | "node_modules/methods": { 540 | "version": "1.1.2", 541 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 542 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 543 | "engines": { 544 | "node": ">= 0.6" 545 | } 546 | }, 547 | "node_modules/mime": { 548 | "version": "1.6.0", 549 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 550 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 551 | "bin": { 552 | "mime": "cli.js" 553 | }, 554 | "engines": { 555 | "node": ">=4" 556 | } 557 | }, 558 | "node_modules/mime-db": { 559 | "version": "1.52.0", 560 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 561 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 562 | "engines": { 563 | "node": ">= 0.6" 564 | } 565 | }, 566 | "node_modules/mime-types": { 567 | "version": "2.1.35", 568 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 569 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 570 | "dependencies": { 571 | "mime-db": "1.52.0" 572 | }, 573 | "engines": { 574 | "node": ">= 0.6" 575 | } 576 | }, 577 | "node_modules/minimatch": { 578 | "version": "3.1.2", 579 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 580 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 581 | "dependencies": { 582 | "brace-expansion": "^1.1.7" 583 | }, 584 | "engines": { 585 | "node": "*" 586 | } 587 | }, 588 | "node_modules/ms": { 589 | "version": "2.0.0", 590 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 591 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 592 | }, 593 | "node_modules/negotiator": { 594 | "version": "0.6.3", 595 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 596 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 597 | "engines": { 598 | "node": ">= 0.6" 599 | } 600 | }, 601 | "node_modules/object-inspect": { 602 | "version": "1.13.2", 603 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", 604 | "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", 605 | "engines": { 606 | "node": ">= 0.4" 607 | }, 608 | "funding": { 609 | "url": "https://github.com/sponsors/ljharb" 610 | } 611 | }, 612 | "node_modules/on-finished": { 613 | "version": "2.4.1", 614 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 615 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 616 | "dependencies": { 617 | "ee-first": "1.1.1" 618 | }, 619 | "engines": { 620 | "node": ">= 0.8" 621 | } 622 | }, 623 | "node_modules/parseurl": { 624 | "version": "1.3.3", 625 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 626 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 627 | "engines": { 628 | "node": ">= 0.8" 629 | } 630 | }, 631 | "node_modules/path-to-regexp": { 632 | "version": "0.1.7", 633 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 634 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 635 | }, 636 | "node_modules/proxy-addr": { 637 | "version": "2.0.7", 638 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 639 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 640 | "dependencies": { 641 | "forwarded": "0.2.0", 642 | "ipaddr.js": "1.9.1" 643 | }, 644 | "engines": { 645 | "node": ">= 0.10" 646 | } 647 | }, 648 | "node_modules/qs": { 649 | "version": "6.11.0", 650 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 651 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 652 | "dependencies": { 653 | "side-channel": "^1.0.4" 654 | }, 655 | "engines": { 656 | "node": ">=0.6" 657 | }, 658 | "funding": { 659 | "url": "https://github.com/sponsors/ljharb" 660 | } 661 | }, 662 | "node_modules/range-parser": { 663 | "version": "1.2.1", 664 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 665 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 666 | "engines": { 667 | "node": ">= 0.6" 668 | } 669 | }, 670 | "node_modules/raw-body": { 671 | "version": "2.5.2", 672 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 673 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 674 | "dependencies": { 675 | "bytes": "3.1.2", 676 | "http-errors": "2.0.0", 677 | "iconv-lite": "0.4.24", 678 | "unpipe": "1.0.0" 679 | }, 680 | "engines": { 681 | "node": ">= 0.8" 682 | } 683 | }, 684 | "node_modules/safe-buffer": { 685 | "version": "5.2.1", 686 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 687 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 688 | "funding": [ 689 | { 690 | "type": "github", 691 | "url": "https://github.com/sponsors/feross" 692 | }, 693 | { 694 | "type": "patreon", 695 | "url": "https://www.patreon.com/feross" 696 | }, 697 | { 698 | "type": "consulting", 699 | "url": "https://feross.org/support" 700 | } 701 | ] 702 | }, 703 | "node_modules/safer-buffer": { 704 | "version": "2.1.2", 705 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 706 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 707 | }, 708 | "node_modules/send": { 709 | "version": "0.18.0", 710 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 711 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 712 | "dependencies": { 713 | "debug": "2.6.9", 714 | "depd": "2.0.0", 715 | "destroy": "1.2.0", 716 | "encodeurl": "~1.0.2", 717 | "escape-html": "~1.0.3", 718 | "etag": "~1.8.1", 719 | "fresh": "0.5.2", 720 | "http-errors": "2.0.0", 721 | "mime": "1.6.0", 722 | "ms": "2.1.3", 723 | "on-finished": "2.4.1", 724 | "range-parser": "~1.2.1", 725 | "statuses": "2.0.1" 726 | }, 727 | "engines": { 728 | "node": ">= 0.8.0" 729 | } 730 | }, 731 | "node_modules/send/node_modules/ms": { 732 | "version": "2.1.3", 733 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 734 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 735 | }, 736 | "node_modules/serve-static": { 737 | "version": "1.15.0", 738 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 739 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 740 | "dependencies": { 741 | "encodeurl": "~1.0.2", 742 | "escape-html": "~1.0.3", 743 | "parseurl": "~1.3.3", 744 | "send": "0.18.0" 745 | }, 746 | "engines": { 747 | "node": ">= 0.8.0" 748 | } 749 | }, 750 | "node_modules/set-function-length": { 751 | "version": "1.2.2", 752 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", 753 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", 754 | "dependencies": { 755 | "define-data-property": "^1.1.4", 756 | "es-errors": "^1.3.0", 757 | "function-bind": "^1.1.2", 758 | "get-intrinsic": "^1.2.4", 759 | "gopd": "^1.0.1", 760 | "has-property-descriptors": "^1.0.2" 761 | }, 762 | "engines": { 763 | "node": ">= 0.4" 764 | } 765 | }, 766 | "node_modules/setprototypeof": { 767 | "version": "1.2.0", 768 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 769 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 770 | }, 771 | "node_modules/side-channel": { 772 | "version": "1.0.6", 773 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", 774 | "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", 775 | "dependencies": { 776 | "call-bind": "^1.0.7", 777 | "es-errors": "^1.3.0", 778 | "get-intrinsic": "^1.2.4", 779 | "object-inspect": "^1.13.1" 780 | }, 781 | "engines": { 782 | "node": ">= 0.4" 783 | }, 784 | "funding": { 785 | "url": "https://github.com/sponsors/ljharb" 786 | } 787 | }, 788 | "node_modules/statuses": { 789 | "version": "2.0.1", 790 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 791 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 792 | "engines": { 793 | "node": ">= 0.8" 794 | } 795 | }, 796 | "node_modules/supports-color": { 797 | "version": "7.2.0", 798 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 799 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 800 | "dependencies": { 801 | "has-flag": "^4.0.0" 802 | }, 803 | "engines": { 804 | "node": ">=8" 805 | } 806 | }, 807 | "node_modules/toidentifier": { 808 | "version": "1.0.1", 809 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 810 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 811 | "engines": { 812 | "node": ">=0.6" 813 | } 814 | }, 815 | "node_modules/type-is": { 816 | "version": "1.6.18", 817 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 818 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 819 | "dependencies": { 820 | "media-typer": "0.3.0", 821 | "mime-types": "~2.1.24" 822 | }, 823 | "engines": { 824 | "node": ">= 0.6" 825 | } 826 | }, 827 | "node_modules/unpipe": { 828 | "version": "1.0.0", 829 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 830 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 831 | "engines": { 832 | "node": ">= 0.8" 833 | } 834 | }, 835 | "node_modules/utils-merge": { 836 | "version": "1.0.1", 837 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 838 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 839 | "engines": { 840 | "node": ">= 0.4.0" 841 | } 842 | }, 843 | "node_modules/vary": { 844 | "version": "1.1.2", 845 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 846 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 847 | "engines": { 848 | "node": ">= 0.8" 849 | } 850 | } 851 | } 852 | } 853 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "body-parser": "^1.20.2", 4 | "ejs": "^3.1.10", 5 | "express": "^4.19.2" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/public/css/styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Arial, sans-serif; 3 | margin: 0; 4 | padding: 0; 5 | background-color: #f4f4f4; 6 | } 7 | 8 | header { 9 | background-color: #333; 10 | color: white; 11 | padding: 1rem; 12 | text-align: center; 13 | } 14 | 15 | nav ul { 16 | list-style-type: none; 17 | padding: 0; 18 | } 19 | 20 | nav ul li { 21 | display: inline; 22 | margin-right: 10px; 23 | } 24 | 25 | nav ul li a { 26 | color: white; 27 | text-decoration: none; 28 | } 29 | 30 | .container { 31 | margin: 2rem; 32 | padding: 1rem; 33 | background-color: white; 34 | border-radius: 5px; 35 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); 36 | } 37 | 38 | h2 { 39 | margin-top: 0; 40 | } 41 | 42 | form { 43 | margin-top: 1rem; 44 | } 45 | 46 | form label { 47 | display: block; 48 | margin-bottom: 0.5rem; 49 | } 50 | 51 | form input, form textarea { 52 | width: 100%; 53 | padding: 0.5rem; 54 | margin-bottom: 1rem; 55 | border: 1px solid #ccc; 56 | border-radius: 4px; 57 | } 58 | 59 | form button { 60 | padding: 0.5rem 1rem; 61 | background-color: #333; 62 | color: white; 63 | border: none; 64 | border-radius: 4px; 65 | cursor: pointer; 66 | } 67 | 68 | form button:hover { 69 | background-color: #555; 70 | } 71 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/public/js/scripts.js: -------------------------------------------------------------------------------- 1 | // Currently, no JavaScript is required for this basic implementation. 2 | // This file is included for future enhancements and interactivity. 3 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/routes/comments.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | 4 | // Sample posts and comments data (in real scenario, this might come from a database) 5 | let posts = [ 6 | { id: 1, title: 'First Post' }, 7 | { id: 2, title: 'Second Post' } 8 | ]; 9 | 10 | let comments = []; 11 | 12 | // Route to render the form for adding a new comment to a post 13 | router.get('/posts/:postId/comments/new', (req, res) => { 14 | const postId = parseInt(req.params.postId); 15 | const post = posts.find(post => post.id === postId); 16 | if (!post) { 17 | res.status(404).send('Post not found'); 18 | return; 19 | } 20 | res.render('posts/comments/new', { post }); 21 | }); 22 | 23 | // Route to handle adding a new comment to a post 24 | router.post('/posts/:postId/comments', (req, res) => { 25 | const postId = parseInt(req.params.postId); 26 | const post = posts.find(post => post.id === postId); 27 | if (!post) { 28 | res.status(404).send('Post not found'); 29 | return; 30 | } 31 | const newComment = { content: req.body.content }; 32 | comments.push(newComment); // In a real scenario, save to database 33 | res.redirect(`/posts/${postId}`); 34 | }); 35 | 36 | module.exports = router; // Export the router instance 37 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/routes/posts.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | 4 | let posts = []; 5 | let comments = []; 6 | 7 | router.get('/', (req, res) => { 8 | res.render('posts/index', { posts }); 9 | }); 10 | 11 | router.get('/new', (req, res) => { 12 | res.render('posts/new'); 13 | }); 14 | 15 | router.post('/', (req, res) => { 16 | const newPost = { id: Date.now(), title: req.body.title, content: req.body.content }; 17 | posts.push(newPost); 18 | res.redirect('/posts'); 19 | }); 20 | 21 | router.get('/:id', (req, res) => { 22 | const post = posts.find(p => p.id === parseInt(req.params.id)); 23 | const postComments = comments.filter(c => c.postId === post.id); 24 | res.render('posts/show', { post, comments: postComments }); 25 | }); 26 | 27 | router.get('/:id/edit', (req, res) => { 28 | const post = posts.find(p => p.id === parseInt(req.params.id)); 29 | res.render('posts/edit', { post }); 30 | }); 31 | 32 | router.post('/:id', (req, res) => { 33 | const post = posts.find(p => p.id === parseInt(req.params.id)); 34 | post.title = req.body.title; 35 | post.content = req.body.content; 36 | res.redirect('/posts'); 37 | }); 38 | 39 | router.post('/:id/delete', (req, res) => { 40 | posts = posts.filter(p => p.id !== parseInt(req.params.id)); 41 | comments = comments.filter(c => c.postId !== parseInt(req.params.id)); 42 | res.redirect('/posts'); 43 | }); 44 | 45 | module.exports = router; 46 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/routes/users.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | 4 | let users = [ 5 | 6 | ]; 7 | 8 | router.get('/', (req, res) => { 9 | res.render('users/index', { users }); 10 | }); 11 | 12 | router.get('/new', (req, res) => { 13 | res.render('users/new'); 14 | }); 15 | 16 | router.post('/', (req, res) => { 17 | const newUser = { id: Date.now(), name: req.body.name }; 18 | users.push(newUser); 19 | res.redirect('/users'); 20 | }); 21 | 22 | router.get('/:id/edit', (req, res) => { 23 | const user = users.find(u => u.id === parseInt(req.params.id)); 24 | res.render('users/edit', { user }); 25 | }); 26 | 27 | router.post('/:id', (req, res) => { 28 | const user = users.find(u => u.id === parseInt(req.params.id)); 29 | user.name = req.body.name; 30 | res.redirect('/users'); 31 | }); 32 | 33 | router.post('/:id/delete', (req, res) => { 34 | users = users.filter(u => u.id !== parseInt(req.params.id)); 35 | res.redirect('/users'); 36 | }); 37 | 38 | module.exports = router; 39 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const bodyParser = require('body-parser'); 3 | const app = express(); 4 | 5 | app.set('view engine', 'ejs'); 6 | app.use(bodyParser.urlencoded({ extended: true })); 7 | app.use(express.static('public')); 8 | 9 | const userRoutes = require('./routes/users'); 10 | const postRoutes = require('./routes/posts'); 11 | const commentRoutes = require('./routes/comments'); 12 | 13 | app.use('/users', userRoutes); 14 | app.use('/posts', postRoutes); 15 | app.use('/posts/:postId/comments', commentRoutes); 16 | 17 | 18 | app.get('/', (req, res) => { 19 | res.send('Welcome to my blog!'); 20 | }); 21 | 22 | 23 | app.listen(3000, () => { 24 | console.log('Server started on port 3000'); 25 | }); 26 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/layouts/main.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Blog Website 5 | 6 | 7 | 8 | <%- include('../partials/header') %> 9 |
10 | <%- body %> 11 |
12 | <%- include('../partials/footer') %> 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/partials/body.ejs: -------------------------------------------------------------------------------- 1 |

Users

2 | Add New User 3 | 14 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/partials/footer.ejs: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/partials/header.ejs: -------------------------------------------------------------------------------- 1 |
2 |

Blog Website

3 | 9 |
10 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/posts/comments/edit.ejs: -------------------------------------------------------------------------------- 1 | 2 |

Edit Comment

3 |
4 | 5 | 6 | 7 |
8 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/posts/comments/index.ejs: -------------------------------------------------------------------------------- 1 | 2 |

Comments for "<%= post.title %>"

3 | Add New Comment 4 | 15 | Back to Posts 16 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/posts/comments/new.ejs: -------------------------------------------------------------------------------- 1 |

New Comment for <%= post.title %>

2 |
3 | 4 | 5 | 6 |
7 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/posts/edit.ejs: -------------------------------------------------------------------------------- 1 | 2 |

Edit Post

3 |
4 | 5 | 6 | 7 | 8 | 9 |
10 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/posts/index.ejs: -------------------------------------------------------------------------------- 1 | 2 |

Posts

3 | Add New Post 4 | 15 | 16 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/posts/new.ejs: -------------------------------------------------------------------------------- 1 | 2 |

New Post

3 |
4 | 5 | 6 | 7 | 8 | 9 |
10 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/posts/show.ejs: -------------------------------------------------------------------------------- 1 | 2 |

<%= post.title %>

3 |

<%= post.content %>

4 | Edit Post 5 |
6 | 7 |
8 | 9 |

Comments

10 | 21 | Add Comment 22 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/users/edit.ejs: -------------------------------------------------------------------------------- 1 |

Edit User

2 |
3 | 4 | 5 | 6 |
7 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/users/index.ejs: -------------------------------------------------------------------------------- 1 |

Users

2 | Add New User 3 | 14 | -------------------------------------------------------------------------------- /vinay/BlogsWeb/views/users/new.ejs: -------------------------------------------------------------------------------- 1 |

New User

2 |
3 | 4 | 5 | 6 |
7 | -------------------------------------------------------------------------------- /vinay/CORS2_UseCase/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | client/node_modules 3 | .env 4 | build 5 | -------------------------------------------------------------------------------- /vinay/CORS2_UseCase/client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "1.0.0", 4 | "private": true, 5 | "dependencies": { 6 | "axios": "^1.7.2", 7 | "react": "^18.2.0", 8 | "react-dom": "^18.2.0", 9 | "react-scripts": "5.0.1" 10 | }, 11 | "scripts": { 12 | "start": "react-scripts start", 13 | "build": "react-scripts build", 14 | "test": "react-scripts test", 15 | "eject": "react-scripts eject" 16 | }, 17 | "browserslist": { 18 | "production": [ 19 | ">0.2%", 20 | "not dead", 21 | "not op_mini all" 22 | ], 23 | "development": [ 24 | "last 1 chrome version", 25 | "last 1 firefox version", 26 | "last 1 safari version" 27 | ] 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /vinay/CORS2_UseCase/client/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Task Manager 7 | 8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /vinay/CORS2_UseCase/client/src/App.js: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect } from 'react'; 2 | import axios from 'axios'; 3 | 4 | function App() { 5 | const [tasks, setTasks] = useState([]); 6 | const [newTask, setNewTask] = useState(''); 7 | 8 | useEffect(() => { 9 | fetchTasks(); 10 | }, []); 11 | 12 | const fetchTasks = async () => { 13 | const response = await axios.get('http://localhost:5001/api/tasks'); 14 | setTasks(response.data); 15 | }; 16 | 17 | const addTask = async () => { 18 | const response = await axios.post('http://localhost:5001/api/tasks', { title: newTask, completed: false }); 19 | setTasks([...tasks, response.data]); 20 | setNewTask(''); 21 | }; 22 | 23 | const deleteTask = async (id) => { 24 | await axios.delete(`http://localhost:5001/api/tasks/${id}`); 25 | setTasks(tasks.filter(task => task._id !== id)); 26 | }; 27 | 28 | return ( 29 |
30 |

Task Manager

31 | setNewTask(e.target.value)} 35 | placeholder="New Task" 36 | /> 37 | 38 | 46 |
47 | ); 48 | } 49 | 50 | export default App; 51 | -------------------------------------------------------------------------------- /vinay/CORS2_UseCase/client/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | 5 | ReactDOM.render( 6 | 7 | 8 | , 9 | document.getElementById('root') 10 | ); 11 | -------------------------------------------------------------------------------- /vinay/CORS2_UseCase/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CORS2_UseCase", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": {} 6 | } 7 | -------------------------------------------------------------------------------- /vinay/CORS2_UseCase/readme.md: -------------------------------------------------------------------------------- 1 | # MERN CORS Example 2 | 3 | ## Description 4 | A simple MERN stack application demonstrating how to handle CORS (Cross-Origin Resource Sharing). 5 | 6 | ## Getting Started 7 | 8 | ### Prerequisites 9 | - Node.js 10 | - MongoDB 11 | 12 | ### Installing 13 | 14 | 1. Clone the repository: 15 | ```bash 16 | git clone 17 | cd my-mern-project 18 | -------------------------------------------------------------------------------- /vinay/CORS2_UseCase/server/models/Task.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const TaskSchema = new mongoose.Schema({ 4 | title: String, 5 | completed: Boolean, 6 | }); 7 | 8 | const Task = mongoose.model('Task', TaskSchema); 9 | 10 | module.exports = Task; 11 | -------------------------------------------------------------------------------- /vinay/CORS2_UseCase/server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "server", 9 | "version": "1.0.0", 10 | "dependencies": { 11 | "body-parser": "^1.20.2", 12 | "cors": "^2.8.5", 13 | "dotenv": "^16.0.3", 14 | "express": "^4.19.2", 15 | "mongoose": "^8.5.1" 16 | } 17 | }, 18 | "node_modules/@mongodb-js/saslprep": { 19 | "version": "1.1.8", 20 | "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.8.tgz", 21 | "integrity": "sha512-qKwC/M/nNNaKUBMQ0nuzm47b7ZYWQHN3pcXq4IIcoSBc2hOIrflAxJduIvvqmhoz3gR2TacTAs8vlsCVPkiEdQ==", 22 | "dependencies": { 23 | "sparse-bitfield": "^3.0.3" 24 | } 25 | }, 26 | "node_modules/@types/webidl-conversions": { 27 | "version": "7.0.3", 28 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", 29 | "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" 30 | }, 31 | "node_modules/@types/whatwg-url": { 32 | "version": "11.0.5", 33 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", 34 | "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", 35 | "dependencies": { 36 | "@types/webidl-conversions": "*" 37 | } 38 | }, 39 | "node_modules/accepts": { 40 | "version": "1.3.8", 41 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 42 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 43 | "dependencies": { 44 | "mime-types": "~2.1.34", 45 | "negotiator": "0.6.3" 46 | }, 47 | "engines": { 48 | "node": ">= 0.6" 49 | } 50 | }, 51 | "node_modules/array-flatten": { 52 | "version": "1.1.1", 53 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 54 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 55 | }, 56 | "node_modules/body-parser": { 57 | "version": "1.20.2", 58 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", 59 | "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", 60 | "dependencies": { 61 | "bytes": "3.1.2", 62 | "content-type": "~1.0.5", 63 | "debug": "2.6.9", 64 | "depd": "2.0.0", 65 | "destroy": "1.2.0", 66 | "http-errors": "2.0.0", 67 | "iconv-lite": "0.4.24", 68 | "on-finished": "2.4.1", 69 | "qs": "6.11.0", 70 | "raw-body": "2.5.2", 71 | "type-is": "~1.6.18", 72 | "unpipe": "1.0.0" 73 | }, 74 | "engines": { 75 | "node": ">= 0.8", 76 | "npm": "1.2.8000 || >= 1.4.16" 77 | } 78 | }, 79 | "node_modules/bson": { 80 | "version": "6.8.0", 81 | "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", 82 | "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", 83 | "engines": { 84 | "node": ">=16.20.1" 85 | } 86 | }, 87 | "node_modules/bytes": { 88 | "version": "3.1.2", 89 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 90 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 91 | "engines": { 92 | "node": ">= 0.8" 93 | } 94 | }, 95 | "node_modules/call-bind": { 96 | "version": "1.0.7", 97 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", 98 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", 99 | "dependencies": { 100 | "es-define-property": "^1.0.0", 101 | "es-errors": "^1.3.0", 102 | "function-bind": "^1.1.2", 103 | "get-intrinsic": "^1.2.4", 104 | "set-function-length": "^1.2.1" 105 | }, 106 | "engines": { 107 | "node": ">= 0.4" 108 | }, 109 | "funding": { 110 | "url": "https://github.com/sponsors/ljharb" 111 | } 112 | }, 113 | "node_modules/content-disposition": { 114 | "version": "0.5.4", 115 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 116 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 117 | "dependencies": { 118 | "safe-buffer": "5.2.1" 119 | }, 120 | "engines": { 121 | "node": ">= 0.6" 122 | } 123 | }, 124 | "node_modules/content-type": { 125 | "version": "1.0.5", 126 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 127 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 128 | "engines": { 129 | "node": ">= 0.6" 130 | } 131 | }, 132 | "node_modules/cookie": { 133 | "version": "0.6.0", 134 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", 135 | "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", 136 | "engines": { 137 | "node": ">= 0.6" 138 | } 139 | }, 140 | "node_modules/cookie-signature": { 141 | "version": "1.0.6", 142 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 143 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 144 | }, 145 | "node_modules/cors": { 146 | "version": "2.8.5", 147 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 148 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 149 | "dependencies": { 150 | "object-assign": "^4", 151 | "vary": "^1" 152 | }, 153 | "engines": { 154 | "node": ">= 0.10" 155 | } 156 | }, 157 | "node_modules/debug": { 158 | "version": "2.6.9", 159 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 160 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 161 | "dependencies": { 162 | "ms": "2.0.0" 163 | } 164 | }, 165 | "node_modules/define-data-property": { 166 | "version": "1.1.4", 167 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 168 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 169 | "dependencies": { 170 | "es-define-property": "^1.0.0", 171 | "es-errors": "^1.3.0", 172 | "gopd": "^1.0.1" 173 | }, 174 | "engines": { 175 | "node": ">= 0.4" 176 | }, 177 | "funding": { 178 | "url": "https://github.com/sponsors/ljharb" 179 | } 180 | }, 181 | "node_modules/depd": { 182 | "version": "2.0.0", 183 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 184 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 185 | "engines": { 186 | "node": ">= 0.8" 187 | } 188 | }, 189 | "node_modules/destroy": { 190 | "version": "1.2.0", 191 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 192 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 193 | "engines": { 194 | "node": ">= 0.8", 195 | "npm": "1.2.8000 || >= 1.4.16" 196 | } 197 | }, 198 | "node_modules/dotenv": { 199 | "version": "16.4.5", 200 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", 201 | "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", 202 | "engines": { 203 | "node": ">=12" 204 | }, 205 | "funding": { 206 | "url": "https://dotenvx.com" 207 | } 208 | }, 209 | "node_modules/ee-first": { 210 | "version": "1.1.1", 211 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 212 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 213 | }, 214 | "node_modules/encodeurl": { 215 | "version": "1.0.2", 216 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 217 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 218 | "engines": { 219 | "node": ">= 0.8" 220 | } 221 | }, 222 | "node_modules/es-define-property": { 223 | "version": "1.0.0", 224 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", 225 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", 226 | "dependencies": { 227 | "get-intrinsic": "^1.2.4" 228 | }, 229 | "engines": { 230 | "node": ">= 0.4" 231 | } 232 | }, 233 | "node_modules/es-errors": { 234 | "version": "1.3.0", 235 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 236 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 237 | "engines": { 238 | "node": ">= 0.4" 239 | } 240 | }, 241 | "node_modules/escape-html": { 242 | "version": "1.0.3", 243 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 244 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 245 | }, 246 | "node_modules/etag": { 247 | "version": "1.8.1", 248 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 249 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 250 | "engines": { 251 | "node": ">= 0.6" 252 | } 253 | }, 254 | "node_modules/express": { 255 | "version": "4.19.2", 256 | "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", 257 | "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", 258 | "dependencies": { 259 | "accepts": "~1.3.8", 260 | "array-flatten": "1.1.1", 261 | "body-parser": "1.20.2", 262 | "content-disposition": "0.5.4", 263 | "content-type": "~1.0.4", 264 | "cookie": "0.6.0", 265 | "cookie-signature": "1.0.6", 266 | "debug": "2.6.9", 267 | "depd": "2.0.0", 268 | "encodeurl": "~1.0.2", 269 | "escape-html": "~1.0.3", 270 | "etag": "~1.8.1", 271 | "finalhandler": "1.2.0", 272 | "fresh": "0.5.2", 273 | "http-errors": "2.0.0", 274 | "merge-descriptors": "1.0.1", 275 | "methods": "~1.1.2", 276 | "on-finished": "2.4.1", 277 | "parseurl": "~1.3.3", 278 | "path-to-regexp": "0.1.7", 279 | "proxy-addr": "~2.0.7", 280 | "qs": "6.11.0", 281 | "range-parser": "~1.2.1", 282 | "safe-buffer": "5.2.1", 283 | "send": "0.18.0", 284 | "serve-static": "1.15.0", 285 | "setprototypeof": "1.2.0", 286 | "statuses": "2.0.1", 287 | "type-is": "~1.6.18", 288 | "utils-merge": "1.0.1", 289 | "vary": "~1.1.2" 290 | }, 291 | "engines": { 292 | "node": ">= 0.10.0" 293 | } 294 | }, 295 | "node_modules/finalhandler": { 296 | "version": "1.2.0", 297 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 298 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 299 | "dependencies": { 300 | "debug": "2.6.9", 301 | "encodeurl": "~1.0.2", 302 | "escape-html": "~1.0.3", 303 | "on-finished": "2.4.1", 304 | "parseurl": "~1.3.3", 305 | "statuses": "2.0.1", 306 | "unpipe": "~1.0.0" 307 | }, 308 | "engines": { 309 | "node": ">= 0.8" 310 | } 311 | }, 312 | "node_modules/forwarded": { 313 | "version": "0.2.0", 314 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 315 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 316 | "engines": { 317 | "node": ">= 0.6" 318 | } 319 | }, 320 | "node_modules/fresh": { 321 | "version": "0.5.2", 322 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 323 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 324 | "engines": { 325 | "node": ">= 0.6" 326 | } 327 | }, 328 | "node_modules/function-bind": { 329 | "version": "1.1.2", 330 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 331 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 332 | "funding": { 333 | "url": "https://github.com/sponsors/ljharb" 334 | } 335 | }, 336 | "node_modules/get-intrinsic": { 337 | "version": "1.2.4", 338 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 339 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 340 | "dependencies": { 341 | "es-errors": "^1.3.0", 342 | "function-bind": "^1.1.2", 343 | "has-proto": "^1.0.1", 344 | "has-symbols": "^1.0.3", 345 | "hasown": "^2.0.0" 346 | }, 347 | "engines": { 348 | "node": ">= 0.4" 349 | }, 350 | "funding": { 351 | "url": "https://github.com/sponsors/ljharb" 352 | } 353 | }, 354 | "node_modules/gopd": { 355 | "version": "1.0.1", 356 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 357 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 358 | "dependencies": { 359 | "get-intrinsic": "^1.1.3" 360 | }, 361 | "funding": { 362 | "url": "https://github.com/sponsors/ljharb" 363 | } 364 | }, 365 | "node_modules/has-property-descriptors": { 366 | "version": "1.0.2", 367 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 368 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 369 | "dependencies": { 370 | "es-define-property": "^1.0.0" 371 | }, 372 | "funding": { 373 | "url": "https://github.com/sponsors/ljharb" 374 | } 375 | }, 376 | "node_modules/has-proto": { 377 | "version": "1.0.3", 378 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", 379 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", 380 | "engines": { 381 | "node": ">= 0.4" 382 | }, 383 | "funding": { 384 | "url": "https://github.com/sponsors/ljharb" 385 | } 386 | }, 387 | "node_modules/has-symbols": { 388 | "version": "1.0.3", 389 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 390 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 391 | "engines": { 392 | "node": ">= 0.4" 393 | }, 394 | "funding": { 395 | "url": "https://github.com/sponsors/ljharb" 396 | } 397 | }, 398 | "node_modules/hasown": { 399 | "version": "2.0.2", 400 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 401 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 402 | "dependencies": { 403 | "function-bind": "^1.1.2" 404 | }, 405 | "engines": { 406 | "node": ">= 0.4" 407 | } 408 | }, 409 | "node_modules/http-errors": { 410 | "version": "2.0.0", 411 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 412 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 413 | "dependencies": { 414 | "depd": "2.0.0", 415 | "inherits": "2.0.4", 416 | "setprototypeof": "1.2.0", 417 | "statuses": "2.0.1", 418 | "toidentifier": "1.0.1" 419 | }, 420 | "engines": { 421 | "node": ">= 0.8" 422 | } 423 | }, 424 | "node_modules/iconv-lite": { 425 | "version": "0.4.24", 426 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 427 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 428 | "dependencies": { 429 | "safer-buffer": ">= 2.1.2 < 3" 430 | }, 431 | "engines": { 432 | "node": ">=0.10.0" 433 | } 434 | }, 435 | "node_modules/inherits": { 436 | "version": "2.0.4", 437 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 438 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 439 | }, 440 | "node_modules/ipaddr.js": { 441 | "version": "1.9.1", 442 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 443 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 444 | "engines": { 445 | "node": ">= 0.10" 446 | } 447 | }, 448 | "node_modules/kareem": { 449 | "version": "2.6.3", 450 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", 451 | "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", 452 | "engines": { 453 | "node": ">=12.0.0" 454 | } 455 | }, 456 | "node_modules/media-typer": { 457 | "version": "0.3.0", 458 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 459 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 460 | "engines": { 461 | "node": ">= 0.6" 462 | } 463 | }, 464 | "node_modules/memory-pager": { 465 | "version": "1.5.0", 466 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 467 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" 468 | }, 469 | "node_modules/merge-descriptors": { 470 | "version": "1.0.1", 471 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 472 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 473 | }, 474 | "node_modules/methods": { 475 | "version": "1.1.2", 476 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 477 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 478 | "engines": { 479 | "node": ">= 0.6" 480 | } 481 | }, 482 | "node_modules/mime": { 483 | "version": "1.6.0", 484 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 485 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 486 | "bin": { 487 | "mime": "cli.js" 488 | }, 489 | "engines": { 490 | "node": ">=4" 491 | } 492 | }, 493 | "node_modules/mime-db": { 494 | "version": "1.52.0", 495 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 496 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 497 | "engines": { 498 | "node": ">= 0.6" 499 | } 500 | }, 501 | "node_modules/mime-types": { 502 | "version": "2.1.35", 503 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 504 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 505 | "dependencies": { 506 | "mime-db": "1.52.0" 507 | }, 508 | "engines": { 509 | "node": ">= 0.6" 510 | } 511 | }, 512 | "node_modules/mongodb": { 513 | "version": "6.7.0", 514 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.7.0.tgz", 515 | "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==", 516 | "dependencies": { 517 | "@mongodb-js/saslprep": "^1.1.5", 518 | "bson": "^6.7.0", 519 | "mongodb-connection-string-url": "^3.0.0" 520 | }, 521 | "engines": { 522 | "node": ">=16.20.1" 523 | }, 524 | "peerDependencies": { 525 | "@aws-sdk/credential-providers": "^3.188.0", 526 | "@mongodb-js/zstd": "^1.1.0", 527 | "gcp-metadata": "^5.2.0", 528 | "kerberos": "^2.0.1", 529 | "mongodb-client-encryption": ">=6.0.0 <7", 530 | "snappy": "^7.2.2", 531 | "socks": "^2.7.1" 532 | }, 533 | "peerDependenciesMeta": { 534 | "@aws-sdk/credential-providers": { 535 | "optional": true 536 | }, 537 | "@mongodb-js/zstd": { 538 | "optional": true 539 | }, 540 | "gcp-metadata": { 541 | "optional": true 542 | }, 543 | "kerberos": { 544 | "optional": true 545 | }, 546 | "mongodb-client-encryption": { 547 | "optional": true 548 | }, 549 | "snappy": { 550 | "optional": true 551 | }, 552 | "socks": { 553 | "optional": true 554 | } 555 | } 556 | }, 557 | "node_modules/mongodb-connection-string-url": { 558 | "version": "3.0.1", 559 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", 560 | "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", 561 | "dependencies": { 562 | "@types/whatwg-url": "^11.0.2", 563 | "whatwg-url": "^13.0.0" 564 | } 565 | }, 566 | "node_modules/mongoose": { 567 | "version": "8.5.1", 568 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.5.1.tgz", 569 | "integrity": "sha512-OhVcwVl91A1G6+XpjDcpkGP7l7ikZkxa0DylX7NT/lcEqAjggzSdqDxb48A+xsDxqNAr0ntSJ1yiE3+KJTOd5Q==", 570 | "dependencies": { 571 | "bson": "^6.7.0", 572 | "kareem": "2.6.3", 573 | "mongodb": "6.7.0", 574 | "mpath": "0.9.0", 575 | "mquery": "5.0.0", 576 | "ms": "2.1.3", 577 | "sift": "17.1.3" 578 | }, 579 | "engines": { 580 | "node": ">=16.20.1" 581 | }, 582 | "funding": { 583 | "type": "opencollective", 584 | "url": "https://opencollective.com/mongoose" 585 | } 586 | }, 587 | "node_modules/mongoose/node_modules/ms": { 588 | "version": "2.1.3", 589 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 590 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 591 | }, 592 | "node_modules/mpath": { 593 | "version": "0.9.0", 594 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 595 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", 596 | "engines": { 597 | "node": ">=4.0.0" 598 | } 599 | }, 600 | "node_modules/mquery": { 601 | "version": "5.0.0", 602 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", 603 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", 604 | "dependencies": { 605 | "debug": "4.x" 606 | }, 607 | "engines": { 608 | "node": ">=14.0.0" 609 | } 610 | }, 611 | "node_modules/mquery/node_modules/debug": { 612 | "version": "4.3.5", 613 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", 614 | "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", 615 | "dependencies": { 616 | "ms": "2.1.2" 617 | }, 618 | "engines": { 619 | "node": ">=6.0" 620 | }, 621 | "peerDependenciesMeta": { 622 | "supports-color": { 623 | "optional": true 624 | } 625 | } 626 | }, 627 | "node_modules/mquery/node_modules/ms": { 628 | "version": "2.1.2", 629 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 630 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 631 | }, 632 | "node_modules/ms": { 633 | "version": "2.0.0", 634 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 635 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 636 | }, 637 | "node_modules/negotiator": { 638 | "version": "0.6.3", 639 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 640 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 641 | "engines": { 642 | "node": ">= 0.6" 643 | } 644 | }, 645 | "node_modules/object-assign": { 646 | "version": "4.1.1", 647 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 648 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 649 | "engines": { 650 | "node": ">=0.10.0" 651 | } 652 | }, 653 | "node_modules/object-inspect": { 654 | "version": "1.13.2", 655 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", 656 | "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", 657 | "engines": { 658 | "node": ">= 0.4" 659 | }, 660 | "funding": { 661 | "url": "https://github.com/sponsors/ljharb" 662 | } 663 | }, 664 | "node_modules/on-finished": { 665 | "version": "2.4.1", 666 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 667 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 668 | "dependencies": { 669 | "ee-first": "1.1.1" 670 | }, 671 | "engines": { 672 | "node": ">= 0.8" 673 | } 674 | }, 675 | "node_modules/parseurl": { 676 | "version": "1.3.3", 677 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 678 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 679 | "engines": { 680 | "node": ">= 0.8" 681 | } 682 | }, 683 | "node_modules/path-to-regexp": { 684 | "version": "0.1.7", 685 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 686 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 687 | }, 688 | "node_modules/proxy-addr": { 689 | "version": "2.0.7", 690 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 691 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 692 | "dependencies": { 693 | "forwarded": "0.2.0", 694 | "ipaddr.js": "1.9.1" 695 | }, 696 | "engines": { 697 | "node": ">= 0.10" 698 | } 699 | }, 700 | "node_modules/punycode": { 701 | "version": "2.3.1", 702 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 703 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 704 | "engines": { 705 | "node": ">=6" 706 | } 707 | }, 708 | "node_modules/qs": { 709 | "version": "6.11.0", 710 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 711 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 712 | "dependencies": { 713 | "side-channel": "^1.0.4" 714 | }, 715 | "engines": { 716 | "node": ">=0.6" 717 | }, 718 | "funding": { 719 | "url": "https://github.com/sponsors/ljharb" 720 | } 721 | }, 722 | "node_modules/range-parser": { 723 | "version": "1.2.1", 724 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 725 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 726 | "engines": { 727 | "node": ">= 0.6" 728 | } 729 | }, 730 | "node_modules/raw-body": { 731 | "version": "2.5.2", 732 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 733 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 734 | "dependencies": { 735 | "bytes": "3.1.2", 736 | "http-errors": "2.0.0", 737 | "iconv-lite": "0.4.24", 738 | "unpipe": "1.0.0" 739 | }, 740 | "engines": { 741 | "node": ">= 0.8" 742 | } 743 | }, 744 | "node_modules/safe-buffer": { 745 | "version": "5.2.1", 746 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 747 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 748 | "funding": [ 749 | { 750 | "type": "github", 751 | "url": "https://github.com/sponsors/feross" 752 | }, 753 | { 754 | "type": "patreon", 755 | "url": "https://www.patreon.com/feross" 756 | }, 757 | { 758 | "type": "consulting", 759 | "url": "https://feross.org/support" 760 | } 761 | ] 762 | }, 763 | "node_modules/safer-buffer": { 764 | "version": "2.1.2", 765 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 766 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 767 | }, 768 | "node_modules/send": { 769 | "version": "0.18.0", 770 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 771 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 772 | "dependencies": { 773 | "debug": "2.6.9", 774 | "depd": "2.0.0", 775 | "destroy": "1.2.0", 776 | "encodeurl": "~1.0.2", 777 | "escape-html": "~1.0.3", 778 | "etag": "~1.8.1", 779 | "fresh": "0.5.2", 780 | "http-errors": "2.0.0", 781 | "mime": "1.6.0", 782 | "ms": "2.1.3", 783 | "on-finished": "2.4.1", 784 | "range-parser": "~1.2.1", 785 | "statuses": "2.0.1" 786 | }, 787 | "engines": { 788 | "node": ">= 0.8.0" 789 | } 790 | }, 791 | "node_modules/send/node_modules/ms": { 792 | "version": "2.1.3", 793 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 794 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 795 | }, 796 | "node_modules/serve-static": { 797 | "version": "1.15.0", 798 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 799 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 800 | "dependencies": { 801 | "encodeurl": "~1.0.2", 802 | "escape-html": "~1.0.3", 803 | "parseurl": "~1.3.3", 804 | "send": "0.18.0" 805 | }, 806 | "engines": { 807 | "node": ">= 0.8.0" 808 | } 809 | }, 810 | "node_modules/set-function-length": { 811 | "version": "1.2.2", 812 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", 813 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", 814 | "dependencies": { 815 | "define-data-property": "^1.1.4", 816 | "es-errors": "^1.3.0", 817 | "function-bind": "^1.1.2", 818 | "get-intrinsic": "^1.2.4", 819 | "gopd": "^1.0.1", 820 | "has-property-descriptors": "^1.0.2" 821 | }, 822 | "engines": { 823 | "node": ">= 0.4" 824 | } 825 | }, 826 | "node_modules/setprototypeof": { 827 | "version": "1.2.0", 828 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 829 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 830 | }, 831 | "node_modules/side-channel": { 832 | "version": "1.0.6", 833 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", 834 | "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", 835 | "dependencies": { 836 | "call-bind": "^1.0.7", 837 | "es-errors": "^1.3.0", 838 | "get-intrinsic": "^1.2.4", 839 | "object-inspect": "^1.13.1" 840 | }, 841 | "engines": { 842 | "node": ">= 0.4" 843 | }, 844 | "funding": { 845 | "url": "https://github.com/sponsors/ljharb" 846 | } 847 | }, 848 | "node_modules/sift": { 849 | "version": "17.1.3", 850 | "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", 851 | "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" 852 | }, 853 | "node_modules/sparse-bitfield": { 854 | "version": "3.0.3", 855 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 856 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 857 | "dependencies": { 858 | "memory-pager": "^1.0.2" 859 | } 860 | }, 861 | "node_modules/statuses": { 862 | "version": "2.0.1", 863 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 864 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 865 | "engines": { 866 | "node": ">= 0.8" 867 | } 868 | }, 869 | "node_modules/toidentifier": { 870 | "version": "1.0.1", 871 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 872 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 873 | "engines": { 874 | "node": ">=0.6" 875 | } 876 | }, 877 | "node_modules/tr46": { 878 | "version": "4.1.1", 879 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", 880 | "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", 881 | "dependencies": { 882 | "punycode": "^2.3.0" 883 | }, 884 | "engines": { 885 | "node": ">=14" 886 | } 887 | }, 888 | "node_modules/type-is": { 889 | "version": "1.6.18", 890 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 891 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 892 | "dependencies": { 893 | "media-typer": "0.3.0", 894 | "mime-types": "~2.1.24" 895 | }, 896 | "engines": { 897 | "node": ">= 0.6" 898 | } 899 | }, 900 | "node_modules/unpipe": { 901 | "version": "1.0.0", 902 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 903 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 904 | "engines": { 905 | "node": ">= 0.8" 906 | } 907 | }, 908 | "node_modules/utils-merge": { 909 | "version": "1.0.1", 910 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 911 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 912 | "engines": { 913 | "node": ">= 0.4.0" 914 | } 915 | }, 916 | "node_modules/vary": { 917 | "version": "1.1.2", 918 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 919 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 920 | "engines": { 921 | "node": ">= 0.8" 922 | } 923 | }, 924 | "node_modules/webidl-conversions": { 925 | "version": "7.0.0", 926 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 927 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 928 | "engines": { 929 | "node": ">=12" 930 | } 931 | }, 932 | "node_modules/whatwg-url": { 933 | "version": "13.0.0", 934 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", 935 | "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", 936 | "dependencies": { 937 | "tr46": "^4.1.1", 938 | "webidl-conversions": "^7.0.0" 939 | }, 940 | "engines": { 941 | "node": ">=16" 942 | } 943 | } 944 | } 945 | } 946 | -------------------------------------------------------------------------------- /vinay/CORS2_UseCase/server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "body-parser": "^1.20.2", 6 | "cors": "^2.8.5", 7 | "express": "^4.19.2", 8 | "mongoose": "^8.5.1", 9 | "dotenv": "^16.0.3" 10 | }, 11 | "scripts": { 12 | "start": "node server.js" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /vinay/CORS2_UseCase/server/routes/tasks.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | const Task = require('../models/Task'); 4 | 5 | router.get('/', async (req, res) => { 6 | try { 7 | const tasks = await Task.find(); 8 | res.json(tasks); 9 | } catch (error) { 10 | res.status(500).json({ message: error.message }); 11 | } 12 | }); 13 | 14 | router.post('/', async (req, res) => { 15 | try { 16 | const newTask = new Task(req.body); 17 | await newTask.save(); 18 | res.status(201).json(newTask); 19 | } catch (error) { 20 | res.status(400).json({ message: error.message }); 21 | } 22 | }); 23 | 24 | router.put('/:id', async (req, res) => { 25 | try { 26 | const updatedTask = await Task.findByIdAndUpdate(req.params.id, req.body, { new: true }); 27 | res.json(updatedTask); 28 | } catch (error) { 29 | res.status(400).json({ message: error.message }); 30 | } 31 | }); 32 | 33 | router.delete('/:id', async (req, res) => { 34 | try { 35 | await Task.findByIdAndDelete(req.params.id); 36 | res.json({ message: 'Task deleted' }); 37 | } catch (error) { 38 | res.status(500).json({ message: error.message }); 39 | } 40 | }); 41 | 42 | module.exports = router; 43 | -------------------------------------------------------------------------------- /vinay/CORS2_UseCase/server/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const mongoose = require('mongoose'); 3 | const cors = require('cors'); 4 | const bodyParser = require('body-parser'); 5 | const tasksRoute = require('./routes/tasks'); 6 | require('dotenv').config(); 7 | 8 | const app = express(); 9 | 10 | // Middleware 11 | app.use(cors()); 12 | app.use(bodyParser.json()); 13 | 14 | // Connect to MongoDB 15 | mongoose.connect(process.env.MONGODB_URI, { 16 | useNewUrlParser: true, 17 | useUnifiedTopology: true, 18 | }); 19 | 20 | const db = mongoose.connection; 21 | 22 | db.on('error', console.error.bind(console, 'connection error:')); 23 | db.once('open', () => { 24 | console.log('Connected to MongoDB successfully'); 25 | }); 26 | 27 | // Routes 28 | app.use('/api/tasks', tasksRoute); 29 | 30 | const PORT = process.env.PORT || 5001; // Ensure this matches your desired port 31 | app.listen(PORT, () => { 32 | console.log(`Server is running on port ${PORT}`); 33 | }); 34 | -------------------------------------------------------------------------------- /vinay/CORS_UseCase/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | CORS Demo 8 | 19 | 20 | 21 |

CORS Demo

22 | 23 |

24 | 25 | 26 | -------------------------------------------------------------------------------- /vinay/CORS_UseCase/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CORS_UseCase", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "cors": "^2.8.5", 9 | "express": "^4.19.2" 10 | } 11 | }, 12 | "node_modules/accepts": { 13 | "version": "1.3.8", 14 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 15 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 16 | "dependencies": { 17 | "mime-types": "~2.1.34", 18 | "negotiator": "0.6.3" 19 | }, 20 | "engines": { 21 | "node": ">= 0.6" 22 | } 23 | }, 24 | "node_modules/array-flatten": { 25 | "version": "1.1.1", 26 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 27 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 28 | }, 29 | "node_modules/body-parser": { 30 | "version": "1.20.2", 31 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", 32 | "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", 33 | "dependencies": { 34 | "bytes": "3.1.2", 35 | "content-type": "~1.0.5", 36 | "debug": "2.6.9", 37 | "depd": "2.0.0", 38 | "destroy": "1.2.0", 39 | "http-errors": "2.0.0", 40 | "iconv-lite": "0.4.24", 41 | "on-finished": "2.4.1", 42 | "qs": "6.11.0", 43 | "raw-body": "2.5.2", 44 | "type-is": "~1.6.18", 45 | "unpipe": "1.0.0" 46 | }, 47 | "engines": { 48 | "node": ">= 0.8", 49 | "npm": "1.2.8000 || >= 1.4.16" 50 | } 51 | }, 52 | "node_modules/bytes": { 53 | "version": "3.1.2", 54 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 55 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 56 | "engines": { 57 | "node": ">= 0.8" 58 | } 59 | }, 60 | "node_modules/call-bind": { 61 | "version": "1.0.7", 62 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", 63 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", 64 | "dependencies": { 65 | "es-define-property": "^1.0.0", 66 | "es-errors": "^1.3.0", 67 | "function-bind": "^1.1.2", 68 | "get-intrinsic": "^1.2.4", 69 | "set-function-length": "^1.2.1" 70 | }, 71 | "engines": { 72 | "node": ">= 0.4" 73 | }, 74 | "funding": { 75 | "url": "https://github.com/sponsors/ljharb" 76 | } 77 | }, 78 | "node_modules/content-disposition": { 79 | "version": "0.5.4", 80 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 81 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 82 | "dependencies": { 83 | "safe-buffer": "5.2.1" 84 | }, 85 | "engines": { 86 | "node": ">= 0.6" 87 | } 88 | }, 89 | "node_modules/content-type": { 90 | "version": "1.0.5", 91 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 92 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 93 | "engines": { 94 | "node": ">= 0.6" 95 | } 96 | }, 97 | "node_modules/cookie": { 98 | "version": "0.6.0", 99 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", 100 | "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", 101 | "engines": { 102 | "node": ">= 0.6" 103 | } 104 | }, 105 | "node_modules/cookie-signature": { 106 | "version": "1.0.6", 107 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 108 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 109 | }, 110 | "node_modules/cors": { 111 | "version": "2.8.5", 112 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 113 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 114 | "dependencies": { 115 | "object-assign": "^4", 116 | "vary": "^1" 117 | }, 118 | "engines": { 119 | "node": ">= 0.10" 120 | } 121 | }, 122 | "node_modules/debug": { 123 | "version": "2.6.9", 124 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 125 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 126 | "dependencies": { 127 | "ms": "2.0.0" 128 | } 129 | }, 130 | "node_modules/define-data-property": { 131 | "version": "1.1.4", 132 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 133 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 134 | "dependencies": { 135 | "es-define-property": "^1.0.0", 136 | "es-errors": "^1.3.0", 137 | "gopd": "^1.0.1" 138 | }, 139 | "engines": { 140 | "node": ">= 0.4" 141 | }, 142 | "funding": { 143 | "url": "https://github.com/sponsors/ljharb" 144 | } 145 | }, 146 | "node_modules/depd": { 147 | "version": "2.0.0", 148 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 149 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 150 | "engines": { 151 | "node": ">= 0.8" 152 | } 153 | }, 154 | "node_modules/destroy": { 155 | "version": "1.2.0", 156 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 157 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 158 | "engines": { 159 | "node": ">= 0.8", 160 | "npm": "1.2.8000 || >= 1.4.16" 161 | } 162 | }, 163 | "node_modules/ee-first": { 164 | "version": "1.1.1", 165 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 166 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 167 | }, 168 | "node_modules/encodeurl": { 169 | "version": "1.0.2", 170 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 171 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 172 | "engines": { 173 | "node": ">= 0.8" 174 | } 175 | }, 176 | "node_modules/es-define-property": { 177 | "version": "1.0.0", 178 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", 179 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", 180 | "dependencies": { 181 | "get-intrinsic": "^1.2.4" 182 | }, 183 | "engines": { 184 | "node": ">= 0.4" 185 | } 186 | }, 187 | "node_modules/es-errors": { 188 | "version": "1.3.0", 189 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 190 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 191 | "engines": { 192 | "node": ">= 0.4" 193 | } 194 | }, 195 | "node_modules/escape-html": { 196 | "version": "1.0.3", 197 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 198 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 199 | }, 200 | "node_modules/etag": { 201 | "version": "1.8.1", 202 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 203 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 204 | "engines": { 205 | "node": ">= 0.6" 206 | } 207 | }, 208 | "node_modules/express": { 209 | "version": "4.19.2", 210 | "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", 211 | "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", 212 | "dependencies": { 213 | "accepts": "~1.3.8", 214 | "array-flatten": "1.1.1", 215 | "body-parser": "1.20.2", 216 | "content-disposition": "0.5.4", 217 | "content-type": "~1.0.4", 218 | "cookie": "0.6.0", 219 | "cookie-signature": "1.0.6", 220 | "debug": "2.6.9", 221 | "depd": "2.0.0", 222 | "encodeurl": "~1.0.2", 223 | "escape-html": "~1.0.3", 224 | "etag": "~1.8.1", 225 | "finalhandler": "1.2.0", 226 | "fresh": "0.5.2", 227 | "http-errors": "2.0.0", 228 | "merge-descriptors": "1.0.1", 229 | "methods": "~1.1.2", 230 | "on-finished": "2.4.1", 231 | "parseurl": "~1.3.3", 232 | "path-to-regexp": "0.1.7", 233 | "proxy-addr": "~2.0.7", 234 | "qs": "6.11.0", 235 | "range-parser": "~1.2.1", 236 | "safe-buffer": "5.2.1", 237 | "send": "0.18.0", 238 | "serve-static": "1.15.0", 239 | "setprototypeof": "1.2.0", 240 | "statuses": "2.0.1", 241 | "type-is": "~1.6.18", 242 | "utils-merge": "1.0.1", 243 | "vary": "~1.1.2" 244 | }, 245 | "engines": { 246 | "node": ">= 0.10.0" 247 | } 248 | }, 249 | "node_modules/finalhandler": { 250 | "version": "1.2.0", 251 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 252 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 253 | "dependencies": { 254 | "debug": "2.6.9", 255 | "encodeurl": "~1.0.2", 256 | "escape-html": "~1.0.3", 257 | "on-finished": "2.4.1", 258 | "parseurl": "~1.3.3", 259 | "statuses": "2.0.1", 260 | "unpipe": "~1.0.0" 261 | }, 262 | "engines": { 263 | "node": ">= 0.8" 264 | } 265 | }, 266 | "node_modules/forwarded": { 267 | "version": "0.2.0", 268 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 269 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 270 | "engines": { 271 | "node": ">= 0.6" 272 | } 273 | }, 274 | "node_modules/fresh": { 275 | "version": "0.5.2", 276 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 277 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 278 | "engines": { 279 | "node": ">= 0.6" 280 | } 281 | }, 282 | "node_modules/function-bind": { 283 | "version": "1.1.2", 284 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 285 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 286 | "funding": { 287 | "url": "https://github.com/sponsors/ljharb" 288 | } 289 | }, 290 | "node_modules/get-intrinsic": { 291 | "version": "1.2.4", 292 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 293 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 294 | "dependencies": { 295 | "es-errors": "^1.3.0", 296 | "function-bind": "^1.1.2", 297 | "has-proto": "^1.0.1", 298 | "has-symbols": "^1.0.3", 299 | "hasown": "^2.0.0" 300 | }, 301 | "engines": { 302 | "node": ">= 0.4" 303 | }, 304 | "funding": { 305 | "url": "https://github.com/sponsors/ljharb" 306 | } 307 | }, 308 | "node_modules/gopd": { 309 | "version": "1.0.1", 310 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 311 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 312 | "dependencies": { 313 | "get-intrinsic": "^1.1.3" 314 | }, 315 | "funding": { 316 | "url": "https://github.com/sponsors/ljharb" 317 | } 318 | }, 319 | "node_modules/has-property-descriptors": { 320 | "version": "1.0.2", 321 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 322 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 323 | "dependencies": { 324 | "es-define-property": "^1.0.0" 325 | }, 326 | "funding": { 327 | "url": "https://github.com/sponsors/ljharb" 328 | } 329 | }, 330 | "node_modules/has-proto": { 331 | "version": "1.0.3", 332 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", 333 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", 334 | "engines": { 335 | "node": ">= 0.4" 336 | }, 337 | "funding": { 338 | "url": "https://github.com/sponsors/ljharb" 339 | } 340 | }, 341 | "node_modules/has-symbols": { 342 | "version": "1.0.3", 343 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 344 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 345 | "engines": { 346 | "node": ">= 0.4" 347 | }, 348 | "funding": { 349 | "url": "https://github.com/sponsors/ljharb" 350 | } 351 | }, 352 | "node_modules/hasown": { 353 | "version": "2.0.2", 354 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 355 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 356 | "dependencies": { 357 | "function-bind": "^1.1.2" 358 | }, 359 | "engines": { 360 | "node": ">= 0.4" 361 | } 362 | }, 363 | "node_modules/http-errors": { 364 | "version": "2.0.0", 365 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 366 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 367 | "dependencies": { 368 | "depd": "2.0.0", 369 | "inherits": "2.0.4", 370 | "setprototypeof": "1.2.0", 371 | "statuses": "2.0.1", 372 | "toidentifier": "1.0.1" 373 | }, 374 | "engines": { 375 | "node": ">= 0.8" 376 | } 377 | }, 378 | "node_modules/iconv-lite": { 379 | "version": "0.4.24", 380 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 381 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 382 | "dependencies": { 383 | "safer-buffer": ">= 2.1.2 < 3" 384 | }, 385 | "engines": { 386 | "node": ">=0.10.0" 387 | } 388 | }, 389 | "node_modules/inherits": { 390 | "version": "2.0.4", 391 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 392 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 393 | }, 394 | "node_modules/ipaddr.js": { 395 | "version": "1.9.1", 396 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 397 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 398 | "engines": { 399 | "node": ">= 0.10" 400 | } 401 | }, 402 | "node_modules/media-typer": { 403 | "version": "0.3.0", 404 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 405 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 406 | "engines": { 407 | "node": ">= 0.6" 408 | } 409 | }, 410 | "node_modules/merge-descriptors": { 411 | "version": "1.0.1", 412 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 413 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 414 | }, 415 | "node_modules/methods": { 416 | "version": "1.1.2", 417 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 418 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 419 | "engines": { 420 | "node": ">= 0.6" 421 | } 422 | }, 423 | "node_modules/mime": { 424 | "version": "1.6.0", 425 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 426 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 427 | "bin": { 428 | "mime": "cli.js" 429 | }, 430 | "engines": { 431 | "node": ">=4" 432 | } 433 | }, 434 | "node_modules/mime-db": { 435 | "version": "1.52.0", 436 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 437 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 438 | "engines": { 439 | "node": ">= 0.6" 440 | } 441 | }, 442 | "node_modules/mime-types": { 443 | "version": "2.1.35", 444 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 445 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 446 | "dependencies": { 447 | "mime-db": "1.52.0" 448 | }, 449 | "engines": { 450 | "node": ">= 0.6" 451 | } 452 | }, 453 | "node_modules/ms": { 454 | "version": "2.0.0", 455 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 456 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 457 | }, 458 | "node_modules/negotiator": { 459 | "version": "0.6.3", 460 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 461 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 462 | "engines": { 463 | "node": ">= 0.6" 464 | } 465 | }, 466 | "node_modules/object-assign": { 467 | "version": "4.1.1", 468 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 469 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 470 | "engines": { 471 | "node": ">=0.10.0" 472 | } 473 | }, 474 | "node_modules/object-inspect": { 475 | "version": "1.13.2", 476 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", 477 | "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", 478 | "engines": { 479 | "node": ">= 0.4" 480 | }, 481 | "funding": { 482 | "url": "https://github.com/sponsors/ljharb" 483 | } 484 | }, 485 | "node_modules/on-finished": { 486 | "version": "2.4.1", 487 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 488 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 489 | "dependencies": { 490 | "ee-first": "1.1.1" 491 | }, 492 | "engines": { 493 | "node": ">= 0.8" 494 | } 495 | }, 496 | "node_modules/parseurl": { 497 | "version": "1.3.3", 498 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 499 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 500 | "engines": { 501 | "node": ">= 0.8" 502 | } 503 | }, 504 | "node_modules/path-to-regexp": { 505 | "version": "0.1.7", 506 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 507 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 508 | }, 509 | "node_modules/proxy-addr": { 510 | "version": "2.0.7", 511 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 512 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 513 | "dependencies": { 514 | "forwarded": "0.2.0", 515 | "ipaddr.js": "1.9.1" 516 | }, 517 | "engines": { 518 | "node": ">= 0.10" 519 | } 520 | }, 521 | "node_modules/qs": { 522 | "version": "6.11.0", 523 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 524 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 525 | "dependencies": { 526 | "side-channel": "^1.0.4" 527 | }, 528 | "engines": { 529 | "node": ">=0.6" 530 | }, 531 | "funding": { 532 | "url": "https://github.com/sponsors/ljharb" 533 | } 534 | }, 535 | "node_modules/range-parser": { 536 | "version": "1.2.1", 537 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 538 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 539 | "engines": { 540 | "node": ">= 0.6" 541 | } 542 | }, 543 | "node_modules/raw-body": { 544 | "version": "2.5.2", 545 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 546 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 547 | "dependencies": { 548 | "bytes": "3.1.2", 549 | "http-errors": "2.0.0", 550 | "iconv-lite": "0.4.24", 551 | "unpipe": "1.0.0" 552 | }, 553 | "engines": { 554 | "node": ">= 0.8" 555 | } 556 | }, 557 | "node_modules/safe-buffer": { 558 | "version": "5.2.1", 559 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 560 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 561 | "funding": [ 562 | { 563 | "type": "github", 564 | "url": "https://github.com/sponsors/feross" 565 | }, 566 | { 567 | "type": "patreon", 568 | "url": "https://www.patreon.com/feross" 569 | }, 570 | { 571 | "type": "consulting", 572 | "url": "https://feross.org/support" 573 | } 574 | ] 575 | }, 576 | "node_modules/safer-buffer": { 577 | "version": "2.1.2", 578 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 579 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 580 | }, 581 | "node_modules/send": { 582 | "version": "0.18.0", 583 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 584 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 585 | "dependencies": { 586 | "debug": "2.6.9", 587 | "depd": "2.0.0", 588 | "destroy": "1.2.0", 589 | "encodeurl": "~1.0.2", 590 | "escape-html": "~1.0.3", 591 | "etag": "~1.8.1", 592 | "fresh": "0.5.2", 593 | "http-errors": "2.0.0", 594 | "mime": "1.6.0", 595 | "ms": "2.1.3", 596 | "on-finished": "2.4.1", 597 | "range-parser": "~1.2.1", 598 | "statuses": "2.0.1" 599 | }, 600 | "engines": { 601 | "node": ">= 0.8.0" 602 | } 603 | }, 604 | "node_modules/send/node_modules/ms": { 605 | "version": "2.1.3", 606 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 607 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 608 | }, 609 | "node_modules/serve-static": { 610 | "version": "1.15.0", 611 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 612 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 613 | "dependencies": { 614 | "encodeurl": "~1.0.2", 615 | "escape-html": "~1.0.3", 616 | "parseurl": "~1.3.3", 617 | "send": "0.18.0" 618 | }, 619 | "engines": { 620 | "node": ">= 0.8.0" 621 | } 622 | }, 623 | "node_modules/set-function-length": { 624 | "version": "1.2.2", 625 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", 626 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", 627 | "dependencies": { 628 | "define-data-property": "^1.1.4", 629 | "es-errors": "^1.3.0", 630 | "function-bind": "^1.1.2", 631 | "get-intrinsic": "^1.2.4", 632 | "gopd": "^1.0.1", 633 | "has-property-descriptors": "^1.0.2" 634 | }, 635 | "engines": { 636 | "node": ">= 0.4" 637 | } 638 | }, 639 | "node_modules/setprototypeof": { 640 | "version": "1.2.0", 641 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 642 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 643 | }, 644 | "node_modules/side-channel": { 645 | "version": "1.0.6", 646 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", 647 | "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", 648 | "dependencies": { 649 | "call-bind": "^1.0.7", 650 | "es-errors": "^1.3.0", 651 | "get-intrinsic": "^1.2.4", 652 | "object-inspect": "^1.13.1" 653 | }, 654 | "engines": { 655 | "node": ">= 0.4" 656 | }, 657 | "funding": { 658 | "url": "https://github.com/sponsors/ljharb" 659 | } 660 | }, 661 | "node_modules/statuses": { 662 | "version": "2.0.1", 663 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 664 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 665 | "engines": { 666 | "node": ">= 0.8" 667 | } 668 | }, 669 | "node_modules/toidentifier": { 670 | "version": "1.0.1", 671 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 672 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 673 | "engines": { 674 | "node": ">=0.6" 675 | } 676 | }, 677 | "node_modules/type-is": { 678 | "version": "1.6.18", 679 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 680 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 681 | "dependencies": { 682 | "media-typer": "0.3.0", 683 | "mime-types": "~2.1.24" 684 | }, 685 | "engines": { 686 | "node": ">= 0.6" 687 | } 688 | }, 689 | "node_modules/unpipe": { 690 | "version": "1.0.0", 691 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 692 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 693 | "engines": { 694 | "node": ">= 0.8" 695 | } 696 | }, 697 | "node_modules/utils-merge": { 698 | "version": "1.0.1", 699 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 700 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 701 | "engines": { 702 | "node": ">= 0.4.0" 703 | } 704 | }, 705 | "node_modules/vary": { 706 | "version": "1.1.2", 707 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 708 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 709 | "engines": { 710 | "node": ">= 0.8" 711 | } 712 | } 713 | } 714 | } 715 | -------------------------------------------------------------------------------- /vinay/CORS_UseCase/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "cors": "^2.8.5", 4 | "express": "^4.19.2" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /vinay/CORS_UseCase/server.js: -------------------------------------------------------------------------------- 1 | // server.js 2 | const express = require('express'); 3 | const cors = require('cors'); 4 | 5 | const app = express(); 6 | 7 | // Without CORS (comment this out to test without CORS) 8 | app.use(cors()); 9 | 10 | app.get('/api/data', (req, res) => { 11 | res.json({ message: 'Hello from CodingBits!' }); 12 | }); 13 | 14 | const PORT = process.env.PORT || 5002; 15 | app.listen(PORT, () => { 16 | console.log(`Server is running on port ${PORT}`); 17 | }); 18 | -------------------------------------------------------------------------------- /vinay/ExpressRoute/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | package-lock.json -------------------------------------------------------------------------------- /vinay/ExpressRoute/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "express": "^4.19.2" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /vinay/ExpressRoute/routes/posts.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | 4 | router.get('/', (req, res) => { 5 | res.send('List of posts'); 6 | }); 7 | 8 | router.post('/', (req, res) => { 9 | res.send('Create a new post'); 10 | }); 11 | 12 | module.exports = router; 13 | -------------------------------------------------------------------------------- /vinay/ExpressRoute/routes/users.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | 4 | router.get('/', (req, res) => { 5 | res.send('List of users'); 6 | }); 7 | 8 | router.post('/', (req, res) => { 9 | res.send('Create a new user'); 10 | }); 11 | 12 | module.exports = router; 13 | -------------------------------------------------------------------------------- /vinay/ExpressRoute/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const app = express(); 3 | 4 | const userRoutes = require('./routes/users'); 5 | const postRoutes = require('./routes/posts'); 6 | 7 | app.use('/api/users', userRoutes); 8 | app.use('/api/posts', postRoutes); 9 | 10 | app.listen(3001, () => { 11 | console.log('Server is running on port 3001'); 12 | }); 13 | -------------------------------------------------------------------------------- /vinay/GET_POST2/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /vinay/GET_POST2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | 4 | "body-parser": "^1.20.2", 5 | 6 | "ejs": "^3.1.10", 7 | "express": "^4.19.2" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /vinay/GET_POST2/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const bodyParser = require('body-parser'); 3 | const app = express(); 4 | const port = 3000; 5 | 6 | // Set EJS as the view engine 7 | app.set('view engine', 'ejs'); 8 | 9 | // Middleware to parse URL-encoded bodies (for POST requests) 10 | app.use(bodyParser.urlencoded({ extended: true })); 11 | app.use(express.json()); 12 | 13 | // Render the form page 14 | app.get('/', (req, res) => { 15 | res.render('index'); 16 | }); 17 | 18 | // Handle GET request form submission 19 | app.get('/get-form', (req, res) => { 20 | const { username, password } = req.query; 21 | res.send(`GET request received. Username: ${username}, Password: ${password}`); 22 | }); 23 | 24 | // Handle POST request form submission 25 | app.post('/post-form', (req, res) => { 26 | const { username, password } = req.body; 27 | res.send(`POST request received. Username: ${username}, Password: ${password}`); 28 | }); 29 | 30 | app.listen(port, () => { 31 | console.log(`Server is running on http://localhost:${port}`); 32 | }); 33 | -------------------------------------------------------------------------------- /vinay/GET_POST2/views/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Form Example 5 | 6 | 7 |

Form Example

8 | 9 |

GET Form

10 |
11 | 12 |

13 | 14 |

15 | 16 |
17 | 18 |

POST Form

19 |
20 | 21 |

22 | 23 |

24 | 25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /vinay/GET_POST3/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /vinay/GET_POST3/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "body-parser": "^1.20.2", 4 | "ejs": "^3.1.10", 5 | "express": "^4.19.2" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /vinay/GET_POST3/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const app = express(); 3 | const port = 3000; 4 | 5 | app.set('view engine', 'ejs'); 6 | app.use(express.json()); 7 | app.use(express.urlencoded({ extended: true })); 8 | 9 | let items = [ 10 | { id: 1, name: 'Item 1' }, 11 | { id: 2, name: 'Item 2' } 12 | ]; 13 | 14 | // Serve the main page 15 | app.get('/', (req, res) => { 16 | res.render('index', { items }); 17 | }); 18 | 19 | // POST request to create a new item 20 | app.post('/items', (req, res) => { 21 | const newItem = { 22 | id: items.length + 1, 23 | name: req.body.name 24 | }; 25 | 26 | console.log(req.body.name) 27 | items.push(newItem); 28 | res.redirect('/'); 29 | }); 30 | 31 | // PATCH request to update an existing item 32 | app.post('/items/:id/update', (req, res) => { 33 | const item = items.find(i => i.id === parseInt(req.params.id)); 34 | if (item) { 35 | item.name = req.body.name || item.name; 36 | res.redirect('/'); 37 | } else { 38 | res.status(404).send('Item not found'); 39 | } 40 | }); 41 | 42 | // DELETE request to delete an item 43 | app.post('/items/:id/delete', (req, res) => { 44 | const itemIndex = items.findIndex(i => i.id === parseInt(req.params.id)); 45 | if (itemIndex !== -1) { 46 | items.splice(itemIndex, 1); 47 | res.redirect('/'); 48 | } else { 49 | res.status(404).send('Item not found'); 50 | } 51 | }); 52 | 53 | app.listen(port, () => { 54 | console.log(`Server is running on http://localhost:${port}`); 55 | }); 56 | -------------------------------------------------------------------------------- /vinay/GET_POST3/views/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Items List 5 | 6 | 7 |

Items

8 | 22 | 23 |

Add New Item

24 |
25 | 26 | 27 |
28 | 29 | 30 | -------------------------------------------------------------------------------- /vinay/Practice/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /vinay/Practice/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "ejs": "^3.1.10", 4 | "express": "^4.19.2", 5 | "path": "^0.12.7" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /vinay/Practice/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const bodyParser = require('body-parser'); 3 | 4 | const app = express(); 5 | const port = 3000; 6 | 7 | // Middleware to parse JSON bodies 8 | app.use(bodyParser.json()); 9 | app.use(bodyParser.urlencoded({ extended: true })); 10 | 11 | // GET request to the root URL ("/") 12 | app.get('/', (req, res) => { 13 | res.send('Hello, GET request received!'); 14 | }); 15 | 16 | // GET request to "/user" 17 | app.get('/user', (req, res) => { 18 | const sampleUser = { 19 | id: 1, 20 | name: 'Coding bits', 21 | email: 'john.doe@example.com' 22 | }; 23 | res.json(sampleUser); 24 | }); 25 | 26 | // POST request to "/user" 27 | app.post('/user', (req, res) => { 28 | const newUser = req.body; // assuming the request body contains a JSON object with user data 29 | // Here you can add code to save the user to a database or perform other actions 30 | res.json({ 31 | message: 'User created successfully!', 32 | user: newUser 33 | }); 34 | }); 35 | 36 | // Middleware to handle 404 errors 37 | app.use((req, res) => { 38 | res.status(404).send('404 Not Found'); 39 | }); 40 | 41 | // Starting the server 42 | app.listen(port, () => { 43 | console.log(`Server is running on http://localhost:${port}`); 44 | }); 45 | -------------------------------------------------------------------------------- /vinay/Quora/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /vinay/Quora/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const app = express(); 3 | const port = 8080; 4 | const path = require("path"); 5 | const { v4: uuidv4 } = require('uuid'); 6 | const methodOverride = require("method-override"); 7 | 8 | app.use(express.urlencoded({ extended: true })); 9 | app.use(methodOverride('_method')); 10 | app.set("view engine", "ejs"); 11 | app.set("views", path.join(__dirname, "views")); 12 | app.use(express.static(path.join(__dirname, "public"))); 13 | 14 | let posts = [ 15 | { 16 | id: uuidv4(), 17 | username: "Nitjsr", 18 | content: "NIRF is improved" 19 | }, 20 | { 21 | id: uuidv4(), 22 | username: "NitSurat", 23 | content: "NIRF is avg" 24 | } 25 | ]; 26 | 27 | app.get("/posts", (req, res) => { 28 | res.render("index", { posts }); 29 | }); 30 | 31 | app.get("/posts/new", (req, res) => { 32 | res.render("new"); 33 | }); 34 | 35 | app.post("/posts", (req, res) => { 36 | let { username, content } = req.body; 37 | let id = uuidv4(); 38 | posts.push({ id, username, content }); 39 | res.redirect("/posts"); 40 | }); 41 | 42 | app.get("/posts/:id", (req, res) => { 43 | let { id } = req.params; 44 | let post = posts.find((p) => id === p.id); 45 | res.render("show", { post }); 46 | }); 47 | 48 | app.patch("/posts/:id", (req, res) => { 49 | let { id } = req.params; 50 | let newcontent = req.body.content; 51 | let post = posts.find((p) => id === p.id); 52 | post.content = newcontent; 53 | res.send("patch request is working"); 54 | }); 55 | 56 | app.get("/posts/:id/edit", (req, res) => { 57 | let { id } = req.params; 58 | let post = posts.find((p) => id === p.id); 59 | res.render("edit", { post }); 60 | }); 61 | 62 | app.delete("/posts/:id", (req, res) => { 63 | let { id } = req.params; 64 | posts = posts.filter((p) => id !== p.id); 65 | res.redirect("/posts"); 66 | }); 67 | 68 | app.listen(port, () => { 69 | console.log(`listening to port: ${port}`); 70 | }); 71 | -------------------------------------------------------------------------------- /vinay/Quora/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "quora", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "Vinay", 11 | "license": "ISC", 12 | "dependencies": { 13 | "ejs": "^3.1.9", 14 | "express": "^4.18.2", 15 | "method-override": "^3.0.0", 16 | "uuid": "^9.0.1" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /vinay/Quora/public/style.css: -------------------------------------------------------------------------------- 1 | h1{ 2 | color : maroon; 3 | } 4 | 5 | .posts 6 | { 7 | background-color: blanchedalmond; 8 | } 9 | 10 | .user 11 | { 12 | font-style: italic; 13 | } -------------------------------------------------------------------------------- /vinay/Quora/views/edit.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |

Edit your post

7 |

Post ID : <%=post.id%>

8 |

Post Username : @<%=post.username%>

9 |
10 | 11 | 12 |
13 | 14 | -------------------------------------------------------------------------------- /vinay/Quora/views/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |

Quora Posts

7 | <% for(post of posts) { %> 8 |
9 |

@<%= post.username %>

10 |

<%= post.content %>

11 | 12 |
13 | See in Detail 14 | Edit 15 |
16 | 17 |
18 |
19 | <% } 20 | 21 | %> 22 |
23 |
24 | Create New Post 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /vinay/Quora/views/new.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 |

8 |


9 | 10 |
11 | 12 | -------------------------------------------------------------------------------- /vinay/Quora/views/show.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |

Here is your post in details

8 |

Post id: <%= post.id %>

9 |
10 |

@<%=post.username%>

11 |

<%=post.content%>

12 |
13 | 14 | -------------------------------------------------------------------------------- /vinay/Test/readme.md: -------------------------------------------------------------------------------- 1 |

Hi, I'm Vinay Gupta

2 |

3 | 4 |

5 | 6 | 7 |
8 | 9 | 10 | 11 | ## About me 12 | 13 | 14 | 15 |

16 | 17 | - University : I am a Student at [National Institute of Technology, Jamshedpur](https://www.nitjsr.ac.in/). 18 | - Technologist: I love using Software as a solution for every Problem. 19 | - Computer : I am a competitive programmer at Codeforces, Leetcode. 20 | - Student : I’m currently learning Computer Science and Software Engineering. 21 | - Thinking : I’m currently open for a new job opportunity, this is [MY RESUME](https://drive.google.com/file/d/1blY6fKuPUKl58FolQWc1GcD5d-XPWR9q/view?usp=drivesdk). 22 | 23 |
24 | 25 |

vinaytheprogrammer

26 | 27 | ## My Competitive Programming Profiles 28 | 29 |

30 | vinaytheprogrammer 31 | vinaytheprogrammer 32 | vinaytheprogram1 33 | vinaytheprogrammer 34 | 35 | 36 | 38 | 39 |

40 | 41 | 42 | 43 | ## 🛠 My Skills 44 | 45 | ### Programming languages 46 | 47 |

48 | c 49 | cplusplus 50 | java mysql 51 | 52 |

53 | 54 | ### Frontend Development 55 |

56 | html5 57 | css3 58 | bootstrap 59 | react 60 | javascript 61 |

62 | 63 | ### Software & Tools 64 |

65 | aws 66 | git 67 | linux 68 | postman 69 | 70 | vinaytheprogrammer 71 |

72 | 73 | 74 |
75 |

⚡ Stats ⚡

76 |
77 |
78 | streak stats 79 | 80 | readme stats 81 |
82 | top langs 83 |
84 | 85 |

86 | 87 |
88 | 89 |
90 | 91 |
92 |

🐍 My Contributions 🐍

93 |
94 | snake eating my contributions 95 | 96 |


97 |
98 | -------------------------------------------------------------------------------- /vinay/authInMern/client/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /vinay/authInMern/client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@testing-library/jest-dom": "^5.16.1", 7 | "@testing-library/react": "^12.1.2", 8 | "@testing-library/user-event": "^13.5.0", 9 | "axios": "^0.24.0", 10 | "react": "^17.0.2", 11 | "react-dom": "^17.0.2", 12 | "react-router-dom": "^6.2.1", 13 | "react-scripts": "5.0.0", 14 | "web-vitals": "^2.1.2" 15 | }, 16 | "scripts": { 17 | "start": "react-scripts start", 18 | "build": "react-scripts build", 19 | "test": "react-scripts test", 20 | "eject": "react-scripts eject" 21 | }, 22 | "eslintConfig": { 23 | "extends": [ 24 | "react-app", 25 | "react-app/jest" 26 | ] 27 | }, 28 | "browserslist": { 29 | "production": [ 30 | ">0.2%", 31 | "not dead", 32 | "not op_mini all" 33 | ], 34 | "development": [ 35 | "last 1 chrome version", 36 | "last 1 firefox version", 37 | "last 1 safari version" 38 | ] 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /vinay/authInMern/client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vinaytheprogrammer/Teaching/d83414211d00f5de48ecbdcaecdd9b32ed83a568/vinay/authInMern/client/public/favicon.ico -------------------------------------------------------------------------------- /vinay/authInMern/client/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | React App 28 | 29 | 30 | 31 |
32 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /vinay/authInMern/client/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vinaytheprogrammer/Teaching/d83414211d00f5de48ecbdcaecdd9b32ed83a568/vinay/authInMern/client/public/logo192.png -------------------------------------------------------------------------------- /vinay/authInMern/client/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vinaytheprogrammer/Teaching/d83414211d00f5de48ecbdcaecdd9b32ed83a568/vinay/authInMern/client/public/logo512.png -------------------------------------------------------------------------------- /vinay/authInMern/client/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /vinay/authInMern/client/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /vinay/authInMern/client/src/App.js: -------------------------------------------------------------------------------- 1 | import { Route, Routes, Navigate } from "react-router-dom"; 2 | import Main from "./components/Main"; 3 | import Signup from "./components/Singup"; 4 | import Login from "./components/Login"; 5 | 6 | function App() { 7 | const user = localStorage.getItem("token"); 8 | 9 | return ( 10 | 11 | {user && } />} 12 | } /> 13 | } /> 14 | } /> 15 | 16 | ); 17 | } 18 | 19 | export default App; 20 | -------------------------------------------------------------------------------- /vinay/authInMern/client/src/components/Login/index.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from "react"; 2 | import axios from "axios"; 3 | import { Link } from "react-router-dom"; 4 | import styles from "./styles.module.css"; 5 | 6 | const Login = () => { 7 | const [data, setData] = useState({ email: "", password: "" }); 8 | const [error, setError] = useState(""); 9 | 10 | const handleChange = ({ currentTarget: input }) => { 11 | setData({ ...data, [input.name]: input.value }); 12 | }; 13 | 14 | const handleSubmit = async (e) => { 15 | e.preventDefault(); 16 | try { 17 | const url = "http://localhost:8080/api/auth"; 18 | const { data: res } = await axios.post(url, data); 19 | localStorage.setItem("token", res.data); 20 | window.location = "/"; 21 | } catch (error) { 22 | if ( 23 | error.response && 24 | error.response.status >= 400 && 25 | error.response.status <= 500 26 | ) { 27 | setError(error.response.data.message); 28 | } 29 | } 30 | }; 31 | 32 | return ( 33 |
34 |
35 |
36 |
37 |

Login to Your Account

38 | 47 | 56 | {error &&
{error}
} 57 | 60 |
61 |
62 |
63 |

New Here ?

64 | 65 | 68 | 69 |
70 |
71 |
72 | ); 73 | }; 74 | 75 | export default Login; 76 | -------------------------------------------------------------------------------- /vinay/authInMern/client/src/components/Login/styles.module.css: -------------------------------------------------------------------------------- 1 | .login_container { 2 | width: 100%; 3 | min-height: 100vh; 4 | background-color: #f5f5f5; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | } 9 | 10 | .login_form_container { 11 | width: 900px; 12 | height: 500px; 13 | display: flex; 14 | border-radius: 10px; 15 | box-shadow: 0px 3px 3px -2px rgb(0 0 0 / 20%), 16 | 0px 3px 4px 0px rgb(0 0 0 / 14%), 0px 1px 8px 0px rgb(0 0 0 / 12%); 17 | } 18 | 19 | .left { 20 | flex: 2; 21 | display: flex; 22 | flex-direction: column; 23 | align-items: center; 24 | justify-content: center; 25 | background-color: white; 26 | border-top-left-radius: 10px; 27 | border-bottom-left-radius: 10px; 28 | } 29 | 30 | .form_container { 31 | display: flex; 32 | flex-direction: column; 33 | align-items: center; 34 | } 35 | 36 | .form_container h1 { 37 | font-size: 40px; 38 | margin-top: 0; 39 | } 40 | 41 | .input { 42 | outline: none; 43 | border: none; 44 | width: 370px; 45 | padding: 15px; 46 | border-radius: 10px; 47 | background-color: #edf5f3; 48 | margin: 5px 0; 49 | font-size: 14px; 50 | } 51 | 52 | .error_msg { 53 | width: 370px; 54 | padding: 15px; 55 | margin: 5px 0; 56 | font-size: 14px; 57 | background-color: #f34646; 58 | color: white; 59 | border-radius: 5px; 60 | text-align: center; 61 | } 62 | 63 | .right { 64 | flex: 1; 65 | display: flex; 66 | flex-direction: column; 67 | align-items: center; 68 | justify-content: center; 69 | background-color: #3bb19b; 70 | border-top-right-radius: 10px; 71 | border-bottom-right-radius: 10px; 72 | } 73 | 74 | .right h1 { 75 | margin-top: 0; 76 | color: white; 77 | font-size: 40px; 78 | align-self: center; 79 | } 80 | 81 | .white_btn, 82 | .green_btn { 83 | border: none; 84 | outline: none; 85 | padding: 12px 0; 86 | background-color: white; 87 | border-radius: 20px; 88 | width: 180px; 89 | font-weight: bold; 90 | font-size: 14px; 91 | cursor: pointer; 92 | } 93 | 94 | .green_btn { 95 | background-color: #3bb19b; 96 | color: white; 97 | margin: 10px; 98 | } 99 | -------------------------------------------------------------------------------- /vinay/authInMern/client/src/components/Main/index.jsx: -------------------------------------------------------------------------------- 1 | import styles from "./styles.module.css"; 2 | 3 | const Main = () => { 4 | const handleLogout = () => { 5 | localStorage.removeItem("token"); 6 | window.location.reload(); 7 | }; 8 | 9 | return ( 10 |
11 | 17 |
18 | ); 19 | }; 20 | 21 | export default Main; 22 | -------------------------------------------------------------------------------- /vinay/authInMern/client/src/components/Main/styles.module.css: -------------------------------------------------------------------------------- 1 | .navbar { 2 | width: 100%; 3 | height: 70px; 4 | background-color: #3bb19b; 5 | display: flex; 6 | align-items: center; 7 | justify-content: space-between; 8 | } 9 | 10 | .navbar h1 { 11 | color: white; 12 | font-size: 25px; 13 | margin-left: 20px; 14 | } 15 | 16 | .white_btn { 17 | border: none; 18 | outline: none; 19 | padding: 12px 0; 20 | background-color: white; 21 | border-radius: 20px; 22 | width: 120px; 23 | font-weight: bold; 24 | font-size: 14px; 25 | cursor: pointer; 26 | margin-right: 20px; 27 | } 28 | -------------------------------------------------------------------------------- /vinay/authInMern/client/src/components/Singup/index.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from "react"; 2 | import axios from "axios"; 3 | import { Link, useNavigate } from "react-router-dom"; 4 | import styles from "./styles.module.css"; 5 | 6 | const Signup = () => { 7 | const [data, setData] = useState({ 8 | firstName: "", 9 | lastName: "", 10 | email: "", 11 | password: "", 12 | }); 13 | const [error, setError] = useState(""); 14 | const navigate = useNavigate(); 15 | 16 | const handleChange = ({ currentTarget: input }) => { 17 | setData({ ...data, [input.name]: input.value }); 18 | }; 19 | 20 | const handleSubmit = async (e) => { 21 | e.preventDefault(); 22 | try { 23 | const url = "http://localhost:8080/api/users"; 24 | const { data: res } = await axios.post(url, data); 25 | navigate("/login"); 26 | console.log(res.message); 27 | } catch (error) { 28 | if ( 29 | error.response && 30 | error.response.status >= 400 && 31 | error.response.status <= 500 32 | ) { 33 | setError(error.response.data.message); 34 | } 35 | } 36 | }; 37 | 38 | return ( 39 |
40 |
41 |
42 |

Welcome Back

43 | 44 | 47 | 48 |
49 |
50 |
51 |

Create Account

52 | 61 | 70 | 79 | 88 | {error &&
{error}
} 89 | 92 |
93 |
94 |
95 |
96 | ); 97 | }; 98 | 99 | export default Signup; 100 | -------------------------------------------------------------------------------- /vinay/authInMern/client/src/components/Singup/styles.module.css: -------------------------------------------------------------------------------- 1 | .signup_container { 2 | width: 100%; 3 | min-height: 100vh; 4 | background-color: #f5f5f5; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | } 9 | 10 | .signup_form_container { 11 | width: 900px; 12 | height: 500px; 13 | display: flex; 14 | border-radius: 10px; 15 | box-shadow: 0px 3px 3px -2px rgb(0 0 0 / 20%), 16 | 0px 3px 4px 0px rgb(0 0 0 / 14%), 0px 1px 8px 0px rgb(0 0 0 / 12%); 17 | } 18 | 19 | .left { 20 | flex: 1; 21 | display: flex; 22 | flex-direction: column; 23 | align-items: center; 24 | justify-content: center; 25 | background-color: #3bb19b; 26 | border-top-left-radius: 10px; 27 | border-bottom-left-radius: 10px; 28 | } 29 | 30 | .left h1 { 31 | margin-top: 0; 32 | color: white; 33 | font-size: 35px; 34 | align-self: center; 35 | } 36 | 37 | .right { 38 | flex: 2; 39 | display: flex; 40 | flex-direction: column; 41 | align-items: center; 42 | justify-content: center; 43 | background-color: white; 44 | border-top-right-radius: 10px; 45 | border-bottom-right-radius: 10px; 46 | } 47 | 48 | .form_container { 49 | display: flex; 50 | flex-direction: column; 51 | align-items: center; 52 | } 53 | 54 | .form_container h1 { 55 | font-size: 40px; 56 | margin-top: 0; 57 | } 58 | 59 | .input { 60 | outline: none; 61 | border: none; 62 | width: 370px; 63 | padding: 15px; 64 | border-radius: 10px; 65 | background-color: #edf5f3; 66 | margin: 5px 0; 67 | font-size: 14px; 68 | } 69 | 70 | .error_msg { 71 | width: 370px; 72 | padding: 15px; 73 | margin: 5px 0; 74 | font-size: 14px; 75 | background-color: #f34646; 76 | color: white; 77 | border-radius: 5px; 78 | text-align: center; 79 | } 80 | 81 | .white_btn, 82 | .green_btn { 83 | border: none; 84 | outline: none; 85 | padding: 12px 0; 86 | background-color: white; 87 | border-radius: 20px; 88 | width: 180px; 89 | font-weight: bold; 90 | font-size: 14px; 91 | cursor: pointer; 92 | } 93 | 94 | .green_btn { 95 | background-color: #3bb19b; 96 | color: white; 97 | margin: 10px; 98 | } 99 | -------------------------------------------------------------------------------- /vinay/authInMern/client/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", 4 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /vinay/authInMern/client/src/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import { BrowserRouter } from "react-router-dom"; 4 | import "./index.css"; 5 | import App from "./App"; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | 11 | 12 | , 13 | document.getElementById("root") 14 | ); 15 | -------------------------------------------------------------------------------- /vinay/authInMern/server/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /vinay/authInMern/server/db.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | 3 | module.exports = () => { 4 | try { 5 | mongoose.connect(process.env.DB); 6 | console.log("Connected to database successfully"); 7 | } catch (error) { 8 | console.log(error); 9 | console.log("Could not connect to database!"); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /vinay/authInMern/server/index.js: -------------------------------------------------------------------------------- 1 | require("dotenv").config(); 2 | const express = require("express"); 3 | const app = express(); 4 | const cors = require("cors"); 5 | const connection = require("./db"); 6 | const userRoutes = require("./routes/users"); 7 | const authRoutes = require("./routes/auth"); 8 | 9 | // database connection 10 | connection(); 11 | 12 | // middlewares 13 | app.use(express.json()); 14 | app.use(cors()); 15 | 16 | // routes 17 | app.use("/api/users", userRoutes); 18 | app.use("/api/auth", authRoutes); 19 | 20 | const port = process.env.PORT || 8080; 21 | app.listen(port, console.log(`Listening on port ${port}...`)); -------------------------------------------------------------------------------- /vinay/authInMern/server/models/user.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | const jwt = require("jsonwebtoken"); 3 | const Joi = require("joi"); 4 | const passwordComplexity = require("joi-password-complexity"); 5 | 6 | 7 | const crypto = require('crypto'); 8 | const jwtPrivateKey = crypto.randomBytes(32).toString('hex'); 9 | console.log(jwtPrivateKey); 10 | 11 | process.env.JWTPRIVATEKEY=jwtPrivateKey; 12 | 13 | const userSchema = new mongoose.Schema({ 14 | firstName: { type: String, required: true }, 15 | lastName: { type: String, required: true }, 16 | email: { type: String, required: true }, 17 | password: { type: String, required: true }, 18 | }); 19 | 20 | userSchema.methods.generateAuthToken = function () { 21 | const token = jwt.sign({ _id: this._id }, process.env.JWTPRIVATEKEY, { 22 | expiresIn: "7d", 23 | }); 24 | if(token) 25 | console.log("token"); 26 | return token; 27 | }; 28 | 29 | const User = mongoose.model("user", userSchema); 30 | 31 | const validate = (data) => { 32 | const schema = Joi.object({ 33 | firstName: Joi.string().required().label("First Name"), 34 | lastName: Joi.string().required().label("Last Name"), 35 | email: Joi.string().email().required().label("Email"), 36 | password: passwordComplexity().required().label("Password"), 37 | }); 38 | return schema.validate(data); 39 | }; 40 | 41 | module.exports = { User, validate }; -------------------------------------------------------------------------------- /vinay/authInMern/server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "bcrypt": "^5.1.1", 4 | "cors": "^2.8.5", 5 | "crypto": "^1.0.1", 6 | "dotenv": "^16.4.1", 7 | "express": "^4.18.2", 8 | "joi": "^17.12.1", 9 | "joi-password-complexity": "^5.2.0", 10 | "jsonwebtoken": "^9.0.2", 11 | "mongoose": "^8.1.1" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /vinay/authInMern/server/routes/auth.js: -------------------------------------------------------------------------------- 1 | const router = require("express").Router(); 2 | const { User } = require("../models/user"); 3 | const bcrypt = require("bcrypt"); 4 | const Joi = require("joi"); 5 | 6 | router.post("/", async (req, res) => { 7 | try { 8 | const { error } = validate(req.body); 9 | if (error) 10 | return res.status(400).send({ message: error.details[0].message }); 11 | 12 | const user = await User.findOne({ email: req.body.email }); 13 | if (!user) 14 | return res.status(401).send({ message: "Invalid Email or Password" }); 15 | 16 | const validPassword = await bcrypt.compare( 17 | req.body.password, 18 | user.password 19 | ); 20 | if (!validPassword) 21 | return res.status(401).send({ message: "Invalid Email or Password" }); 22 | 23 | const token = user.generateAuthToken(); 24 | res.status(200).send({ data: token, message: "logged in successfully" }); 25 | } catch (error) { 26 | res.status(500).send({ message: "Internal Server Error" }); 27 | } 28 | }); 29 | 30 | const validate = (data) => { 31 | const schema = Joi.object({ 32 | email: Joi.string().email().required().label("Email"), 33 | password: Joi.string().required().label("Password"), 34 | }); 35 | return schema.validate(data); 36 | }; 37 | 38 | module.exports = router; -------------------------------------------------------------------------------- /vinay/authInMern/server/routes/users.js: -------------------------------------------------------------------------------- 1 | const router = require("express").Router(); 2 | const { User, validate } = require("../models/user"); 3 | const bcrypt = require("bcrypt"); 4 | 5 | router.post("/", async (req, res) => { 6 | try { 7 | const { error } = validate(req.body); 8 | if (error) 9 | return res.status(400).send({ message: error.details[0].message }); 10 | 11 | const user = await User.findOne({ email: req.body.email }); 12 | if (user) 13 | return res 14 | .status(409) 15 | .send({ message: "User with given email already Exist!" }); 16 | 17 | const salt = await bcrypt.genSalt(Number(process.env.SALT)); 18 | const hashPassword = await bcrypt.hash(req.body.password, salt); 19 | 20 | await new User({ ...req.body, password: hashPassword }).save(); 21 | res.status(201).send({ message: "User created successfully" }); 22 | } catch (error) { 23 | res.status(500).send({ message: "Internal Server Error" }); 24 | } 25 | }); 26 | 27 | module.exports = router; -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/Noted.txt: -------------------------------------------------------------------------------- 1 | Click on "Import" in the top left corner. 2 | Select the ecommerce_postman_collection.json file. 3 | Click "Import". 4 | After importing, you will see the collection in your Postman, and you can test all the endpoints. 5 | 6 | Notes: 7 | The {{authToken}} variable is a placeholder for the JWT token. After logging in, you should set this variable in Postman to test the protected routes (Add to Cart, Remove from Cart, Get Cart Data). 8 | Replace localhost with the actual host if your server is running on a different machine or port. 9 | This should help you test all your API endpoints easily in Postman! -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/config/db.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const connectDB = async () => { 4 | try { 5 | const conn = await mongoose.connect("mongodb://localhost:27017", { 6 | dbName: "E-Commerce", 7 | }); 8 | console.log(`Database Connected: ${conn.connection.host}`); 9 | } catch (error) { 10 | console.error(`Error: ${error.message}`); 11 | process.exit(1); 12 | } 13 | }; 14 | 15 | module.exports = connectDB; 16 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/controllers/cartController.js: -------------------------------------------------------------------------------- 1 | const User = require('../models/User'); 2 | 3 | exports.addToCart = async (req, res) => { 4 | try { 5 | // Fetch the user by ID from the JWT token 6 | let userData = await User.findOne({ _id: req.user.id }); 7 | 8 | // Check if the item exists in the cart and increment its quantity 9 | if (userData.cartData[req.body.itemId] !== undefined) { 10 | userData.cartData[req.body.itemId] += 1; 11 | } else { 12 | userData.cartData[req.body.itemId] = 1; 13 | } 14 | 15 | // Update the user's cart data 16 | await User.findOneAndUpdate({ _id: req.user.id }, { cartData: userData.cartData }); 17 | 18 | console.log("Product added to cart"); 19 | res.json({ success: true, message: "Product added to cart" }); 20 | } catch (error) { 21 | console.error(error); 22 | res.status(500).json({ success: false, error: "Failed to add product to cart" }); 23 | } 24 | }; 25 | 26 | exports.removeFromCart = async (req, res) => { 27 | try { 28 | // Fetch the user by ID from the JWT token 29 | let userData = await User.findOne({ _id: req.user.id }); 30 | 31 | // Check if the item exists in the cart and decrement its quantity 32 | if (userData.cartData[req.body.itemId] > 0) { 33 | userData.cartData[req.body.itemId] -= 1; 34 | 35 | // If the quantity drops to zero, remove the item from the cart 36 | if (userData.cartData[req.body.itemId] === 0) { 37 | delete userData.cartData[req.body.itemId]; 38 | } 39 | 40 | // Update the user's cart data 41 | await User.findOneAndUpdate({ _id: req.user.id }, { cartData: userData.cartData }); 42 | 43 | console.log("Product removed from cart"); 44 | res.json({ success: true, message: "Product removed from cart" }); 45 | } else { 46 | res.status(400).json({ success: false, error: "Product not found in cart or already removed" }); 47 | } 48 | } catch (error) { 49 | console.error(error); 50 | res.status(500).json({ success: false, error: "Failed to remove product from cart" }); 51 | } 52 | }; 53 | 54 | exports.getCart = async (req, res) => { 55 | try { 56 | // Fetch the user by ID from the JWT token 57 | let userData = await User.findOne({ _id: req.user.id }); 58 | 59 | console.log("Cart data retrieved"); 60 | res.json({ success: true, cartData: userData.cartData }); 61 | } catch (error) { 62 | console.error(error); 63 | res.status(500).json({ success: false, error: "Failed to retrieve cart data" }); 64 | } 65 | }; 66 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/controllers/productController.js: -------------------------------------------------------------------------------- 1 | const Product = require('../models/Product'); 2 | 3 | exports.addProduct = async (req, res) => { 4 | try { 5 | let products = await Product.find({}); 6 | let id; 7 | if (products.length > 0) { 8 | let last_product_array = products.slice(-1); 9 | let last_product = last_product_array[0]; 10 | id = last_product.id + 1; 11 | } else { 12 | id = 1; 13 | } 14 | 15 | const product = new Product({ 16 | id: id, 17 | name: req.body.name, 18 | image: req.body.image, 19 | category: req.body.category, 20 | new_price: req.body.new_price, 21 | old_price: req.body.old_price, 22 | }); 23 | 24 | await product.save(); 25 | console.log("Product Saved"); 26 | 27 | res.json({ 28 | success: true, 29 | name: req.body.name, 30 | }); 31 | } catch (error) { 32 | console.error(error); 33 | res.status(500).json({ success: false, error: "Failed to add product" }); 34 | } 35 | }; 36 | 37 | exports.removeProduct = async (req, res) => { 38 | try { 39 | await Product.findOneAndDelete({ id: req.body.id }); 40 | console.log("Product Removed"); 41 | res.json({ 42 | success: true, 43 | name: req.body.name 44 | }); 45 | } catch (error) { 46 | console.error(error); 47 | res.status(500).json({ success: false, error: "Failed to remove product" }); 48 | } 49 | }; 50 | 51 | exports.getAllProducts = async (req, res) => { 52 | try { 53 | let products = await Product.find({}); 54 | console.log("All Products Fetched"); 55 | res.json(products); 56 | } catch (error) { 57 | console.error(error); 58 | res.status(500).json({ success: false, error: "Failed to fetch products" }); 59 | } 60 | }; 61 | 62 | exports.getNewCollections = async (req, res) => { 63 | try { 64 | let products = await Product.find({}); 65 | let newcollection = products.slice(1).slice(-8); 66 | console.log("New Collection Fetched"); 67 | res.json(newcollection); 68 | } catch (error) { 69 | console.error(error); 70 | res.status(500).json({ success: false, error: "Failed to fetch new collections" }); 71 | } 72 | }; 73 | 74 | exports.getPopularInWomen = async (req, res) => { 75 | try { 76 | let products = await Product.find({ category: "women" }); 77 | let popular_in_women = products.slice(3, 90); 78 | console.log("Popular in Women Fetched"); 79 | res.json(popular_in_women); 80 | } catch (error) { 81 | console.error(error); 82 | res.status(500).json({ success: false, error: "Failed to fetch popular products in women category" }); 83 | } 84 | }; 85 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/controllers/userController.js: -------------------------------------------------------------------------------- 1 | const User = require('../models/User'); 2 | const jwt = require('jsonwebtoken'); 3 | 4 | exports.signup = async (req, res) => { 5 | try { 6 | // Check if a user with the given email already exists 7 | let check = await User.findOne({ email: req.body.email }); 8 | if (check) { 9 | return res.status(400).json({ success: false, errors: "Existing user found with this email address" }); 10 | } 11 | 12 | // Initialize cart data 13 | let cart = {}; 14 | for (let i = 0; i < 300; i++) { 15 | cart[i] = 0; 16 | } 17 | 18 | // Create a new user 19 | const user = new User({ 20 | name: req.body.username, 21 | email: req.body.email, 22 | password: req.body.password, 23 | cartData: cart, 24 | }); 25 | 26 | await user.save(); 27 | console.log("User Registered"); 28 | 29 | // Generate a JWT token 30 | const data = { 31 | user: { 32 | id: user.id 33 | } 34 | }; 35 | const token = jwt.sign(data, 'secret_ecom'); 36 | 37 | // Respond with the token 38 | res.json({ success: true, token }); 39 | } catch (error) { 40 | console.error(error); 41 | res.status(500).json({ success: false, error: "Failed to register user" }); 42 | } 43 | }; 44 | 45 | exports.login = async (req, res) => { 46 | try { 47 | // Find the user by email 48 | let user = await User.findOne({ email: req.body.email }); 49 | if (!user) { 50 | return res.status(400).json({ success: false, error: "Invalid email address" }); 51 | } 52 | 53 | // Compare the password 54 | const passCompare = req.body.password === user.password; 55 | if (!passCompare) { 56 | return res.status(400).json({ success: false, error: "Incorrect password" }); 57 | } 58 | 59 | // Generate a JWT token 60 | const data = { 61 | user: { 62 | id: user.id 63 | } 64 | }; 65 | const token = jwt.sign(data, 'secret_ecom'); 66 | 67 | // Respond with the token 68 | res.json({ success: true, token }); 69 | } catch (error) { 70 | console.error(error); 71 | res.status(500).json({ success: false, error: "Failed to log in" }); 72 | } 73 | }; 74 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/ecommerce_postman_collection.json: -------------------------------------------------------------------------------- 1 | { 2 | "info": { 3 | "name": "E-Commerce API", 4 | "description": "Collection for testing E-Commerce API routes", 5 | "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" 6 | }, 7 | "item": [ 8 | { 9 | "name": "User Signup", 10 | "request": { 11 | "method": "POST", 12 | "header": [], 13 | "body": { 14 | "mode": "raw", 15 | "raw": "{\n \"username\": \"testuser\",\n \"email\": \"testuser@example.com\",\n \"password\": \"password123\"\n}", 16 | "options": { 17 | "raw": { 18 | "language": "json" 19 | } 20 | } 21 | }, 22 | "url": { 23 | "raw": "http://localhost:4000/api/users/signup", 24 | "protocol": "http", 25 | "host": ["localhost"], 26 | "port": "4000", 27 | "path": ["api", "users", "signup"] 28 | } 29 | } 30 | }, 31 | { 32 | "name": "User Login", 33 | "request": { 34 | "method": "POST", 35 | "header": [], 36 | "body": { 37 | "mode": "raw", 38 | "raw": "{\n \"email\": \"testuser@example.com\",\n \"password\": \"password123\"\n}", 39 | "options": { 40 | "raw": { 41 | "language": "json" 42 | } 43 | } 44 | }, 45 | "url": { 46 | "raw": "http://localhost:4000/api/users/login", 47 | "protocol": "http", 48 | "host": ["localhost"], 49 | "port": "4000", 50 | "path": ["api", "users", "login"] 51 | } 52 | } 53 | }, 54 | { 55 | "name": "Add Product", 56 | "request": { 57 | "method": "POST", 58 | "header": [], 59 | "body": { 60 | "mode": "raw", 61 | "raw": "{\n \"name\": \"Product 1\",\n \"image\": \"image1.jpg\",\n \"category\": \"electronics\",\n \"new_price\": 99.99,\n \"old_price\": 149.99\n}", 62 | "options": { 63 | "raw": { 64 | "language": "json" 65 | } 66 | } 67 | }, 68 | "url": { 69 | "raw": "http://localhost:4000/api/products/addproduct", 70 | "protocol": "http", 71 | "host": ["localhost"], 72 | "port": "4000", 73 | "path": ["api", "products", "addproduct"] 74 | } 75 | } 76 | }, 77 | { 78 | "name": "Remove Product", 79 | "request": { 80 | "method": "POST", 81 | "header": [], 82 | "body": { 83 | "mode": "raw", 84 | "raw": "{\n \"id\": 1\n}", 85 | "options": { 86 | "raw": { 87 | "language": "json" 88 | } 89 | } 90 | }, 91 | "url": { 92 | "raw": "http://localhost:4000/api/products/removeproduct", 93 | "protocol": "http", 94 | "host": ["localhost"], 95 | "port": "4000", 96 | "path": ["api", "products", "removeproduct"] 97 | } 98 | } 99 | }, 100 | { 101 | "name": "Get All Products", 102 | "request": { 103 | "method": "GET", 104 | "header": [], 105 | "url": { 106 | "raw": "http://localhost:4000/api/products/allproducts", 107 | "protocol": "http", 108 | "host": ["localhost"], 109 | "port": "4000", 110 | "path": ["api", "products", "allproducts"] 111 | } 112 | } 113 | }, 114 | { 115 | "name": "Get New Collections", 116 | "request": { 117 | "method": "GET", 118 | "header": [], 119 | "url": { 120 | "raw": "http://localhost:4000/api/products/newcollections", 121 | "protocol": "http", 122 | "host": ["localhost"], 123 | "port": "4000", 124 | "path": ["api", "products", "newcollections"] 125 | } 126 | } 127 | }, 128 | { 129 | "name": "Get Popular in Women", 130 | "request": { 131 | "method": "GET", 132 | "header": [], 133 | "url": { 134 | "raw": "http://localhost:4000/api/products/popular-in-women", 135 | "protocol": "http", 136 | "host": ["localhost"], 137 | "port": "4000", 138 | "path": ["api", "products", "popular-in-women"] 139 | } 140 | } 141 | }, 142 | { 143 | "name": "Add to Cart", 144 | "request": { 145 | "method": "POST", 146 | "header": [ 147 | { 148 | "key": "auth-token", 149 | "value": "{{authToken}}" 150 | } 151 | ], 152 | "body": { 153 | "mode": "raw", 154 | "raw": "{\n \"itemId\": 1\n}", 155 | "options": { 156 | "raw": { 157 | "language": "json" 158 | } 159 | } 160 | }, 161 | "url": { 162 | "raw": "http://localhost:4000/api/cart/addtocart", 163 | "protocol": "http", 164 | "host": ["localhost"], 165 | "port": "4000", 166 | "path": ["api", "cart", "addtocart"] 167 | } 168 | } 169 | }, 170 | { 171 | "name": "Remove from Cart", 172 | "request": { 173 | "method": "POST", 174 | "header": [ 175 | { 176 | "key": "auth-token", 177 | "value": "{{authToken}}" 178 | } 179 | ], 180 | "body": { 181 | "mode": "raw", 182 | "raw": "{\n \"itemId\": 1\n}", 183 | "options": { 184 | "raw": { 185 | "language": "json" 186 | } 187 | } 188 | }, 189 | "url": { 190 | "raw": "http://localhost:4000/api/cart/removefromcart", 191 | "protocol": "http", 192 | "host": ["localhost"], 193 | "port": "4000", 194 | "path": ["api", "cart", "removefromcart"] 195 | } 196 | } 197 | }, 198 | { 199 | "name": "Get Cart Data", 200 | "request": { 201 | "method": "POST", 202 | "header": [ 203 | { 204 | "key": "auth-token", 205 | "value": "{{authToken}}" 206 | } 207 | ], 208 | "url": { 209 | "raw": "http://localhost:4000/api/cart/getcart", 210 | "protocol": "http", 211 | "host": ["localhost"], 212 | "port": "4000", 213 | "path": ["api", "cart", "getcart"] 214 | } 215 | } 216 | } 217 | ] 218 | } 219 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/middleware/auth.js: -------------------------------------------------------------------------------- 1 | const jwt = require('jsonwebtoken'); 2 | 3 | const fetchUser = (req, res, next) => { 4 | const token = req.header('auth-token'); 5 | if (!token) { 6 | return res.status(401).send({ errors: "Please authenticate using a valid token" }); 7 | } 8 | 9 | try { 10 | const data = jwt.verify(token, 'secret_ecom'); 11 | req.user = data.user; 12 | next(); 13 | } catch (error) { 14 | return res.status(401).send({ errors: "Please authenticate using a valid token" }); 15 | } 16 | }; 17 | 18 | module.exports = fetchUser; 19 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/models/Product.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const productSchema = new mongoose.Schema({ 4 | id: { type: Number, required: true }, 5 | name: { type: String, required: true }, 6 | image: { type: String, required: true }, 7 | category: { type: String, required: true }, 8 | new_price: { type: Number, required: true }, 9 | old_price: { type: Number, required: true }, 10 | date: { type: Date, default: Date.now }, 11 | avilable: { type: Boolean, default: true }, 12 | }); 13 | 14 | module.exports = mongoose.model('Product', productSchema); 15 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/models/User.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const userSchema = new mongoose.Schema({ 4 | name: { type: String }, 5 | email: { type: String, unique: true }, 6 | password: { type: String }, 7 | cartData: { type: Object }, 8 | date: { type: Date, default: Date.now }, 9 | }); 10 | 11 | module.exports = mongoose.model('User', userSchema); 12 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "cors": "^2.8.5", 4 | "crypto": "^1.0.1", 5 | "dotenv": "^16.4.5", 6 | "express": "^4.19.2", 7 | "jsonwebtoken": "^9.0.2", 8 | "mongoose": "^8.5.1", 9 | "multer": "^1.4.5-lts.1" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/routes/cartRoutes.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | const { addToCart, removeFromCart, getCart } = require('../controllers/cartController'); 4 | const fetchUser = require('../middleware/auth'); 5 | 6 | router.post('/addtocart', fetchUser, addToCart); 7 | router.post('/removefromcart', fetchUser, removeFromCart); 8 | router.post('/getcart', fetchUser, getCart); 9 | 10 | module.exports = router; 11 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/routes/productRoutes.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | const { addProduct, removeProduct, getAllProducts, getNewCollections, getPopularInWomen } = require('../controllers/productController'); 4 | 5 | router.post('/addproduct', addProduct); 6 | router.post('/removeproduct', removeProduct); 7 | router.get('/allproducts', getAllProducts); 8 | router.get('/newcollections', getNewCollections); 9 | router.get('/popular-in-women', getPopularInWomen); 10 | 11 | module.exports = router; 12 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/routes/userRoutes.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | const { signup, login } = require('../controllers/userController'); 4 | 5 | router.post('/signup', signup); 6 | router.post('/login', login); 7 | 8 | module.exports = router; 9 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const app = express(); 3 | const connectDB = require('./config/db'); 4 | const cors = require('cors'); 5 | 6 | // Connect to the database 7 | connectDB(); 8 | 9 | // Middleware 10 | app.use(express.json()); 11 | app.use(cors()); 12 | app.use('/images', express.static('uploads')); 13 | 14 | // Routes 15 | app.use('/api/products', require('./routes/productRoutes')); 16 | app.use('/api/users', require('./routes/userRoutes')); 17 | app.use('/api/cart', require('./routes/cartRoutes')); 18 | 19 | const PORT = 4000; 20 | app.listen(PORT, () => { 21 | console.log(`Server running on port ${PORT}`); 22 | }); 23 | -------------------------------------------------------------------------------- /vinay/final_project_eCommerce/serverr.js: -------------------------------------------------------------------------------- 1 | const port = 4000; 2 | 3 | const express = require("express"); 4 | const app = express(); 5 | 6 | const mongoose = require("mongoose"); 7 | const jwt = require("jsonwebtoken"); 8 | const multer = require("multer"); 9 | const path = require("path"); 10 | 11 | const cors = require("cors"); 12 | 13 | app.use(express.json()); 14 | app.use(cors()); 15 | 16 | mongoose 17 | .connect("mongodb://localhost:27017", { 18 | dbName: "E-Commerce", 19 | }) 20 | .then((c) => console.log(`Database Connected with ${c.connection.host}`)) 21 | .catch((e) => console.log(e)); 22 | 23 | app.get("/",(req,res) => { 24 | res.send("Express is running"); 25 | }) 26 | 27 | 28 | // Image Storage Engine 29 | 30 | const storage = multer.diskStorage({ 31 | destination: './upload/images', 32 | filename: (req, file, cb) => { 33 | return cb(null, `${file.fieldname}_${Date.now()}${path.extname(file.originalname)}`); 34 | } 35 | }); 36 | const upload = multer({storage: storage}); 37 | 38 | // Creating Upload Endpoint for images 39 | app.use('/images', express.static('upload/images')); 40 | 41 | app.post("/upload", upload.single('product'), (req, res) => { 42 | res.json({ 43 | success: 1, 44 | image_url: `http://localhost:${port}/images/${req.file.filename}` 45 | }); 46 | }); 47 | 48 | // Schema for Creating Products 49 | 50 | const Product = mongoose.model("Product", { 51 | id : { 52 | type : Number, 53 | required : true, 54 | }, 55 | name : { 56 | type : String, 57 | required : true, 58 | }, 59 | image : { 60 | type : String, 61 | required : true, 62 | }, 63 | category : { 64 | type : String, 65 | required : true, 66 | }, 67 | new_price : { 68 | type : Number, 69 | required : true, 70 | }, 71 | old_price : { 72 | type : Number, 73 | required : true, 74 | }, 75 | date : { 76 | type : Date, 77 | default : Date.now, 78 | }, 79 | avilable : { 80 | type : Boolean, 81 | default : true, 82 | }, 83 | }) 84 | 85 | 86 | app.post('/addproduct', async (req, res) => { 87 | let products = await Product.find({}); 88 | let id; 89 | if(products.length > 0){ 90 | let last_product_array = products.slice(-1); 91 | let last_product = last_product_array[0]; 92 | id = last_product.id +1; 93 | } 94 | else{ 95 | id =1; 96 | } 97 | const product = new Product({ 98 | id: id, 99 | name: req.body.name, 100 | image: req.body.image, 101 | category: req.body.category, 102 | new_price: req.body.new_price, 103 | old_price: req.body.old_price, 104 | }); 105 | 106 | console.log(product); 107 | await product.save(); 108 | console.log("Saved"); 109 | 110 | res.json({ 111 | success : true, 112 | name : req.body.name, 113 | }) 114 | }); 115 | 116 | 117 | // Creating API for deleting Products 118 | 119 | app.post('/removeproduct', async (req, res) => { 120 | await Product.findOneAndDelete({ id: req.body.id }); 121 | console.log("Removed"); 122 | res.json({ 123 | success: true, 124 | name: req.body.name 125 | }); 126 | }); 127 | 128 | app.get('/allproducts', async (req, res) => { 129 | let products = await Product.find({}); 130 | console.log("All Products Fetched"); 131 | res.send(products); 132 | }); 133 | 134 | 135 | // Schema for Users 136 | const Users = mongoose.model('Users',{ 137 | name: { 138 | type: String, 139 | }, 140 | 141 | email: { 142 | type: String, 143 | unique: true, 144 | }, 145 | 146 | password: { 147 | type: String, 148 | }, 149 | cartData : { 150 | type : Object, 151 | }, 152 | date : { 153 | type : Date, 154 | default : Date.now, 155 | }, 156 | }); 157 | 158 | 159 | 160 | // Creating Endpoint for registering the user 161 | app.post('/signup', async (req, res) => { 162 | 163 | let check = await Users.findOne({ email: req.body.email }); 164 | if (check) { 165 | return res.status(400).json({ success: false, errors: "existing user found with email address" }); 166 | } 167 | 168 | let cart = {}; 169 | 170 | for (let i = 0; i < 300; i++) { 171 | cart[i] = 0; 172 | } 173 | 174 | const user = new Users({ 175 | name: req.body.username, 176 | email: req.body.email, 177 | password: req.body.password, 178 | cartData: cart, 179 | }); 180 | 181 | await user.save(); 182 | 183 | const data = { 184 | user: { 185 | id: user.id 186 | } 187 | }; 188 | 189 | const token = jwt.sign(data, 'secret_ecom'); 190 | res.json({ success: true, token }); 191 | }); 192 | 193 | // Creating endpoint for user login 194 | app.post('/login', async (req, res) => { 195 | let user = await Users.findOne({ email: req.body.email }); 196 | if (user) { 197 | const passCompare = req.body.password === user.password; 198 | if (passCompare) { 199 | const data = { 200 | user: { 201 | id: user.id 202 | } 203 | }; 204 | 205 | const token = jwt.sign(data, 'secret_ecom'); 206 | res.json({ success: true, token }); 207 | } 208 | else{ 209 | res.json({success:false, error: "Wrong Password"}); 210 | } 211 | } 212 | else{ 213 | res.json({success: false, error : "Wrong Email ID"}); 214 | } 215 | }); 216 | 217 | // creating endpoint for newcollection data 218 | app.get('/newcollections', async (req, res) => { 219 | let products = await Product.find({}); 220 | let newcollection = products.slice(1).slice(-8); 221 | console.log("NewCollection Fetched"); 222 | res.send(newcollection); 223 | }); 224 | 225 | // creating endpoint for popular in women section 226 | app.get('/popular-in-women', async (req, res) => { 227 | let products = await Product.find({ category: "women" }); 228 | let popular_in_women = products.slice(3, 90); 229 | console.log("Popular in women fetched"); 230 | res.send(popular_in_women); 231 | }); 232 | 233 | // creating middleware to fetch user 234 | const fetchUser = async (req, res, next) => { 235 | const token = req.header('auth-token'); 236 | if (!token) { 237 | res.status(401).send({errors:"Please Authenticate using valid token"}); 238 | } else { 239 | try{ 240 | const data = jwt.verify(token,'secret_ecom'); 241 | req.user = data.user; 242 | next(); 243 | } 244 | catch(error){ 245 | res.status(401).send({errors:"Please Authenticate using valid token"}); 246 | } 247 | } 248 | }; 249 | 250 | // creating endpoint for adding products in cart data 251 | app.post('/addtocart', fetchUser, async (req, res) => { 252 | console.log("added", req.body,itemId); 253 | let userData = await Users.findOne({ _id: req.user.id }); 254 | userData.cartData[req.body.itemId] += 1; 255 | await Users.findOneAndUpdate({ _id: req.user.id }, { cartData: userData.cartData }); 256 | res.send("Added"); 257 | }); 258 | 259 | 260 | // creating endpoint to remove product from cart data 261 | app.post('/removefromcart', fetchUser, async (req, res) => { 262 | console.log("removed", req.body,itemId); 263 | let userData = await Users.findOne({ _id: req.user.id }); 264 | if (userData.cartData[req.body.itemId] > 0) { 265 | userData.cartData[req.body.itemId] -= 1; 266 | await Users.findOneAndUpdate({ _id: req.user.id }, { cartData: userData.cartData }); 267 | res.send("Removed"); 268 | } 269 | }); 270 | 271 | 272 | // creating endpoint to get cartdata 273 | app.post('/getcart', fetchUser, async (req, res) => { 274 | console.log("GetCart"); 275 | 276 | let userData = await Users.findOne({ _id: req.user.id }); 277 | res.json(userData.cartData); 278 | }); 279 | 280 | 281 | app.listen(port,(error) => { 282 | if(!error){ 283 | console.log("Server running on the port" +port) 284 | } 285 | else{ 286 | console.log("Error : " +error) 287 | } 288 | }) -------------------------------------------------------------------------------- /vinay/python/hello.py: -------------------------------------------------------------------------------- 1 | print("hello") --------------------------------------------------------------------------------