From 85ff5d08a0f7fa18d5908d1495d1d19d7510254c Mon Sep 17 00:00:00 2001 From: quoije Date: Sun, 26 Jan 2025 16:03:25 -0500 Subject: [PATCH] initial commit, should work --- .gitignore | 136 +++ README.md | 1 + index.js | 29 + middleware/authMiddleware.js | 18 + models/Movie.js | 14 + models/User.js | 15 + package-lock.json | 1673 +++++++++++++++++++++++++++++ package.json | 25 + public/android-chrome-192x192.png | Bin 0 -> 13126 bytes public/android-chrome-512x512.png | Bin 0 -> 42087 bytes public/app.js | 0 public/apple-touch-icon.png | Bin 0 -> 11800 bytes public/checklist.html | 212 ++++ public/favicon-16x16.png | Bin 0 -> 658 bytes public/favicon-32x32.png | Bin 0 -> 1517 bytes public/favicon.ico | Bin 0 -> 15406 bytes public/img/filter.png | Bin 0 -> 418 bytes public/img/imdb.png | Bin 0 -> 586 bytes public/img/logo.png | Bin 0 -> 19513 bytes public/img/logo_w.png | Bin 0 -> 20864 bytes public/index.html | 69 ++ public/movies.html | 284 +++++ public/register.html | 107 ++ public/site.webmanifest | 1 + public/user-stat.html | 192 ++++ routes/movies.js | 135 +++ routes/users.js | 155 +++ 27 files changed, 3066 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 index.js create mode 100644 middleware/authMiddleware.js create mode 100644 models/Movie.js create mode 100644 models/User.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/android-chrome-192x192.png create mode 100644 public/android-chrome-512x512.png create mode 100644 public/app.js create mode 100644 public/apple-touch-icon.png create mode 100644 public/checklist.html create mode 100644 public/favicon-16x16.png create mode 100644 public/favicon-32x32.png create mode 100644 public/favicon.ico create mode 100644 public/img/filter.png create mode 100644 public/img/imdb.png create mode 100644 public/img/logo.png create mode 100644 public/img/logo_w.png create mode 100644 public/index.html create mode 100644 public/movies.html create mode 100644 public/register.html create mode 100644 public/site.webmanifest create mode 100644 public/user-stat.html create mode 100644 routes/movies.js create mode 100644 routes/users.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b9ed5c4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,136 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# vitepress build output +**/.vitepress/dist + +# vitepress cache directory +**/.vitepress/cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..84b1ca3 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +oscar-pool \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..6a82d19 --- /dev/null +++ b/index.js @@ -0,0 +1,29 @@ +const express = require("express"); +const mongoose = require("mongoose"); +const dotenv = require("dotenv"); +const cors = require("cors"); + +dotenv.config(); +const app = express(); + +// Middleware +app.use(cors()); +app.use(express.json()); + +// Connect to MongoDB +mongoose + .connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true }) + .then(() => console.log("MongoDB connected")) + .catch((err) => console.error(err)); + +// Routes +const userRoutes = require("./routes/users"); +const movieRoutes = require("./routes/movies"); + +app.use(express.static('public')); +app.use("/api/users", userRoutes); +app.use("/api/movies", movieRoutes); + +// Start Server +const PORT = process.env.PORT || 5000; +app.listen(PORT, () => console.log(`Server running on port ${PORT}`)); diff --git a/middleware/authMiddleware.js b/middleware/authMiddleware.js new file mode 100644 index 0000000..0089606 --- /dev/null +++ b/middleware/authMiddleware.js @@ -0,0 +1,18 @@ +const jwt = require("jsonwebtoken"); + +const authenticate = (req, res, next) => { + const token = req.headers.authorization?.split(" ")[1]; + if (!token) { + return res.status(401).json({ message: "No token provided" }); + } + + try { + const decoded = jwt.verify(token, process.env.JWT_SECRET); + req.user = decoded; // Attach user data to request + next(); // Continue to the next middleware or route handler + } catch (error) { + return res.status(401).json({ message: "Invalid or expired token" }); + } +}; + +module.exports = authenticate; diff --git a/models/Movie.js b/models/Movie.js new file mode 100644 index 0000000..010246d --- /dev/null +++ b/models/Movie.js @@ -0,0 +1,14 @@ +const mongoose = require("mongoose"); + +const movieSchema = new mongoose.Schema({ + imdb_id: { type: String, required: true }, + title: { type: String, required: false }, + description: { type: String, required: false }, + rating: { type: String, required: false }, + poster: { type: String, required: false }, + category: { type: String, required: true }, + vod_link: { type: String, required: true }, + watchedBy: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }] +}); + +module.exports = mongoose.model("Movie", movieSchema); diff --git a/models/User.js b/models/User.js new file mode 100644 index 0000000..6ad82bf --- /dev/null +++ b/models/User.js @@ -0,0 +1,15 @@ +const mongoose = require("mongoose"); + +const userSchema = new mongoose.Schema({ + name: { type: String, required: true }, + email: { type: String, required: true, unique: true }, + password: { type: String, required: true }, + role: { type: Number, default: 0 }, + watchedMovies: [{ + imdb_id: { type: String, required: false }, + watchedDate: { type: Date, default: Date.now } // Store the watched date + }] +}); + +const User = mongoose.model("User", userSchema); +module.exports = User; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..19fbeac --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1673 @@ +{ + "name": "oscar-pool-ap", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "oscar-pool-ap", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "axios": "^1.7.9", + "bcryptjs": "^2.4.3", + "body-parser": "^1.20.3", + "cors": "^2.8.5", + "dotenv": "^16.4.7", + "express": "^4.21.2", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.9.5" + }, + "devDependencies": { + "nodemon": "^3.1.9" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz", + "integrity": "sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==", + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "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.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.1.tgz", + "integrity": "sha512-P92xmHDQjSKPLHqFxefqMxASNq/aWJMEZugpCjf+AF/pgcUpMMQCg7t7+ewko0/u8AapvF3luf/FoehddEK+sA==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT" + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mongodb": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.12.0.tgz", + "integrity": "sha512-RM7AHlvYfS7jv7+BXund/kR64DryVI+cHbVAy9P61fnb1RcWZqOW1/Wj2YhqMCx+MuYhqTRGv7AwHBzmsCKBfA==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.9", + "bson": "^6.10.1", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", + "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^14.1.0 || ^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.9.5", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.9.5.tgz", + "integrity": "sha512-SPhOrgBm0nKV3b+IIHGqpUTOmgVL5Z3OO9AwkFEmvOZznXTvplbomstCnPOGAyungtRXE5pJTgKpKcZTdjeESg==", + "license": "MIT", + "dependencies": { + "bson": "^6.10.1", + "kareem": "2.6.3", + "mongodb": "~6.12.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "license": "MIT", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.9.tgz", + "integrity": "sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "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/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", + "license": "MIT" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz", + "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==", + "license": "MIT", + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..38e2a0c --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "oscar-pool-ap", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "axios": "^1.7.9", + "bcryptjs": "^2.4.3", + "body-parser": "^1.20.3", + "cors": "^2.8.5", + "dotenv": "^16.4.7", + "express": "^4.21.2", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.9.5" + }, + "devDependencies": { + "nodemon": "^3.1.9" + } +} diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..0434ab771bf1a2a57280fe93dacb10367135c7cf GIT binary patch literal 13126 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 HqwoI%A#&w} literal 0 HcmV?d00001 diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..10b2f0f8ede797486a97dce6b3fe22c49bd20f94 GIT binary patch literal 42087 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%0AsOp#h{$nXguuw6bN7oj|bur^M7RKyI@j;KT zwDGUa%0tdODe^BcdE&nf+VU8GsQ-!&4_(XK?f$&}-M8MieOQ8*XuG0HuKmrou&K!d zid=EmK#J!ScJ5HLbc1PtNq34R;-PNuJfA{Z4Y!uE++cOziewAAZyh;9{r464hW*JN WI^Aq)^gj+bKu$^-Tq$7`_ + + + + + Pool Oscar 2025 - Checklist + + + + + + + + + + +

+ +
+

Checklist

+
+

Temps avant les Oscar (2 mars 2025) -

+
+
+
+ + + + + + + + + + + + +
TitreRegardéDate du visionnage
+

+
+ + + + + diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..0b2d243ccf32b03fe9489d9bd43cf8d48fb07540 GIT binary patch literal 658 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 h-_TAc$9s_5}y4|fF36oEJPfAjh zT_;j=dQ#!7-Dtcz=M}A8Tvc)&Pi)bXFct0 zqkllgb{2b_sLLM4(qAF{@=vrM$wn+t=svK#y+dt-%fYZl{dU3o2c%RZ*`xTBq7JaB z-YyZ?)T-Poq+C{zv%RIm)<%Nq8+VTdL)*s`77HDPM;sDIHyb`!(%%uBAfu}EU{8C8 z_kt!P;RBI<9o;{SkEKlbZoX(*M2At5`l6m2of^tzN~b#J!niDTd)J1s*xa!~MU97pP`_%LQuTN#W#;?iLvSRM^ho^yo&fw|l=d#Wz Gp$P!^bfNSB literal 0 HcmV?d00001 diff --git a/public/img/imdb.png b/public/img/imdb.png new file mode 100644 index 0000000000000000000000000000000000000000..3d82cf51a5feca5dcf1fe29423e932966a79e5f6 GIT binary patch literal 586 zcmV-Q0=4~#P)O^VHn3hU=T({cab#EK?ocIsi~!W+)@9$9m z3Yat^S8_xeCn54q<4yD7-F&l$AFZd2$O`Z+n!iaU@<`*wV~XtS)+FbfeLebJHd%y7 z*u-2@3@bMnRkyk`@m6x%fdBvi07*qoM6N<$f|mjjR{#J2 literal 0 HcmV?d00001 diff --git a/public/img/logo.png b/public/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..09b81222094428f1a417e764e3abda601530363e GIT binary patch literal 19513 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 literal 0 HcmV?d00001 diff --git a/public/img/logo_w.png b/public/img/logo_w.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee60a048baa599c8b04c490aadcc116241792ac GIT binary patch literal 20864 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 literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..00c34ad --- /dev/null +++ b/public/index.html @@ -0,0 +1,69 @@ + + + + + + Pool Oscar 2025 + + + + + + + + +
+
+
+ +
+
+
+ + +
+
+ + +
+ +
+

Pas de compte? Enregistrez-vous

+
+
+ + + + + + diff --git a/public/movies.html b/public/movies.html new file mode 100644 index 0000000..8ff2fc4 --- /dev/null +++ b/public/movies.html @@ -0,0 +1,284 @@ + + + + + + Pool Oscar 2025 - Films + + + + + + + + + + + + +
+
+

Films

+

+ +

+
+ + +
+ +
+ +

Temps avant les Oscar (2 mars 2025) -

+
+ +
+
+ + + + + + diff --git a/public/register.html b/public/register.html new file mode 100644 index 0000000..2f1dcee --- /dev/null +++ b/public/register.html @@ -0,0 +1,107 @@ + + + + + + Pool Oscar 2025 - Enregistrement + + + + + + + + +
+
+
+ +
+
+
+ + +
+
+ + +
+
+ + +
+ +
+

Déjà un compte? Connectez-vous

+
+
+ + + + + + + + + diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..45dc8a2 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/public/user-stat.html b/public/user-stat.html new file mode 100644 index 0000000..f6b863b --- /dev/null +++ b/public/user-stat.html @@ -0,0 +1,192 @@ + + + + + + User Statistics + + + + + + + + + + + + +
+

Statistiques des utilisateurs

+ + + + + + + + + + + + +
NomTotal des films regardés
+
+ + + + + + + + + \ No newline at end of file diff --git a/routes/movies.js b/routes/movies.js new file mode 100644 index 0000000..674e090 --- /dev/null +++ b/routes/movies.js @@ -0,0 +1,135 @@ +const express = require("express"); +const Movie = require("../models/Movie"); +const User = require("../models/User"); +const axios = require("axios"); +const jwt = require("jsonwebtoken"); + +const router = express.Router(); + +// Fetch movie details from OMDb API +async function fetchMovieDetailsFromOmdb(imdb_id) { + const apiKey = process.env.OMDB_API; // Replace with your actual OMDb API key + const omdbUrl = `https://www.omdbapi.com/?i=${encodeURIComponent(imdb_id)}&apikey=${apiKey}`; + + try { + const response = await axios.get(omdbUrl); + if (response.data.Response === "True") { + return { + title: response.data.Title, + description: response.data.Plot, + rating: response.data.imdbRating, + poster: response.data.Poster + }; + } else { + throw new Error('Movie not found on OMDb API'); + } + } catch (error) { + throw new Error(`Error fetching movie details: ${error.message}`); + } +} + +// Get all movies +router.get("/", async (req, res) => { + try { + const movies = await Movie.find(); + res.status(200).json(movies); + } catch (err) { + res.status(500).json({ error: err.message }); + } +}); + +// Get watched movies for the user +router.get("/watchedMovies", async (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; // Get token from header + if (!token) return res.status(401).json({ message: "Token is required" }); + + try { + const decoded = jwt.verify(token, process.env.JWT_SECRET); // Verify token + console.log("Decoded token:", decoded); + console.log("Decoded decoded.userId:", decoded.id); + const user = await User.findById(decoded.id); // Get user by ID + if (!user) return res.status(404).json({ message: "User not found" }); + + res.status(200).json(user.watchedMovies); // Return the list of watched movies + } catch (error) { + res.status(500).json({ error: error.message }); + } +}); + +// Update watched movies for the user +router.patch("/users/updateWatchedMovies", async (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; // Get token from header + if (!token) return res.status(401).json({ message: "Token is required" }); + + const { imdb_id, isChecked } = req.body; + + try { + const decoded = jwt.verify(token, process.env.JWT_SECRET); // Verify token + const user = await User.findById(decoded.id); // Get user by ID + if (!user) return res.status(404).json({ message: "User not found" }); + + if (isChecked) { + // Add movie to watchedMovies with the watched date if not already added + const movieIndex = user.watchedMovies.findIndex(movie => movie.imdb_id === imdb_id); + if (movieIndex === -1) { + user.watchedMovies.push({ imdb_id, watchedDate: new Date() }); + } + } else { + // Remove movie from watchedMovies array + user.watchedMovies = user.watchedMovies.filter(movie => movie.imdb_id !== imdb_id); + } + + await user.save(); // Save updated user + res.status(200).json({ message: "Watched movies updated successfully" }); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}); + + +// Add movie +router.post("/add", async (req, res) => { + const { imdb_id, category, vod_link } = req.body; + + try { + // Get the token from the Authorization header + const token = req.headers.authorization?.split(" ")[1]; + + if (!token) { + return res.status(401).json({ message: "Authentication token is required" }); + } + + // Verify and decode the token + const decoded = jwt.verify(token, process.env.JWT_SECRET); + + // Check if the user is an admin + if (!decoded.admin) { + return res.status(403).json({ message: "You do not have admin privileges" }); + } + + // Fetch movie details from OMDb API + const movieDetails = await fetchMovieDetailsFromOmdb(imdb_id); + + // Proceed with adding the movie + const movie = new Movie({ + imdb_id, + title: movieDetails.title, + description: movieDetails.description, + rating: movieDetails.rating, + poster: movieDetails.poster, + category, + vod_link + }); + + await movie.save(); + + res.status(201).json({ message: "Movie added successfully!" }); + } catch (err) { + if (err instanceof jwt.JsonWebTokenError) { + return res.status(401).json({ message: "Invalid or expired token" }); + } + res.status(400).json({ error: err.message }); + } +}); + +module.exports = router; diff --git a/routes/users.js b/routes/users.js new file mode 100644 index 0000000..93e42e1 --- /dev/null +++ b/routes/users.js @@ -0,0 +1,155 @@ +const express = require("express"); +const bcrypt = require("bcryptjs"); +const jwt = require("jsonwebtoken"); +const User = require("../models/User"); +const Movie = require("../models/Movie"); +const axios = require("axios"); + +const router = express.Router(); + +// Fetch movie details from OMDb API +async function fetchMovieDetailsFromOmdb(imdb_id) { + const apiKey = process.env.OMDB_API; // Replace with your actual OMDb API key + const omdbUrl = `https://www.omdbapi.com/?i=${encodeURIComponent(imdb_id)}&apikey=${apiKey}`; + + try { + const response = await axios.get(omdbUrl); + if (response.data.Response === "True") { + return { + title: response.data.Title.replace(/'/g, "") + }; + } else { + throw new Error('Movie not found on OMDb API'); + } + } catch (error) { + throw new Error(`Error fetching movie details: ${error.message}`); + } +} + +// Middleware to verify token +function verifyToken(req, res, next) { + const token = req.headers['authorization'] && req.headers['authorization'].startsWith('Bearer ') + ? req.headers['authorization'].split(' ')[1] + : null; + + if (!token) { + return res.status(403).json({ message: "No token provided, access denied." }); + } + + jwt.verify(token, process.env.JWT_SECRET, (err, decoded) => { + if (err) { + return res.status(401).json({ message: "Invalid or expired token" }); + } + req.user = decoded; // Store decoded user info for use in routes + next(); + }); +} + +// Get user stats with watched movie titles and details from OMDb +router.get("/stats", verifyToken, async (req, res) => { + try { + // Fetch all users + const users = await User.find(); + + // Fetch all movies + const allMovies = await Movie.find(); + const totalMoviesCount = allMovies.length; + + if (totalMoviesCount === 0) { + return res.status(400).json({ message: "No movies available in the database." }); + } + + // Build stats for each user + const userStats = await Promise.all(users.map(async (user) => { + // Get watched movie IMDb IDs + const watchedMovies = user.watchedMovies + .map((wm) => wm.imdb_id) // Extract IMDb ID + .filter((imdb_id) => allMovies.some((m) => m.imdb_id === imdb_id)); // Ensure the movie exists in the database + + const watchedCount = watchedMovies.length; + const watchedRatio = ((watchedCount / totalMoviesCount) * 100).toFixed(1); + + // Fetch movie details from OMDb for each watched movie + const movieDetailsPromises = watchedMovies.map(async (imdb_id) => { + try { + const movieTitle = (await fetchMovieDetailsFromOmdb(imdb_id)).title; + return { + imdb_id, + movieTitle + }; + } catch (err) { + console.error(`Error fetching details for movie with IMDb ID: ${imdb_id}`); + return { imdb_id, error: err.message }; + } + }); + + const movieTitle = await Promise.all(movieDetailsPromises); + + return { + name: user.name, + watchedCount, + totalMoviesCount, + watchedRatio: `${watchedRatio}%`, + watchedMovies: movieTitle // Include movie details + }; + })); + + res.json(userStats); + } catch (err) { + console.error("Erreur dans l'extraction des statistiques sur les utilisateurs :", err); + res.status(500).json({ error: "Internal server error" }); + } +}); + +// Register User +router.post("/register", async (req, res) => { + const { name, email, password, role } = req.body; + + try { + if (!password) { + throw new Error("Le mot de passe est obligatoire et ne peut être indéfini"); + } + const hashedPassword = await bcrypt.hash(password, 10); + const user = new User({ name, email, password: hashedPassword, role }); + await user.save(); + res.status(201).json({ message: "L'utilisateur s'est enregistré avec succès !" }); + } catch (err) { + res.status(400).json({ error: err.message }); + } +}); + +// Login User +router.post("/login", async (req, res) => { + const { email, password } = req.body; + + try { + const user = await User.findOne({ email }); + if (!user) return res.status(404).json({ message: "L'utilisateur n'a pas été trouvé" }); + + const isMatch = await bcrypt.compare(password, user.password); + if (!isMatch) return res.status(401).json({ message: "Informations d'identification non valides" }); + + // Check if the user role is 69 and set the admin flag + const isAdmin = user.role === 69; + + // Create a token with the user ID, name, and admin flag if the user is an admin + const token = jwt.sign( + { id: user._id, name: user.name, admin: isAdmin }, // Include name in the token payload + process.env.JWT_SECRET, + { expiresIn: "1h" } + ); + + res.status(200).json({ token }); + } catch (err) { + res.status(400).json({ error: err.message }); + } +}); + +// Protected route to get movies (example) +router.get("/movies", verifyToken, async (req, res) => { + // Only authorized users will reach this point + const movies = await Movie.find(); // Assuming Movie model exists + res.json(movies); +}); + +module.exports = router;