diff --git a/package-lock.json b/package-lock.json index 92079ed33..e9fa8fdd9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "bcrypt": "^5.1.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", + "connect-mongo": "^5.1.0", "dotenv": "^16.0.3", "express-session": "^1.17.3", "handlebars": "^4.7.7", @@ -64,7 +65,7 @@ "@types/bcrypt": "^5.0.0", "@types/chai": "^5.0.0", "@types/express": "^5.0.0", - "@types/express-session": "^1.17.4", + "@types/express-session": "^1.18.1", "@types/jest": "^27.0.2", "@types/js-yaml": "^4.0.9", "@types/jsonpath-plus": "^5.0.5", @@ -3842,6 +3843,7 @@ "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.18.1.tgz", "integrity": "sha512-S6TkD/lljxDlQ2u/4A70luD8/ZxZcrU5pQwI1rVXCiaVIywoFgbA+PIUNDjPhQpPdK0dGleLtYc/y7XWBfclBg==", "dev": true, + "license": "MIT", "dependencies": { "@types/express": "*" } @@ -5004,6 +5006,18 @@ "safer-buffer": "~2.1.0" } }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/assert-never": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.3.0.tgz", @@ -5283,6 +5297,12 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "license": "MIT" + }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -6194,6 +6214,23 @@ "proto-list": "~1.2.1" } }, + "node_modules/connect-mongo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-5.1.0.tgz", + "integrity": "sha512-xT0vxQLqyqoUTxPLzlP9a/u+vir0zNkhiy9uAdHjSCcUUf7TS5b55Icw8lVyYFxfemP3Mf9gdwUOgeF3cxCAhw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.1", + "kruptein": "^3.0.0" + }, + "engines": { + "node": ">=12.9.0" + }, + "peerDependencies": { + "express-session": "^1.17.1", + "mongodb": ">= 5.1.0 < 7" + } + }, "node_modules/consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", @@ -10119,6 +10156,18 @@ "node": ">=6" } }, + "node_modules/kruptein": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/kruptein/-/kruptein-3.0.7.tgz", + "integrity": "sha512-vTftnEjfbqFHLqxDUMQCj6gBo5lKqjV4f0JsM8rk8rM3xmvFZ2eSy4YALdaye7E+cDKnEj7eAjFR3vwh8a4PgQ==", + "license": "MIT", + "dependencies": { + "asn1.js": "^5.4.1" + }, + "engines": { + "node": ">8" + } + }, "node_modules/ldap-filter": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.3.3.tgz", @@ -10725,6 +10774,12 @@ "node": ">=6" } }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", diff --git a/package.json b/package.json index c99be31d8..f963ced4d 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "bcrypt": "^5.1.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", + "connect-mongo": "^5.1.0", "dotenv": "^16.0.3", "express-session": "^1.17.3", "handlebars": "^4.7.7", @@ -93,7 +94,7 @@ "@types/bcrypt": "^5.0.0", "@types/chai": "^5.0.0", "@types/express": "^5.0.0", - "@types/express-session": "^1.17.4", + "@types/express-session": "^1.18.1", "@types/jest": "^27.0.2", "@types/js-yaml": "^4.0.9", "@types/jsonpath-plus": "^5.0.5", diff --git a/src/main.ts b/src/main.ts index e7780f415..0497a6f28 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,4 +1,5 @@ import session from "express-session"; +import MongoStore from "connect-mongo"; import { NestFactory } from "@nestjs/core"; import { DocumentBuilder, @@ -95,21 +96,28 @@ async function bootstrap() { const expressSessionSecret = configService.get( "expressSessionSecret", ); + const mongoUrl = configService.get("mongodbUri"); + if (expressSessionSecret) { app.use( session({ secret: expressSessionSecret, resave: false, saveUninitialized: true, + store: MongoStore.create({ + mongoUrl, // MongoDB connection string + collectionName: "sessions", // Collection name for storing sessions + ttl: 24 * 60 * 60, // Session TTL (24 hours) + }), + cookie: { + secure: true, + }, }), ); } const port = configService.get("port") ?? 3000; - Logger.log( - "MongoDB URI : " + configService.get("mongodbUri"), - "Main", - ); + Logger.log("MongoDB URI : " + mongoUrl, "Main"); Logger.log("Scicat Backend listening on port: " + port, "Main"); await app.listen(port);