From ea823049083d26609dfde61156d996a7fb53a9ff Mon Sep 17 00:00:00 2001 From: Suhani Singh Paliwal <161575955+suhanipaliwal@users.noreply.github.com> Date: Wed, 15 May 2024 01:23:52 +0530 Subject: [PATCH 1/7] Create CONTRIBUTING.md --- CONTRIBUTING.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..cee5c73 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,47 @@ +# **Contributing Guidelines** πŸ“„ + +This documentation contains a set of guidelines to help you during the contribution process. +We are happy to welcome all the contributions from anyone willing to improve/add new scripts to this project. +Thank you for helping out and remember, **no contribution is too small.** +
+Please note we have a [code of conduct](CODE_OF_CONDUCT.md) please follow it in all your interactions with the project. + + + +
+ +## **Need some help regarding the basics?πŸ€”** + + +You can refer to the following articles on basics of Git and Github and also contact the Project Mentors, +in case you are stuck: + +- [Forking a Repo](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) +- [Cloning a Repo](https://help.github.com/en/desktop/contributing-to-projects/creating-an-issue-or-pull-request) +- [How to create a Pull Request](https://opensource.com/article/19/7/create-pull-request-github) +- [Getting started with Git and GitHub](https://towardsdatascience.com/getting-started-with-git-and-github-6fcd0f2d4ac6) +- [Learn GitHub from Scratch](https://docs.github.com/en/get-started/start-your-journey/git-and-github-learning-resources) + +
+ +## **Issue Report Process πŸ“Œ** + +1. Go to the project's issues. +2. Give proper description for the issues. +3. Don't spam to get the assignment of the issue πŸ˜€. +4. Wait for till someone is looking into it !. +5. Start working on issue only after you got assigned that issue πŸš€. + +
+ +## **Pull Request Process πŸš€** + +1. Ensure that you have self reviewed your code πŸ˜€ +2. Make sure you have added the proper description for the functionality of the code +3. I have commented my code, particularly in hard-to-understand areas. +4. Add screenshot it help in review. +5. Submit your PR by giving the necesarry information in PR template and hang tight we will review it really soon πŸš€ + +
+ +# **Thank you for contributingπŸ’—** From 40ab028e529525e2d5622329b8797e38fac55816 Mon Sep 17 00:00:00 2001 From: Akshat Jain <129594034+its-AkshatJain@users.noreply.github.com> Date: Wed, 15 May 2024 02:11:24 +0530 Subject: [PATCH 2/7] Hashed password NgoRoutes.js I have improved the error handling of NGO-login. I have added hashing to the NGO registration password. --- routers/NgoRoutes.js | 190 ++++++++++++++----------------------------- 1 file changed, 59 insertions(+), 131 deletions(-) diff --git a/routers/NgoRoutes.js b/routers/NgoRoutes.js index 0053d28..dd3c397 100644 --- a/routers/NgoRoutes.js +++ b/routers/NgoRoutes.js @@ -11,154 +11,82 @@ const NGO=require("../model/ngo") const Query = require("../model/query"); // Adjust the path based on your project structure -router.post("/NGO-login",async(req,res)=>{ +router.post("/NGO-login", async (req, res) => { const username = req.body.username; const password = req.body.password; - const ngo = await NGO.findOne({ username: username, password: password }); try { + const ngo = await NGO.findOne({ username: username, password: password }); + if (!ngo) { + return res.status(400).json({ error: 'NGO not found' }); + } + const isPasswordValid = await bcrypt.compare(password, ngo.password); + if (!isPasswordValid) { + return res.status(400).json({ error: 'Invalid credentials' }); + } const dooner = await User.find(); // Assuming User is your Mongoose model for users - - - res.render("NGO-Dashboard", { fullName: ngo.NGOName, email: ngo.username, - id: ngo.NGOID, - phoneNo:ngo.Mobile, - address :ngo.NGOLocation, - Donation : dooner, - Pickup : dooner, + id: ngo.NgoID, + phoneNo: ngo.Mobile, + address: ngo.NgoLocation, + Donation: dooner, + Pickup: dooner, complain: "" }); } catch (err) { console.error(err); res.status(500).send("An internal server error occurred."); } - }) - - router.post("/NGO-Registarion", async (req, res) => { - // Check if the NGO already exists - const existingNGO = await NGO.findOne({ username: req.body.username }); - if (existingNGO) { - return res.status(400).json({ error: 'NGO already exists' }); - } - - // Create a new NGO registration - const newNGO = new NGO({ - username: req.body.username, - password: req.body.password, - NGOName: req.body.NGOName, - Mobile: req.body.Mobile, - NGOID: req.body.NGOID, - NGOLocation: req.body.NGOLocation, - approved: false - }); - - // Save the new NGO to the database +}); +router.post("/NGO-Registration", async (req, res) => { try { - // Save the new NGO to the database - await newNGO.save(); - - // Send an email to the admin for approval - let mailOptions = { - to:newNGO.username, // Admin's email address - subject: 'New NGO Registration', - text: 'A new NGO registration is pending approval. Login to the admin panel to review and approve.', - // Include any necessary information in the email body - }; - transporter.sendMail(mailOptions, function (error, info) { - if (error) { - console.log(error); - } else { - console.log('Email sent: ' + info.response); - } - }); - - console.log('NGO registration request sent for approval'); - res.status(200).json({ message: 'NGO registration request sent for approval' }); - } catch (err) { - console.error('Error creating NGO:', err); - res.status(500).json({ error: 'Internal server error' }); - } - // try { - // await newNGO.save(); - - // let mailOptions = { - // to: newNGO.username, - // subject: 'Welcome To Petari', - // template: 'Email.template', - // context: { - // ngo: { - // ngoName: newNGO.name, - // _id: newNGO._id, - // username: newNGO.password, - // }, - // year: new Date().getFullYear() - // }, - // attachments: [{ - // filename: 'logo.png', - // path: path.join(__dirname, 'public', 'img', 'logo.png'), - // cid: 'logo' - // }] - // }; - - // transporter.sendMail(mailOptions, function(error, info){ - // if (error) { - // console.log(error); - // } else { - // console.log('Email sent: ' + info.response); - // } - // }); - - // console.log('NGO registered successfully'); - // res.status(200).json({ message: 'NGO registration received. It will be reviewed by the admin.' }); - // } catch (err) { - // console.error('Error creating NGO:', err); - // res.status(500).json({ error: 'Internal server error' }); - // } - // newNGO.save() - // .then((ngo) => { - // let mailOptions = { - // to: ngo.username, - // subject: 'Welcome To Petari', - // template: 'Email.template', - // context: { - // ngo: { - // ngoName: ngo.name, - // _id: ngo._id, - // username: ngo.password, - - // }, - - // year: new Date().getFullYear() - // }, - // attachments: [{ - // filename: 'logo.png', - // path: path.join(__dirname, 'public', 'img', 'logo.png'), - // cid: 'logo' - // }] - // }; - // transporter.sendMail(mailOptions, function(error, info){ - // if (error) { - // console.log(error); - // } else { - // console.log('Email sent: ' + info.response); - // } - // }); + // Check if the NGO already exists + const existingNGO = await NGO.findOne({ username: req.body.username }); + if (existingNGO) { + return res.status(400).json({ error: 'NGO already exists' }); + } + + // Hash the password for security + const hashedPassword = await bcrypt.hash(req.body.password, saltRounds); + + // Create a new NGO registration + const newNGO = new NGO({ + username: req.body.username, + password: hashedPassword, // Save the hashed password + NGOName: req.body.NGOName, + Mobile: req.body.Mobile, + NgoID: req.body.NgoID, + NgoLocation: req.body.NgoLocation, + approved: false + }); - // console.log('NGO registered successfully'); - // res.status(200).json({ message: 'NGO registered successfully' }); + // Save the new NGO to the database + await newNGO.save(); + + // Send an email to the admin for approval + let mailOptions = { + to:newNGO.username, // Admin's email address + subject: 'New NGO Registration', + text: 'A new NGO registration is pending approval. Login to the admin panel to review and approve.', + // Include any necessary information in the email body + }; + transporter.sendMail(mailOptions, function (error, info) { + if (error) { + console.log(error); + } else { + console.log('Email sent: ' + info.response); + } + }); - // }) - // .catch((err) => { - // console.error('Error creating NGO:', err); - // res.status(500).json({ error: 'Internal server error' }); - // }); + console.log('NGO registration request sent for approval'); + res.status(200).json({ message: 'NGO registration request sent for approval' }); + } catch (err) { + console.error('Error creating NGO:', err); + res.status(500).json({ error: 'Internal server error' }); + } }); +module.exports = router; - - - -module.exports = router \ No newline at end of file From 967bfb93c0d6fccd209b5555def8a20aace0c0c0 Mon Sep 17 00:00:00 2001 From: Akshat Jain <129594034+its-AkshatJain@users.noreply.github.com> Date: Wed, 15 May 2024 02:14:13 +0530 Subject: [PATCH 3/7] Corrected path of form in NGO-Registration.ejs In form action the path is incorrect. --- views/NGO-Registration.ejs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/views/NGO-Registration.ejs b/views/NGO-Registration.ejs index e4e1a3c..a11e14a 100644 --- a/views/NGO-Registration.ejs +++ b/views/NGO-Registration.ejs @@ -93,7 +93,7 @@
NGO Registration Form


-
+
@@ -129,3 +129,4 @@ + From 8531b9f8c18cae38a2c69699e113a7ff83ef6bda Mon Sep 17 00:00:00 2001 From: Vijay Shanker Sharma Date: Fri, 17 May 2024 15:49:27 +0530 Subject: [PATCH 4/7] Added dark mode toggle --- package-lock.json | 404 +++++++++++++++++++------------------ public/css/admin_css.css | 40 ++++ public/css/style.css | 55 +++++ views/NGO-Registration.ejs | 33 ++- views/Ngo_login.ejs | 30 ++- views/User_singUp.ejs | 34 +++- views/admin_login.ejs | 31 ++- views/index.ejs | 58 ++++-- views/user_login.ejs | 32 ++- 9 files changed, 492 insertions(+), 225 deletions(-) diff --git a/package-lock.json b/package-lock.json index ca4a04e..54e035e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,11 +65,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -134,13 +135,13 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/@babel/generator": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", - "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "dependencies": { - "@babel/types": "^7.21.4", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -148,13 +149,13 @@ } }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -275,9 +276,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } @@ -294,23 +295,23 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -431,28 +432,28 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "engines": { "node": ">=6.9.0" } @@ -493,13 +494,14 @@ } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", + "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.24.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -562,9 +564,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1622,32 +1624,32 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", - "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.4", - "@babel/types": "^7.21.4", - "debug": "^4.1.0", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", + "dependencies": { + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -1676,12 +1678,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1789,9 +1791,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } @@ -1802,12 +1804,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@mapbox/node-pre-gyp": { @@ -1887,6 +1889,15 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", + "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2881,32 +2892,35 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.5", + "hash-base": "~3.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" } }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/browserify-sign/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, "node_modules/browserify-zlib": { @@ -2945,9 +2959,9 @@ } }, "node_modules/bson": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-5.1.0.tgz", - "integrity": "sha512-FEecNHkhYRBe7X9KDkdG12xNuz5VHGeH6mCE0B5sBmYtiR/Ux/9vUH/v4NUoBCDr6NuEhvahjoLiiRogptVW0A==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.1.tgz", + "integrity": "sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==", "engines": { "node": ">=14.20.1" } @@ -3380,9 +3394,9 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -3727,9 +3741,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dependencies": { "jake": "^10.8.5" }, @@ -3746,9 +3760,9 @@ "integrity": "sha512-LNi3+/9nV0vT6Bz1OsSoZ/w7IgNuWdefZ7mjKNjZxyRlI/ag6uMXxsxAy5Etvuixq3Q26exw2fc4bNYvYQqXSw==" }, "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", + "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -3976,16 +3990,16 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -4128,43 +4142,6 @@ "node": ">= 0.6" } }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -4958,9 +4935,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==" }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -5798,11 +5775,11 @@ } }, "node_modules/mongodb": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.1.0.tgz", - "integrity": "sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.1.tgz", + "integrity": "sha512-NBGA8AfJxGPeB12F73xXwozt8ZpeIPmCUeWRwl9xejozTXFes/3zaep9zhzs1B/nKKsw4P3I4iPfXl3K7s6g+Q==", "dependencies": { - "bson": "^5.0.1", + "bson": "^5.5.0", "mongodb-connection-string-url": "^2.6.0", "socks": "^2.7.1" }, @@ -5810,17 +5787,25 @@ "node": ">=14.20.1" }, "optionalDependencies": { - "saslprep": "^1.0.3" + "@mongodb-js/saslprep": "^1.1.0" }, "peerDependencies": { - "@aws-sdk/credential-providers": "^3.201.0", - "mongodb-client-encryption": "^2.3.0", + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.0.0", + "kerberos": "^1.0.0 || ^2.0.0", + "mongodb-client-encryption": ">=2.3.0 <3", "snappy": "^7.2.2" }, "peerDependenciesMeta": { "@aws-sdk/credential-providers": { "optional": true }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, "mongodb-client-encryption": { "optional": true }, @@ -5839,20 +5824,20 @@ } }, "node_modules/mongoose": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.0.3.tgz", - "integrity": "sha512-3n8vc1/mssuxKa6vfghSocp3MeiCFYzhX36Ok+PsDNNYzHC9tw3rNkAMLemIwZ2jgXqkZ7CfKOxkzjp/d/SWfg==", + "version": "7.6.11", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.6.11.tgz", + "integrity": "sha512-/MBaeXqGxNaOgtlzhXgsV2TwpH2nU7ipqI1bGx/Q6IMo5OYh5CTBX2H8fpYD2BHKVMvIvIxfJIzeidqr6ieVhw==", "dependencies": { - "bson": "^5.0.1", + "bson": "^5.5.0", "kareem": "2.5.1", - "mongodb": "5.1.0", + "mongodb": "5.9.1", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", "sift": "16.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=14.20.1" }, "funding": { "type": "opencollective", @@ -6159,9 +6144,9 @@ "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node_modules/nodemailer": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.7.tgz", - "integrity": "sha512-rUtR77ksqex/eZRLmQ21LKVH5nAAsVicAtAYudK7JgwenEDZ0UIQ1adUGqErz7sMkWYxWTTU1aeP2Jga6WQyJw==", + "version": "6.9.13", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.13.tgz", + "integrity": "sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA==", "engines": { "node": ">=6.0.0" } @@ -6486,15 +6471,46 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-asn1/node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/parse-asn1/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/parse-asn1/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" } }, "node_modules/parse5": { @@ -7281,18 +7297,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", @@ -7316,9 +7320,9 @@ "integrity": "sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==" }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -7929,9 +7933,9 @@ } }, "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -8112,9 +8116,9 @@ } }, "node_modules/terser-webpack-plugin/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -9551,9 +9555,9 @@ } }, "node_modules/zod": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.2.tgz", - "integrity": "sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==", + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/public/css/admin_css.css b/public/css/admin_css.css index a37489a..4ad6d37 100644 --- a/public/css/admin_css.css +++ b/public/css/admin_css.css @@ -5,6 +5,46 @@ body{ background: #ececec; } +/* Dark Mode */ + +.dark-mode { + background-color: #121212; + color: #e0e0e0; +} + +.dark-mode #darkModeToggle { + background-color: #333; /* Dark background color */ +} + +.dark-mode #darkModeIcon { + color: #e0e0e0; /* Dark mode icon color */ +} + +/* Dark Mode Toggle Button - Hover */ +#darkModeToggle:hover { + background-color: #555; /* Dark background color on hover */ +} + +/* Dark Mode Toggle Button */ +#darkModeToggle { + width: 50px; + height: 50px; + border: none; /* Remove border */ + position: fixed; + top: 20px; + right: 20px; + z-index: 1000; /* Ensure it's above other content */ +} + +#darkModeIcon { + font-size: 24px; +} + +.dark-mode .custom-box { + background-color: #333 !important; /* Dark mode background color for the login container */ + color: #e0e0e0; /* Dark mode text color for the login container */ +} + /*------------ Login container ------------*/ .box-area{ diff --git a/public/css/style.css b/public/css/style.css index dfc6e44..eb21efa 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -328,4 +328,59 @@ body{ #contact { margin-bottom: 50px; /* Adjust the value as needed */ +} + +body { + transition: background-color 0.3s, color 0.3s; +} + +.dark-mode { + background-color: #121212; + color: #e0e0e0; +} + +.navbar.bg-body-secondary { + background-color: var(--bs-body-bg); +} + +.dark-mode .navbar.bg-body-secondary { + background-color: #1c1c1c; +} + +.dark-mode .hero_text, +.dark-mode .hero_text2, +.dark-mode .hero_text3 { + color: #e0e0e0; +} + +/* Dark mode styles */ +.dark-mode .navbar { + background-color: #333 !important; +} + +.dark-mode .navbar .navbar-brand, +.dark-mode .navbar .nav-link, +.dark-mode .navbar .btn { + color: #e0e0e0; +} + +.dark-mode .navbar-toggler { + border-color: #e0e0e0; +} + +.dark-mode .navbar-toggler-icon { + filter: invert(1); +} + +.dark-mode .contact .text { + color: #e0e0e0; +} + +.dark-mode .title { + color: #e0e0e0; +} + +.dark-mode .icons .info .head, +.dark-mode .icons .info .sub-title { + color: #e0e0e0; } \ No newline at end of file diff --git a/views/NGO-Registration.ejs b/views/NGO-Registration.ejs index d1ac6f3..3567b09 100644 --- a/views/NGO-Registration.ejs +++ b/views/NGO-Registration.ejs @@ -4,6 +4,7 @@ + @@ -88,12 +89,15 @@ - + +
NGO Registration Form


- +
@@ -125,6 +129,31 @@
+ + diff --git a/views/Ngo_login.ejs b/views/Ngo_login.ejs index 3a2bec7..fd343f9 100644 --- a/views/Ngo_login.ejs +++ b/views/Ngo_login.ejs @@ -6,12 +6,17 @@ + NGO Login + + @@ -19,7 +24,7 @@ -
+
@@ -74,6 +79,29 @@
+ \ No newline at end of file diff --git a/views/User_singUp.ejs b/views/User_singUp.ejs index 42076d3..e6aaeba 100644 --- a/views/User_singUp.ejs +++ b/views/User_singUp.ejs @@ -5,7 +5,9 @@ User Signup Form + + - + +
User Signup Form


-
+
@@ -143,7 +148,30 @@ body {
- + diff --git a/views/admin_login.ejs b/views/admin_login.ejs index e1bae1a..7abe2e8 100644 --- a/views/admin_login.ejs +++ b/views/admin_login.ejs @@ -6,12 +6,17 @@ + Admin Login + + @@ -19,7 +24,7 @@ -
+
@@ -74,6 +79,30 @@
+ + \ No newline at end of file diff --git a/views/index.ejs b/views/index.ejs index 17ea65b..e10947b 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -22,30 +22,32 @@
-
@@ -208,6 +210,28 @@ }); }); + document.addEventListener('DOMContentLoaded', function () { + const darkModeToggle = document.getElementById('darkModeToggle'); + const darkModeIcon = document.getElementById('darkModeIcon'); + const body = document.body; + const isDarkMode = localStorage.getItem('darkMode') === 'true'; + + // Function to toggle dark mode + function toggleDarkMode() { + const isDark = body.classList.toggle('dark-mode'); + localStorage.setItem('darkMode', isDark); + darkModeIcon.className = isDark ? 'fas fa-moon' : 'fas fa-sun'; // Change icon based on mode + } + + // Set initial mode based on localStorage + if (isDarkMode) { + toggleDarkMode(); + } + + // Event listener for dark mode toggle button + darkModeToggle.addEventListener('click', toggleDarkMode); + }); + diff --git a/views/user_login.ejs b/views/user_login.ejs index 1d386c7..c3970b9 100644 --- a/views/user_login.ejs +++ b/views/user_login.ejs @@ -6,12 +6,17 @@ + User Login + + @@ -19,7 +24,7 @@ -
+
@@ -79,6 +84,31 @@
+ + From ba71c983c562a4e7f971514b4706ddef5d9a7318 Mon Sep 17 00:00:00 2001 From: Akshat Jain <129594034+its-AkshatJain@users.noreply.github.com> Date: Sat, 18 May 2024 18:43:56 +0530 Subject: [PATCH 5/7] Update NgoRoutes.js and added the mail code as base branch --- routers/NgoRoutes.js | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/routers/NgoRoutes.js b/routers/NgoRoutes.js index dd3c397..abebfc6 100644 --- a/routers/NgoRoutes.js +++ b/routers/NgoRoutes.js @@ -65,20 +65,33 @@ router.post("/NGO-Registration", async (req, res) => { // Save the new NGO to the database await newNGO.save(); - // Send an email to the admin for approval - let mailOptions = { - to:newNGO.username, // Admin's email address - subject: 'New NGO Registration', - text: 'A new NGO registration is pending approval. Login to the admin panel to review and approve.', - // Include any necessary information in the email body - }; - transporter.sendMail(mailOptions, function (error, info) { - if (error) { - console.log(error); - } else { - console.log('Email sent: ' + info.response); - } - }); + const templatePath = path.join(__dirname, '../views', 'Email.template.handlebars'); + const templateContent = fs.readFileSync(templatePath, 'utf8'); + +// Compile the Handlebars template with the provided context data +const compiledHtml = Handlebars.compile(templateContent)({ + user: { + _id: newNGO.NgoID, // Example ID + username: newNGO.NGOName, // Example username + email: newNGO.username, // Example email + fname: newNGO.NGOName // Example first name + } + }); + // Send an email to the admin for approval + const mailOptions = { + to: newNGO.username, // Admin's email address + subject: "New NGO Registration", + text: "A new NGO registration is pending approval. Login to the admin panel to review and approve.", + html: compiledHtml + // Include any necessary information in the email body + }; + transporter.transporter.sendMail(mailOptions, function (error, info) { + if (error) { + console.log(error); + } else { + console.log("Email sent: " + info.response); + } + }); console.log('NGO registration request sent for approval'); res.status(200).json({ message: 'NGO registration request sent for approval' }); From 2e0876a1238b30ab357b14d74e5ebcbbef7ceba0 Mon Sep 17 00:00:00 2001 From: Akshat Jain Date: Mon, 20 May 2024 02:05:39 +0530 Subject: [PATCH 6/7] updated code --- package-lock.json | 88 +++++++++++++++ routers/NgoRoutes.js | 225 ++++++++++++++----------------------- views/NGO-Registration.ejs | 2 +- 3 files changed, 174 insertions(+), 141 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f924d0..6f34f69 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1992,16 +1992,104 @@ "@redis/client": "^1.0.0" } }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "peer": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "peer": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", + "peer": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "peer": true + }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "peer": true + }, "node_modules/@types/node": { "version": "18.15.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "peer": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "peer": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "peer": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "peer": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", diff --git a/routers/NgoRoutes.js b/routers/NgoRoutes.js index 0053d28..77e3733 100644 --- a/routers/NgoRoutes.js +++ b/routers/NgoRoutes.js @@ -1,164 +1,109 @@ -const express = require("express") -const router = new express.Router() +const express = require("express"); +const router = new express.Router(); -const bcrypt=require("bcrypt") +const bcrypt = require("bcrypt"); const saltRounds = 10; const jwt = require("jsonwebtoken"); -const User=require("../model/user") -const Admin=require("../model/admin") -const NGO=require("../model/ngo") +const User = require("../model/user"); +const Admin = require("../model/admin"); +const NGO = require("../model/ngo"); const Query = require("../model/query"); // Adjust the path based on your project structure - -router.post("/NGO-login",async(req,res)=>{ - const username = req.body.username; - const password = req.body.password; +router.post("/NGO-login", async (req, res) => { + const username = req.body.username; + const password = req.body.password; + try { const ngo = await NGO.findOne({ username: username, password: password }); - try { - const dooner = await User.find(); // Assuming User is your Mongoose model for users - - - - res.render("NGO-Dashboard", { - fullName: ngo.NGOName, - email: ngo.username, - id: ngo.NGOID, - phoneNo:ngo.Mobile, - address :ngo.NGOLocation, - Donation : dooner, - Pickup : dooner, - complain: "" - }); - } catch (err) { - console.error(err); - res.status(500).send("An internal server error occurred."); + if (!ngo) { + return res.status(400).json({ error: "NGO not found" }); + } + const isPasswordValid = await bcrypt.compare(password, ngo.password); + if (!isPasswordValid) { + return res.status(400).json({ error: "Invalid credentials" }); } - }) + const dooner = await User.find(); // Assuming User is your Mongoose model for users + res.render("NGO-Dashboard", { + fullName: ngo.NGOName, + email: ngo.username, + id: ngo.NgoID, + phoneNo: ngo.Mobile, + address: ngo.NgoLocation, + Donation: dooner, + Pickup: dooner, + complain: "", + }); + } catch (err) { + console.error(err); + res.status(500).send("An internal server error occurred."); + } +}); - router.post("/NGO-Registarion", async (req, res) => { +router.post("/NGO-Registration", async (req, res) => { + try { // Check if the NGO already exists const existingNGO = await NGO.findOne({ username: req.body.username }); if (existingNGO) { - return res.status(400).json({ error: 'NGO already exists' }); + return res.status(400).json({ error: "NGO already exists" }); } + // Hash the password for security + const hashedPassword = await bcrypt.hash(req.body.password, saltRounds); + // Create a new NGO registration const newNGO = new NGO({ - username: req.body.username, - password: req.body.password, - NGOName: req.body.NGOName, - Mobile: req.body.Mobile, - NGOID: req.body.NGOID, - NGOLocation: req.body.NGOLocation, - approved: false + username: req.body.username, + password: hashedPassword, // Save the hashed password + NGOName: req.body.NGOName, + Mobile: req.body.Mobile, + NgoID: req.body.NgoID, + NgoLocation: req.body.NgoLocation, + approved: false, }); // Save the new NGO to the database + await newNGO.save(); + + const templatePath = path.join( + __dirname, + "../views", + "Email.template.handlebars" + ); + const templateContent = fs.readFileSync(templatePath, "utf8"); + + // Compile the Handlebars template with the provided context data + const compiledHtml = Handlebars.compile(templateContent)({ + user: { + _id: newNGO.NgoID, // Example ID + username: newNGO.NGOName, // Example username + email: newNGO.username, // Example email + fname: newNGO.NGOName, // Example first name + }, + }); + // Send an email to the admin for approval + const mailOptions = { + to: newNGO.username, // Admin's email address + subject: "New NGO Registration", + text: "A new NGO registration is pending approval. Login to the admin panel to review and approve.", + html: compiledHtml, + // Include any necessary information in the email body + }; + transporter.transporter.sendMail(mailOptions, function (error, info) { + if (error) { + console.log(error); + } else { + console.log("Email sent: " + info.response); + } + }); - try { - // Save the new NGO to the database - await newNGO.save(); - - // Send an email to the admin for approval - let mailOptions = { - to:newNGO.username, // Admin's email address - subject: 'New NGO Registration', - text: 'A new NGO registration is pending approval. Login to the admin panel to review and approve.', - // Include any necessary information in the email body - }; - transporter.sendMail(mailOptions, function (error, info) { - if (error) { - console.log(error); - } else { - console.log('Email sent: ' + info.response); - } - }); - - console.log('NGO registration request sent for approval'); - res.status(200).json({ message: 'NGO registration request sent for approval' }); + console.log("NGO registration request sent for approval"); + res + .status(200) + .json({ message: "NGO registration request sent for approval" }); } catch (err) { - console.error('Error creating NGO:', err); - res.status(500).json({ error: 'Internal server error' }); + console.error("Error creating NGO:", err); + res.status(500).json({ error: "Internal server error" }); } - // try { - // await newNGO.save(); - - // let mailOptions = { - // to: newNGO.username, - // subject: 'Welcome To Petari', - // template: 'Email.template', - // context: { - // ngo: { - // ngoName: newNGO.name, - // _id: newNGO._id, - // username: newNGO.password, - // }, - // year: new Date().getFullYear() - // }, - // attachments: [{ - // filename: 'logo.png', - // path: path.join(__dirname, 'public', 'img', 'logo.png'), - // cid: 'logo' - // }] - // }; - - // transporter.sendMail(mailOptions, function(error, info){ - // if (error) { - // console.log(error); - // } else { - // console.log('Email sent: ' + info.response); - // } - // }); - - // console.log('NGO registered successfully'); - // res.status(200).json({ message: 'NGO registration received. It will be reviewed by the admin.' }); - // } catch (err) { - // console.error('Error creating NGO:', err); - // res.status(500).json({ error: 'Internal server error' }); - // } - // newNGO.save() - // .then((ngo) => { - // let mailOptions = { - // to: ngo.username, - // subject: 'Welcome To Petari', - // template: 'Email.template', - // context: { - // ngo: { - // ngoName: ngo.name, - // _id: ngo._id, - // username: ngo.password, - - // }, - - // year: new Date().getFullYear() - // }, - // attachments: [{ - // filename: 'logo.png', - // path: path.join(__dirname, 'public', 'img', 'logo.png'), - // cid: 'logo' - // }] - // }; - // transporter.sendMail(mailOptions, function(error, info){ - // if (error) { - // console.log(error); - // } else { - // console.log('Email sent: ' + info.response); - // } - // }); - - // console.log('NGO registered successfully'); - // res.status(200).json({ message: 'NGO registered successfully' }); - - // }) - // .catch((err) => { - // console.error('Error creating NGO:', err); - // res.status(500).json({ error: 'Internal server error' }); - // }); }); - - - - -module.exports = router \ No newline at end of file +module.exports = router; diff --git a/views/NGO-Registration.ejs b/views/NGO-Registration.ejs index e4e1a3c..3df7529 100644 --- a/views/NGO-Registration.ejs +++ b/views/NGO-Registration.ejs @@ -93,7 +93,7 @@
NGO Registration Form


-
+
From 448e0af3a377e0ef1c047cfc87bffcf1f0f84f42 Mon Sep 17 00:00:00 2001 From: Akshat Jain <129594034+its-AkshatJain@users.noreply.github.com> Date: Tue, 21 May 2024 01:36:01 +0530 Subject: [PATCH 7/7] Fixed Ngo Registration problem --- routers/NgoRoutes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/NgoRoutes.js b/routers/NgoRoutes.js index f4bd261..2199ae6 100644 --- a/routers/NgoRoutes.js +++ b/routers/NgoRoutes.js @@ -60,7 +60,7 @@ router.post("/NGO-Registration", async (req, res) => { const newNGO = new NGO({ username: req.body.username, password: hashedPassword, // Save the hashed password - NGOName: req.body.NGOName, + NGOName: req.body.NgoName, Mobile: req.body.Mobile, NgoID: req.body.NgoID, NgoLocation: req.body.NgoLocation,