diff --git a/package.json b/package.json index c4ca3e3..61a9610 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "express": "^4.21.2", "express-session": "^1.18.1", "pg": "^8.13.1", + "pug": "^3.0.3", "socket.io": "^4.8.1" }, "devDependencies": { diff --git a/src/app.js b/src/app.js index f0895f0..c8d8eb3 100644 --- a/src/app.js +++ b/src/app.js @@ -18,6 +18,8 @@ const SQLiteStore = require('connect-sqlite3')(session); // configure app app.set("port", port); +app.set('view engine', 'pug'); +app.set('views', __dirname + '/views'); app.use(cookieParser()); app.use(express.json()); app.use(session({ @@ -27,6 +29,7 @@ app.use(session({ saveUninitialized: true, cookie: { maxAge: 7 * 24 * 60 * 60 * 1000 } // 1 week })); + app.use("/", routes); // bootstrap app.use('/css', express.static(__dirname + '/node_modules/bootstrap/dist/css')); diff --git a/src/controllers/account.js b/src/controllers/account.js index 0f2f08c..e90c192 100644 --- a/src/controllers/account.js +++ b/src/controllers/account.js @@ -55,10 +55,16 @@ const accountController = { const sig = new TextEncoder().encode(signature); let validKey = authentication.verifySignature(msg, sig, publicKeys); if (validKey !== null) { + req.session.publicKey = validKey; return res.status(200).json({ message: "Challenge solved successfully" }); } else { return res.status(400).json({ error: "Challenge failed" }); } + }, + getPublicKey: (req, res) => { + if (req.session.publicKey != null) { + return res.status(200).json({ publicKey: req.session.publicKey }); + } } }; diff --git a/src/controllers/main.js b/src/controllers/main.js index 010aed9..d34d715 100644 --- a/src/controllers/main.js +++ b/src/controllers/main.js @@ -1,21 +1,26 @@ const path = require('path'); const mainController = { - root: (req, res) => { - res.sendFile(path.resolve(__dirname + '/../public/index.html')); - }, - style: (req, res) => { - res.sendFile(path.resolve(__dirname + '/../public/style.css')); - }, - script: (req, res) => { - res.sendFile(path.resolve(__dirname + '/../public/script.js')); - }, - ecc: (req, res) => { - res.sendFile(path.resolve(__dirname + '/../public/ecc.js')); - }, - popups: (req, res) => { - res.sendFile(path.resolve(__dirname + '/../public/popups.js')); - } + root: (req, res) => { + if (typeof req.session.publicKey === 'undefined') { + // main page when not logged in + res.render('index'); + } else { + res.render('index'); + } + }, + style: (req, res) => { + res.sendFile(path.resolve(__dirname + '/../public/style.css')); + }, + script: (req, res) => { + res.sendFile(path.resolve(__dirname + '/../public/script.js')); + }, + ecc: (req, res) => { + res.sendFile(path.resolve(__dirname + '/../public/ecc.js')); + }, + popups: (req, res) => { + res.sendFile(path.resolve(__dirname + '/../public/popups.js')); + } }; module.exports = mainController; diff --git a/src/public/index.html b/src/public/index.html deleted file mode 100644 index 97c46da..0000000 --- a/src/public/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - -
- - - - - - - - - - - - -