diff --git a/package-lock.json b/package-lock.json index f2f434b..42ccfef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "license": "ISC", "dependencies": { "bcrypt": "^5.0.1", + "connect-mongo": "^4.4.1", "dotenv": "^8.2.0", "express": "^4.17.1", "express-session": "^1.17.1", @@ -224,6 +225,17 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "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==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -260,6 +272,11 @@ "safe-buffer": "^5.1.1" } }, + "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/body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -578,6 +595,40 @@ "node": ">=8" } }, + "node_modules/connect-mongo": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-4.4.1.tgz", + "integrity": "sha512-I1QUE2tSGPtIBDAL2sFqUEPspDeJOR0u4g+N41ARJZk958pncu2PBG48Ev++fnldljobpIfdafak7hSlPYarvA==", + "dependencies": { + "debug": "^4.3.1", + "kruptein": "^3.0.0", + "mongodb": "3.6.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/connect-mongo/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/connect-mongo/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -1305,6 +1356,17 @@ "json-buffer": "3.0.0" } }, + "node_modules/kruptein": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kruptein/-/kruptein-3.0.0.tgz", + "integrity": "sha512-Fh5sIb+3XI9L12GsgeBQqXVRPLB1HVViKSUkqPPOcqTEX4NwoF8Z3pEfMSl3Psd1j+QlloV8Uxxwp4gk3aFBGA==", + "dependencies": { + "asn1.js": "^5.4.1" + }, + "engines": { + "node": ">6" + } + }, "node_modules/latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", @@ -1425,6 +1487,11 @@ "node": ">=4" } }, + "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==" + }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -2615,6 +2682,17 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -2644,6 +2722,11 @@ "safe-buffer": "^5.1.1" } }, + "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==" + }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -2891,6 +2974,31 @@ "xdg-basedir": "^4.0.0" } }, + "connect-mongo": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-4.4.1.tgz", + "integrity": "sha512-I1QUE2tSGPtIBDAL2sFqUEPspDeJOR0u4g+N41ARJZk958pncu2PBG48Ev++fnldljobpIfdafak7hSlPYarvA==", + "requires": { + "debug": "^4.3.1", + "kruptein": "^3.0.0", + "mongodb": "3.6.5" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -3460,6 +3568,14 @@ "json-buffer": "3.0.0" } }, + "kruptein": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kruptein/-/kruptein-3.0.0.tgz", + "integrity": "sha512-Fh5sIb+3XI9L12GsgeBQqXVRPLB1HVViKSUkqPPOcqTEX4NwoF8Z3pEfMSl3Psd1j+QlloV8Uxxwp4gk3aFBGA==", + "requires": { + "asn1.js": "^5.4.1" + } + }, "latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", @@ -3543,6 +3659,11 @@ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true }, + "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==" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", diff --git a/package.json b/package.json index 0ef14f3..dbf2419 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "homepage": "https://github.com/anatolykopyl/registration#readme", "dependencies": { "bcrypt": "^5.0.1", + "connect-mongo": "^4.4.1", "dotenv": "^8.2.0", "express": "^4.17.1", "express-session": "^1.17.1", diff --git a/public/index.html b/public/auth.html similarity index 100% rename from public/index.html rename to public/auth.html diff --git a/public/personal.html b/public/personal.html new file mode 100644 index 0000000..54d314d --- /dev/null +++ b/public/personal.html @@ -0,0 +1,16 @@ + + + + + + + + Personal page + + +

Personal page

+
+ +
+ + \ No newline at end of file diff --git a/server.js b/server.js index b76d8b6..5930d06 100644 --- a/server.js +++ b/server.js @@ -2,24 +2,33 @@ const express = require('express') const session = require('express-session') const app = express() const {MongoClient} = require('mongodb') +const MongoStore = require('connect-mongo'); const bcrypt = require('bcrypt') -//const uuid4 = require('uuid4') require('dotenv').config() app.use(express.static("public")); app.use(express.json()) + +const client = new MongoClient(process.env.URI, { useUnifiedTopology: true }) + app.use(session({ secret: process.env.SECRET, resave: false, saveUninitialized: true, + store: MongoStore.create({ + client, + dbName: 'reg_example' + }), cookie: { maxAge: 1000 * 60 * 60 * 24 } })) -const client = new MongoClient(process.env.URI, { useUnifiedTopology: true }) client.connect() -app.get('/', (_, res) => { - res.sendFile('index.html') +app.get('/', (req, res) => { + if (req.session.loggedIn) { + res.sendFile(__dirname+'/public/personal.html') + } else + res.sendFile(__dirname+'/public/auth.html') }) app.get('/get-users', async (_, res) => { @@ -39,6 +48,7 @@ app.get('/register', async (req, res) => { login: req.query.login, pass: hashedPass }) + req.session.loggedIn = true res.status(201).send("Welcome aboard!") } catch (e) { console.log("Error: " + e) @@ -52,6 +62,7 @@ app.get('/login', async (req, res) => { login: req.query.login }) if (user && bcrypt.compareSync(req.query.pass, user.pass)) { + req.session.loggedIn = true res.status(200).send("Logged in!") } else { res.status(401).send("Invalid login credentials")