From b547fc3b5e24cac51ea9b2b7b716a0f8443ffac4 Mon Sep 17 00:00:00 2001 From: Sam Hadow Date: Wed, 12 Feb 2025 16:46:34 +0100 Subject: [PATCH] pug template engine --- package.json | 1 + src/app.js | 3 +++ src/controllers/account.js | 6 +++++ src/controllers/main.js | 35 ++++++++++++++----------- src/public/index.html | 52 -------------------------------------- src/routes/account.js | 8 ++++-- src/views/index.pug | 44 ++++++++++++++++++++++++++++++++ 7 files changed, 80 insertions(+), 69 deletions(-) delete mode 100644 src/public/index.html create mode 100644 src/views/index.pug 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 @@ - - - - - - - - - - - - - - - -
-
Please enable Javascript to use this app.
- - - - Get cookie - -
- - -
-
- - diff --git a/src/routes/account.js b/src/routes/account.js index 9e121c0..5e665f4 100644 --- a/src/routes/account.js +++ b/src/routes/account.js @@ -15,7 +15,11 @@ router .get(accountController.loginGetChallenge); router - .route("/verify-challenge") - .post(accountController.loginVerifyChallenge); + .route("/verify-challenge") + .post(accountController.loginVerifyChallenge); + +router + .route("/get-public-key") + .get(accountController.getPublicKey); module.exports = router; diff --git a/src/views/index.pug b/src/views/index.pug new file mode 100644 index 0000000..f29ee7a --- /dev/null +++ b/src/views/index.pug @@ -0,0 +1,44 @@ +doctype html +html(lang="en-US") + head + meta(charset="UTF-8") + meta(http-equiv="X-UA-Compatible" content="IE=edge") + meta(name="viewport" content="width=device-width, initial-scale=1") + link(rel="stylesheet" href="/style.css") + script(src="/socket.io/socket.io.js", defer) + script(src="/script.js", defer) + script(type="module", src="/ecc.js", defer) + script(type="module", src="/popups.js", defer) + link(rel="stylesheet" href="/css/bootstrap.min.css") + body + #mainbody + #jswarn Please enable Javascript to use this app. + + .btn-toolbar.btn-group-sm(role="toolbar", aria-label="Toolbar") + .btn-group.mr-2(role="group", aria-label="register") + button#register.btn.btn-secondary(type="button") register + button#login.btn.btn-secondary(type="button") login + + #registerPopup.popup + .popup-content + .btn-group.mr-2.w-100(role="group", aria-label="Add group") + input#sharedsecret.form-control.input-sm.w-50(type="password", placeholder="shared secret", required) + input#publickey.form-control.input-sm.w-50(type="text", placeholder="public key") + button#registerconfirm.btn.btn-secondary(type="button") register + button#registercancel.btn.btn-secondary(type="button") cancel + #registerPopupText + + #loginPopup.popup + .popup-content + .btn-group.mr-2.w-100(role="group", aria-label="Add group") + input#privatekey.form-control.input-sm.w-50(type="password", placeholder="private key", required) + button#loginconfirm.btn.btn-secondary(type="button") login + button#logincancel.btn.btn-secondary(type="button") cancel + + a.btn.btn-primary(href="./account/cookie") Get cookie + + ul#messages + + form#form(action="") + input#input(autocomplete="off") + button Send