diff --git a/web-portal/client/images/logos/logo_red_no_border_568x385.png b/web-portal/client/images/logos/logo_red_no_border_568x385.png new file mode 100644 index 0000000..67bbfc4 Binary files /dev/null and b/web-portal/client/images/logos/logo_red_no_border_568x385.png differ diff --git a/web-portal/client/js/main.js b/web-portal/client/js/main.js index 57924e7..7e35457 100644 --- a/web-portal/client/js/main.js +++ b/web-portal/client/js/main.js @@ -1,13 +1,13 @@ /******************************************************************************* - * + * * main.js: Page-level code used by the main.pug page. - * - * + * + * * 2022-03-09 Frank Halasz - * - * - * Copyright: 2022 by Interlisp.org - * + * + * + * Copyright: 2022 by Interlisp.org + * * ******************************************************************************/ @@ -21,7 +21,7 @@ var localStore; window.addEventListener('resize', (event) => { - fillWindowOnClick(); + fillWindowOnClick(); }); window.addEventListener('load', (event) => { @@ -30,6 +30,14 @@ window.addEventListener('load', (event) => { const rr = urlParams.get('rr') || false; const fromvnc = urlParams.get('fromvnc') || false; + if (isAutoLogin) { + document.body.style.backgroundImage = "url('images/logos/logo_red_no_border_568x385.png')"; + document.body.style.backgroundRepeat = "no-repeat"; + document.body.style.backgroundPosition = "center"; + document.body.style.position = "relative"; + } + else document.getElementById("page-container").style.visibility = "visible"; + if (targetSystem == "Notecards") { document.getElementById("fill_window_cb").checked = true; document.getElementById("dev-div").style.display = "none"; @@ -50,6 +58,14 @@ window.addEventListener('load', (event) => { document.getElementById("custom_init_cb").checked = false; document.getElementById("sftp_checkbox").checked = false; document.getElementById("interlisp_rb").checked = true; + } else if(isAutoLogin) { + document.getElementById("fill_window_cb").checked = true; + document.getElementById("dev-div").style.display = "none"; + document.getElementById("do_not_checkbox_div").style.display = "none"; + document.getElementById("run_notecards_cb").checked = alNotecards; + document.getElementById("run_rooms_cb").checked = alRooms; + document.getElementById("sftp_checkbox").checked = false; + document.getElementById("interlisp_rb").checked = true; } else if(isGuest) { document.getElementById("fill_window_cb").checked = true; document.getElementById("dev-div").style.display = "none"; @@ -85,7 +101,7 @@ window.addEventListener('load', (event) => { fillWindowOnClick(); document.getElementById("dev-options-checkbox").checked = (localStore.getItem("show_dev_options") == "true"); showDevOptionsOnClick(); - if(! fromvnc) { + if( ! (isAutoLogin || fromvnc)) { if(isVerified != true) { const dlg = document.getElementById(rr ? "verification-dialog2" : "verification-dialog1"); dlg.showModal(); @@ -97,6 +113,7 @@ window.addEventListener('load', (event) => { dlg.showModal(); } } + if(isAutoLogin && (! fromvnc)) startSession("interlisp"); }); function startSession (interlispOrXterm) { @@ -165,6 +182,7 @@ function startSession (interlispOrXterm) { + `&rooms=${runRooms || "false"}` + `&sftp=${startSftp || "false"}` + `&exec=${medleyExec || "inter"}` + + ( isAutoLogin ? "&autologin" : "") ); } ); @@ -181,6 +199,7 @@ function startSession (interlispOrXterm) { + `&rooms=${runRooms || "false"}` + `&sftp=${startSftp || "false"}` + `&exec=${medleyExec || "inter"}` + + ( isAutoLogin ? "&autologin" : "") ); } }, diff --git a/web-portal/client/novnc_oio/ui.js b/web-portal/client/novnc_oio/ui.js index df56a43..2846799 100644 --- a/web-portal/client/novnc_oio/ui.js +++ b/web-portal/client/novnc_oio/ui.js @@ -1161,7 +1161,10 @@ const UI = { // // UI.openControlbar(); // UI.openConnectPanel(); - window.location.assign(window.location.origin + "/main?fromvnc=1"); + if(document.location.href.match(/autologin/)) + window.location.assign(window.location.origin + "/main?fromvnc=1&autologin=1"); + else + window.location.assign(window.location.origin + "/main?fromvnc=1"); }, securityFailed(e) { diff --git a/web-portal/client/stylesheets/main.css b/web-portal/client/stylesheets/main.css index b82e1bb..0d9dee2 100644 --- a/web-portal/client/stylesheets/main.css +++ b/web-portal/client/stylesheets/main.css @@ -10,6 +10,10 @@ * **************************************************************************/ +#page-container { + visibility: hidden; +} + #logged-in-as { font-size: 15px; font-style: italic; diff --git a/web-portal/client/views/main.pug b/web-portal/client/views/main.pug index db0f429..6747730 100644 --- a/web-portal/client/views/main.pug +++ b/web-portal/client/views/main.pug @@ -22,6 +22,9 @@ block headeradds const isGuest = #{isGuest}; const isVerified = #{isVerified}; const nodisclaimer = #{nodisclaimer}; + const isAutoLogin = #{isAutoLogin}; + const alNotecards = #{notecards}; + const alRooms = #{rooms}; link(rel="stylesheet", href="/stylesheets/main.css") diff --git a/web-portal/server/js/app.js b/web-portal/server/js/app.js index 7003441..3673eca 100644 --- a/web-portal/server/js/app.js +++ b/web-portal/server/js/app.js @@ -19,6 +19,7 @@ const express = require('express'); const logger = require('morgan'); const session = require("express-session"); const passport = require('passport'); +const url = require('url'); //const favicon = require('serve-favicon') // Set up main app as well as the filesApp @@ -86,17 +87,32 @@ app.use('/js', express.static(config.clientJsPath)); app.get('/main', ensureLoggedIn(), async (req, res, next) => - { res.render('main', + { + res.render('main', { login: req.user.username, isGuest: (req.user.username == config.guestUsername), isVerified: (await userRouter.getIsVerified(req) ? 'true' : 'false'), nodisclaimer: (await userRouter.getNoDisclaimer(req) ? 'true' : 'false'), - isNCO: config.isNCO(req) - } - ); - } - ); + isNCO: config.isNCO(req), + isAutoLogin: (req.query.autologin != undefined), + notecards: (req.query.notecards != undefined), + rooms: (req.query.rooms != undefined) + } + ); + } + ); +app.get('/guest', + (req, res) => { + const newQuery = {}; + newQuery.autologin = ""; + newQuery.username = config.guestUsername; + newQuery.password = config.guestPassword; + if(req.query.notecards != undefined) newQuery.notecards=""; + if(req.query.rooms != undefined) newQuery.rooms=""; + res.redirect(url.format({pathname:"/user/autologin", query: newQuery})); + } + ); app.use('/user', userRouter); app.use('/medley', ensureLoggedIn(), medleyRouter); app.use('/client', ensureLoggedIn(), clientRouter); diff --git a/web-portal/server/js/medley.js b/web-portal/server/js/medley.js index 1fa5404..07e01e2 100644 --- a/web-portal/server/js/medley.js +++ b/web-portal/server/js/medley.js @@ -272,6 +272,7 @@ function goToVnc(req, res, next) { var url = `/client/go?target=${req.oioTarget}&port=${req.oioPort}&autoconnect=1&view_only=0`; url = `${url}${config.supportHttps ? "&encrypt=1" : ""}&u=${req.user.uname}&p=${req.sftpPwd}`; if(config.isNCO(req)) url = `${url}&nco=1`; + if(req.query.autologin != undefined) url = `${url}&autologin=1`; res.redirect(url); } diff --git a/web-portal/server/js/user.js b/web-portal/server/js/user.js index 6b30b12..e09e808 100644 --- a/web-portal/server/js/user.js +++ b/web-portal/server/js/user.js @@ -92,44 +92,55 @@ passport.deserializeUser(userModel.deserializeUser()); // // -userRouter.post('/login', - (req, res, next) => { - passport.authenticate('local', - (err, user, info) => { - if (err) { - return next(err); - } +function passportAuthenticate(req, res, next) { + passport.authenticate('local', + (err, user, info) => { + if (err) { + return next(err); + } - if (!user) { - console.dir(info); - return res.redirect('/user/login?info=' + info); - } + if (!user) { + console.dir(info); + return res.redirect('/user/login?info=' + info); + } - req.logIn(user, async function(err) { - if (err) { + req.logIn(user, + async function(err) { + if (err) { return next(err); - } else { - try { - await userModel.updateOne({username: user.username},{$set: {lastLogin: Date.now()}, $inc: {numLogins : 1}}); - } catch (err) { - console.log("Update last login time error: " + err); - } - try { - await loginModel.create({username: user.username, timestamp: Date.now()}); - } catch (err) { - console.log("Error in logging login: " + err); - } - if(user.uname) - return res.redirect('/main'); - else - return res.render('reregister', {isNCO: config.isNCO(req)}); - } - }); - - })(req, res, next); - } -); + } else { + try { + await userModel.updateOne({username: user.username},{$set: {lastLogin: Date.now()}, $inc: {numLogins : 1}}); + } catch (err) { + console.log("Update last login time error: " + err); + } + try { + await loginModel.create({username: user.username, timestamp: Date.now()}); + } catch (err) { + console.log("Error in logging login: " + err); + } + if(user.uname) + if ((user.uname == "guest") && (req.query.autologin != undefined)) { + const newQuery={}; + newQuery.autologin=""; + if(req.query.notecards != undefined) newQuery.notecards=""; + if(req.query.rooms != undefined) newQuery.rooms=""; + return res.redirect(url.format({pathname:"/main", query: newQuery})); + } + else + return res.redirect('/main'); + else + return res.render('reregister', {isNCO: config.isNCO(req)}); + } + } + ); + } + )(req, res, next); +} + +userRouter.post('/login', passportAuthenticate); +userRouter.get('/autologin', passportAuthenticate); userRouter.get('/login', (req, res) => {