From 01dd8e62facf577244b6411c3becd961dc4a1c6f Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sat, 15 Mar 2025 19:47:02 +0000 Subject: [PATCH 01/26] Add capability to start online medley directly, skipping login and the main run-medley page, using the url https://online.interlisp.org/guest?notecards&rooms . Automatically does a guest login. --- web-portal/client/js/main.js | 15 +++++- web-portal/client/views/main.pug | 3 ++ web-portal/server/js/app.js | 28 ++++++++--- web-portal/server/js/user.js | 79 ++++++++++++++++++-------------- 4 files changed, 84 insertions(+), 41 deletions(-) diff --git a/web-portal/client/js/main.js b/web-portal/client/js/main.js index 57924e7..dd4c951 100644 --- a/web-portal/client/js/main.js +++ b/web-portal/client/js/main.js @@ -21,7 +21,7 @@ var localStore; window.addEventListener('resize', (event) => { - fillWindowOnClick(); + fillWindowOnClick(); }); window.addEventListener('load', (event) => { @@ -50,6 +50,18 @@ 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"; + hideRow("resume"); + showRow("initial_exec"); + showRow("run_notecards"); + showRow("run_rooms"); + document.getElementById("run_notecards_cb").checked = ilNotecards; + document.getElementById("run_rooms_cb").checked = ilRooms; + 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"; @@ -97,6 +109,7 @@ window.addEventListener('load', (event) => { dlg.showModal(); } } + if(isAutologin) startSession("interlisp"); }); function startSession (interlispOrXterm) { 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..1d4aeb5 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, + 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/user.js b/web-portal/server/js/user.js index 6b30b12..e6c8ed7 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) => { From ba46128c1696a3a0f0d50ba3ec78314e7603ce87 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sat, 15 Mar 2025 20:13:19 +0000 Subject: [PATCH 02/26] Fix typo in server/js/user.js --- web-portal/server/js/user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-portal/server/js/user.js b/web-portal/server/js/user.js index e6c8ed7..e09e808 100644 --- a/web-portal/server/js/user.js +++ b/web-portal/server/js/user.js @@ -121,7 +121,7 @@ function passportAuthenticate(req, res, next) { console.log("Error in logging login: " + err); } if(user.uname) - if (user.uname == "guest") && (req.query.autologin != undefined) { + if ((user.uname == "guest") && (req.query.autologin != undefined)) { const newQuery={}; newQuery.autologin=""; if(req.query.notecards != undefined) newQuery.notecards=""; From 4490725694a19edd26acf15d4b89d205fb8c4986 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sat, 15 Mar 2025 20:44:17 +0000 Subject: [PATCH 03/26] Fix typo in server/js/app.js --- web-portal/server/js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-portal/server/js/app.js b/web-portal/server/js/app.js index 1d4aeb5..3d8b84e 100644 --- a/web-portal/server/js/app.js +++ b/web-portal/server/js/app.js @@ -95,7 +95,7 @@ app.get('/main', isVerified: (await userRouter.getIsVerified(req) ? 'true' : 'false'), nodisclaimer: (await userRouter.getNoDisclaimer(req) ? 'true' : 'false'), isNCO: config.isNCO(req), - isAutoLogin: req.query.autologin, + isAutoLogin: (req.query.autologin != undefined), notecards: (req.query.notecards != undefined), rooms: (req.query.rooms != undefined) } From f7aa34e670b1a13378114ec64902125ca4fb90e7 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sat, 15 Mar 2025 21:13:50 +0000 Subject: [PATCH 04/26] More typos - capitalization errors --- web-portal/client/js/main.js | 2 +- web-portal/server/js/app.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web-portal/client/js/main.js b/web-portal/client/js/main.js index dd4c951..3058c6d 100644 --- a/web-portal/client/js/main.js +++ b/web-portal/client/js/main.js @@ -109,7 +109,7 @@ window.addEventListener('load', (event) => { dlg.showModal(); } } - if(isAutologin) startSession("interlisp"); + if(isAutoLogin) startSession("interlisp"); }); function startSession (interlispOrXterm) { diff --git a/web-portal/server/js/app.js b/web-portal/server/js/app.js index 3d8b84e..3673eca 100644 --- a/web-portal/server/js/app.js +++ b/web-portal/server/js/app.js @@ -105,7 +105,7 @@ app.get('/main', app.get('/guest', (req, res) => { const newQuery = {}; - newQuery.autoLogin = ""; + newQuery.autologin = ""; newQuery.username = config.guestUsername; newQuery.password = config.guestPassword; if(req.query.notecards != undefined) newQuery.notecards=""; From 8956308d06589bebfead77be67051bddfb7a71b9 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sat, 15 Mar 2025 22:21:25 +0000 Subject: [PATCH 05/26] Another set of typos in client/js/main.js --- web-portal/client/js/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web-portal/client/js/main.js b/web-portal/client/js/main.js index 3058c6d..5bb318a 100644 --- a/web-portal/client/js/main.js +++ b/web-portal/client/js/main.js @@ -58,8 +58,8 @@ window.addEventListener('load', (event) => { showRow("initial_exec"); showRow("run_notecards"); showRow("run_rooms"); - document.getElementById("run_notecards_cb").checked = ilNotecards; - document.getElementById("run_rooms_cb").checked = ilRooms; + 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) { From 1d395d73d4a49d38bcd101506c72da51926637b3 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sat, 15 Mar 2025 22:48:21 +0000 Subject: [PATCH 06/26] Prevent disclosure dialog when doing autologin --- web-portal/client/js/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-portal/client/js/main.js b/web-portal/client/js/main.js index 5bb318a..3d1db00 100644 --- a/web-portal/client/js/main.js +++ b/web-portal/client/js/main.js @@ -97,7 +97,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(); From 0613ac8bffb13ff791309537d480b16451964f68 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sat, 15 Mar 2025 23:50:36 +0000 Subject: [PATCH 07/26] Try to hide main page in autologin case --- web-portal/client/js/main.js | 16 +++++++++------- web-portal/client/stylesheets/main.css | 4 ++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/web-portal/client/js/main.js b/web-portal/client/js/main.js index 3d1db00..f13edf0 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 + * * ******************************************************************************/ @@ -30,6 +30,8 @@ window.addEventListener('load', (event) => { const rr = urlParams.get('rr') || false; const fromvnc = urlParams.get('fromvnc') || false; + if (! isAutoLogin) document.getElementById("page-container").style.visibility = "visible"; + if (targetSystem == "Notecards") { document.getElementById("fill_window_cb").checked = true; document.getElementById("dev-div").style.display = "none"; diff --git a/web-portal/client/stylesheets/main.css b/web-portal/client/stylesheets/main.css index b82e1bb..7648dc5 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; From 17b75f0cde1cfb84c86e834ca09b40d3d5574872 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sun, 16 Mar 2025 00:11:37 +0000 Subject: [PATCH 08/26] fix typo in main.css --- web-portal/client/stylesheets/main.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-portal/client/stylesheets/main.css b/web-portal/client/stylesheets/main.css index 7648dc5..0d9dee2 100644 --- a/web-portal/client/stylesheets/main.css +++ b/web-portal/client/stylesheets/main.css @@ -11,7 +11,7 @@ **************************************************************************/ #page-container { - visibility: "hidden"; + visibility: hidden; } #logged-in-as { From 5c8c7d543def81ab9507a750768b9a925c854c45 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sat, 15 Mar 2025 21:36:33 -0700 Subject: [PATCH 09/26] Add files via upload Add latest logo file Signed-off-by: Frank Halasz --- .../images/logos/logo_red_no_border_568x385.png | Bin 0 -> 19433 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 web-portal/client/images/logos/logo_red_no_border_568x385.png 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 0000000000000000000000000000000000000000..67bbfc45c51a530661642773ba1f8f62c09852ca GIT binary patch literal 19433 zcmeIaWmJ{#w=TR;q*J;}8YvZNq(MTuI|Zam8bPE}5KvkgWD(NcT@s5<>F$R2Ucdd{ z?|a@e_Bdmoan9J|d^jH*2a$3P0*(9ZjWW0~Sbv^~hPh;;$sFY46WmI? z@sUI*Gw#&HEmO*7kt_(H)_?O|Mm-Vhk(_pw#n{G8U}DYmvmdhD_0y@1ez1fc69&s6 zk2r`2cOEmMD9#%R35jQPeeaR~`Ohl`Uij|<@(v*(Au?`BOE|c=vAdkDG_^wjz&xL>)-qBN<4eEC`jlq2|7ytmLO@b{uRqfob+z3RjC(>>0RV?hSqC!ae_TEP&0Qb;wK zS4@lfKE!?f>dZuXRW`eKd&8_^Vq)@JoVt%_N>cJaSnuv7d?U|BN`|lC;XMKKcGA|? z*1y|(s$Y^~nwXk`d#0_r@bi5OXOfq9K;tZ$Kr5Oc1rJ_w;B~k;-+Lb{D#6{x&hj7Z z881>EgpB6{@q*VuEVGx!}i5M^OQ+H#Ks?Tv zh~OXBJXpe6i%DSB6w6eS5Wt|#dKBvZZ+`s|nK2}eUM|b?Yy+o?%R1Mnoo#2!6;`ZS9I2^SYa{rowmfct)g8?l53 zWqtm?gT-15W7@|@0n|O$Wsa*->9Bb)$C#bzI#(NfVH(=F7ykkY@<2R^RDRcy3d>=* zp&cC^Y1O${f#>wW-X^j~D*u#{6o?2(74f57^u4kD_veFenANj++Rc_4KgJ`^LP=oP z*CBjhw4JSrM8#TTa#IF#{$Ic<2YS=6LU6N8iO{EDlT3JiJfETYOCsR58`Ej|orpJe z=zZ{;czdqa%>44%y&8`b3otO$qZjm94gUIS{{d<`U|>nA|KPDL{V-krJ~)={)YIp; zc#k7^gru057;stKe|cELkn7$I!J_wxLOgAq+|N;oN}sIT08}i=1dXD#h#%haL+OTk zdMU$vsfvuVFu7;1|F2{H4`R;W9mI{n*NdOUGGlhRye}Qnc?dZS*sRE|?zpVS^XDEi zLPJ8t;-UY9En2_vQ7r%C#P(op)0y8^#`Depi6lOiC{d z*i8R`<2FalQ@g+3;%HA!pMQVEqCQlefL&9fAG|vJQFdos%?DD*eR1V8RCl7;viGg{ zx$Pal5@FcaV&N<$z%I~KS1uEc7H@P*Dm6DFAE?hOdut~bgaX<>%{B(N+;1%MEqrUs zkWSt?QtImZ`%(8w^!h@CcI(05+wUQtDf_eWeCX(}lohua3EAVI)|j7re+AeX@yodUx!f0s zf)o>3_i)yb7U1LR)fZ_^O?d?SHH%ZS=zjVbM~v7RMF*4>wrUwnMKS zZe1CqXX-ibIp;#%mqJ8>BM3yO_loRkruO*$5GpI028iRc=RECe3(8>AL&-me{00jP zkr%&N)qpiQ(9gv;^hO+LY*+_;EptRK_Bxl-$!jx{DC;zAZ7D$?#g}^gJCaOnwuVN{ zynksDPuw||qLH%j=B>D^q1C3Y(4(4pnba2?(lfMuRsc`pl1h|)lBA;tV(VV;JUq(l z2vn>v)h?Adw&NO$xtF)2HQJoP?K6>d&UrqTkL!M85_(Jn(46nhVy#cqIBT|U%=KV3 zpNhLi6keY3bgA~SC#F9CTLVkctdXq@HUl=znLm>y24&Md&}Z~?W{YP|{MFHwPys

Bt^S=8dl{)QOho4s?EMCO4D6!Us`F&x~@4 zNJ;8`SkZwu=6ufymG(HH$_SO5QPCsy#rZCS?0mqpN*vrL-Czlbwgjq!&ohzY#?7@G z2}@=}!4uRE%GC|JXRck1Hs|$^-9kc~p2F{H;hh!y?5xIqF2MZ$sqA)Lcb(7c;`(z> zaL)tGAVl|6a3S6UjJD5woiX^0dg141t~t<4T%7EkOW6lcnk5&{sELb&fU91bxQTZX z@wxyr*0{}=#W+u6Ea(kyTIovdW>{qPqb@6Yw5oe|QZn7KnZgNUvwdl^=HLVaZ9x1+ zJTunF2UqmXb=(0R6#31}#$rqA_jNuE;#1B@ayHp{35i+|h?Vi*|9BPqLDI0lPQf9q znOK=Z>@5p-Ioqz~$6}%1XOt272DDl4K`Mbyj}(eThR$3dV_5n!i(kdU@5#oRU&Bx` z(phA_BDh9HS^$z2&?o3kt+IH-k+Q)dp_gbrq0`YQ%-7I)IcJxi5L=1;%0JT*7P1<~ zu+b@3dfz~C{?)I|^$JZ7W)I;Z`;5UFU&f`Bq@a|*jOjYjHzIP2-D_?h zyHB=@2)rx9Z9ZrGb5>hQ*5gXwn6S(Xo{qe-d1MN;QzB%K_i|i&Tv7xxnmy8cD@*ke69sIz_U2|h>kxFc7y84_p&nD&;_mKW-gB&AalIttdl#fjnB zAj=-OCmmAt`=TCna%w2UcSrQ6Ne?pC(;D)FTlQFhu`0cK`8-@TfPp8u_TU-KUbshT z@g;8AaJ1-dylh-oJXQ9fVZiviCjZsw)mHSI<=Yz!l?UO#Q;%>X(iy5UsKS@R?3x_X zl*ETm=4W-KGX!#rO_jrZu+Dy(>K|W2J$yU3cqNpx3)CsTVA(z^U^VS`n~Dy9SV4r` zq}`R;&91o)U3RQ0btKV;GQZ{>O6wlnzl*)x?O5uK)Ibk1NVLUuSK(F>`5yUML*JzeHgEknGIx$wx3rqhg&#`+LD8haZ?Zyc&|sOZolU)h7)m^aqh^ zRjPfef;HZ;Y#OFsgA>tM*UFo;y3P%UdGjy6joAe~)`9dLtzA}&-sr8%hvck-7D>{W zi419aMzdF}c5d525ognW+E#^{qOs8X@N!MX%z=q!CA0ev`9;Dpd#|Ea868hTjb*|e zAg>|W4Hu}uP_Ss`pE~N3*zmN}>DP6zLdz+51ISW6+smC4s=~FcS=8Ue4lhV2hj%Nl zdkTiJU!eh1wa~3TIjE?a_j{%ya>M7p4N^TQduYuEyCwA6pD+Sa2 z-6MS82h7dyFHdbR%FdZ?7n7N)Jh|RdEh39|SNZPzd1W7_a#NKtRVc~yaxWpo^eY~S z8Oj#hvv}WUrXPaYzL}r#qmZol&I=41eqQUwG}yq<=YNB@LLBtI%x)%3_Z>#i$-vcz z{(`;)(K3R?w%c(frf{ObatE5EU~I8bNkdU>rWxl>pgSg8wueXWmp}(+FE}YJCsEe z$&spItHSMDxr{OX)iGXv(OR@$#XmUsyFiWeJkFxpZX+mMhNxCVeP-^;fsy{fORV6t z<0eFQrN?S={>H(pL~=fX>iWWuTi9u<$A-HKpN$-iCF1h7gf)7(K=gqm0e|MJ-XpiHm}6o7S(Uk zYuUiuqa?Wd+3ImF7-yKw0KT7;?nPP{*D0BJVRg_q5mT*IcISo?FuTXcr!Ej~vs ztc1g-7i~(?7eN;QZ>t@V{)JEg9;?kLiAtnQ7D9S3WwtAI(x~nS#1Y>=7XXx$PK5JP~Vz z=bYjl4p#s7NQe1`wTs#absJ*=hpC;EvUk`_7)Y`+L(F12{C|Wm*|HI;ObEMF6WHnN zgx#&b=O@385?M9I<-_D-RT$hB%@gR4Tymhkn%DO4r@tnR3>nt&NxvM{D4mXBSgC02 ze(8xAZ}D~WSbN%S_mk~|sAJH)-IUw?Hs3f;A+`_WLq*}HA$(9crU(0R`=v#|y z$2WR9-$+FJYP6D$TgMOMqb=JV&-G+r?+Z1sbfnaO%gDIu!0z!~V%~RcSJFh69d^)- z?dR=+0QZW#Tk*3?q)La@GxOLsnh7g-eD_NyP}flX#qENSYZp$#OD3!I)C=j97|7OHm%N_21u_?_O`Pu!$63uw>a!V_aALqP1rY z)_(o)v_Xjw7^fuW4Az;ZFl6e23XRv`nQ8xdOx{WqryG(Q80j>Z0$<1?5e(15&^*l|4b&!ELXJ#e` zVg!d5l5ElsDc_L#Z|QN0HME*eC|_rl=#b=Q-qBkzGESdU_@8_@pXIuwb7P1Tqgsfd z*Y)388A4BND?FeyN2m*2jSxZJ2;HqVJ(NCWtKi%pLhu**OtGa-AJ#r{S5`WM06`IJ zdF41)ZP$L@uQ*(GKDw?HT-qrv3eOv`xueN3Dnmr$O|&#hL}!RjmIPOY9`}wz6JP2Z z^U3elz0hWklyZF1F3iRNmg7chYT)Cl2Zy#|}KWDon~%WA>MLSHypu`$eA&Xgj9c z20RQiZMwb=uzwtv+@v74Non;|1*TyEa)dubY?5;>2lFkzL~PG)wbhH6A|9uq6x|1e z!7a_4lnaH~xe1B87#Eh{noeOFJ*1RS%dz6=9Jr(NzB%{6(V!MBujekP4VNhvH%^td zhq@yM{nySlrm|OTkerM>+7;<4o=}^j1BBXVjT9sj)6R@NBz{Z%XNGC7{~5H15dvmIgOc>Qxx> zDMAF?47|zYLZ0~lCRusR02#~Sugv>!C-XejJVkkja^r0ndau17;zsX?<#$9A@}%bL zqbEhri+3CH!W2zW3Wt>cXQdnDz1WMWEf{&c|9G)E*Zn< z*w|y7lqZa>z4qz9h-2A1EU%1HVY|%mT|B0-Vo;OZ-{vK_0FZ+1 zhB?f#`wRW)0mQEQcWX#S$SGD-=fe~wAKFC)!T#JQ93u?1-^oaV2q1McHaw_v>Gaw- zjIuphjE)lw&{q?UXVZQlSWDd~oc{A~oeW?ggHw`zaeAQx|Gy$VtzL3Glh`#oMTX5BPSv8fWmRbAh_$h&b$*BP8kTve$+A8Z zN-5>F5Dbr8y|(AuAMBR`a#8WIyUQ*sY76oX4%NDRXU&E!sqy5>LV)bAhYvcOumCl3 z4KH^0UCzM>X`R#=eFVcre*c%|D&YLgsC2l}`bYO6CGL5-viPzKM7?!fARnQRkkHva zHm8?u!l0PJ&v%W@{szTMVOGt3gM-*hiB8BCaxO=U)&n?Z{@Wl}ry1##^vZju=sKOX zQfQ^!H04#@OPW6t-)ly6F>=w$BBE6=7u(FEzK;E7wPq+Q!^@=qpe690Zj*B2l^u%ySE;y8RUAhQMI6`d zana#4p`R3A*gCqqO}GB!z&G>-HiiFhkMPFH9+a*rsHR!-v!C+%jc6}jty|qTFG@>> zFYR8*tJtbAq0~%xF~xVH(Vb7oDrqtus7h#;BmTzRZmT+Yqou&>>=2#PAf??v{2NFc zwm19Wn_9I;7n{kEoqjA`(iql42*ZDIQo+yEBA2f zgej5S2va)Pe9q8g&u+NG{Tx3YVp3{58}xU}J@1|+oIrA*!x5o>dsdj#O(1~&G02n3 zpZ|0SZr1ZR8lLBpZ3Q{nr?w32o9p-sk_ihb7e(|DnU1 zqx64wTn2xLsR|tn$ULC{^eqKkw0yWP^>i0^pZiW^efe=_363{)5s)IQRog56fW!tQ zFYQeWzPpHaSl--ASWB%_Sa(sn?}Rs!&uxG_0YsNa-(b}?1j@A&F{TVX~bOm-lmUCm0K_o+1 zdC2(7z22e$WOVYsQG7bbyzoNsbH_8;Z4F`!&eLte-zhMmk?4P~1z0XSADJwmm;Dhi z&n^p-dUnIs8R5g7RVFcsDYAOLG)e>Yx4H2kv%8?cf(6MzAPSXzAwE|@yBsPk#t}w3 zeqHZ$9}V5V1*+%%k7aC$p^5ov$tZ$wir4&qpHaWqIiIhY_LJywclywL|3$YEx&6pe z5c0;ykFVoyqqB7NQ2OFf9O&9Kbq%!agk1=Y^pTkvaHaGy5VXa5j??S!rcisgUq=%o znz`#5X8K#n`1Q^>>o-!4vh-2nvYA+JPGEj1p`f!~D7VIZs^cEyIyRYM{v`Z~EOe-4 zP`G_b&<_`qF|vhovG0-}hHU6PB6u##Bu9wNs<^S$9CJM+Excii97XLqnNqsl&`sdS z(_z$s{eJlEF20Zc4xxKJ4V}@Q73xMFZNz-5PCJ zJC!NQeBYPJ=NWa--+#IAC4h7brqH~9!Dl&tL$)h@?_VW4AF=}*FF_E$ne5TJ`MS6P z7aB#|Ft1bm?w>0NB|;@$`d5wAj~PGg;pm|*LkUbpJ|e!ZI}faK6ep&%!B)8AA5km9 zaINKb$jfePdcXm<4+dHX?{LaV-K3y3Z$xxBnQA7B7u5h=Fm>mz6{FTedN)rwhLBY6q+==Xs+Tux3#G^TMS>95ASWD^F(Z*nf#T+U=`QS@W!}3)SY=o1-LpI8m}ILd zNcKR=la1*U(f;izA$k&^%sh2AeD~)1SiR|;7I)0;HU_?KJzLi7(FO6%8Cud(64L26 zmnUjF&}LbcXplyL`M@>7$+PdI>bS3+`S&BPn|r!m*6NiW2td4YlNEuOg7OU`UBLc= z*vn0PIeG!DAh`y{&|2k+`~f-oGkI2wooL^0_t@jfVE1}ty3K`?!qwQ}B| za~waZ5jtd^!oE%qNH4Pxm(W+!K8Qm!-JK?Iv~OVP#r7WniX!0T-v*VuuLPMQaP8tq zKYRSeVG3lke*b=v6etwrkw2+{a{dhAhKe!f<(k6W`vu&|^lEe6Nw`B%+6Dh5IcO#E zW1lUbRw=l}GJAElMRLAfnvD7lBYW^3t@;Kd@W#!g<7|GF*Bk#e|HUU)=ko(qx0T$+ zfGJHzG2C^u?kr|}PR!lFl|>Ge8+4`FQyTo_I|O{kvbfLLHlz4;gbMTp=r#4QMDEF5 z=Y=Xukw3yW+*x&FiN8LZ_g>KG;|VyDuPk_CqWN4FiH4hRP7_FKJ`c!J(u=CjDbV11 zf1&!UqPK?#ekd1zn@&=C=SV)}OtcgsLiPvx0obC9@15^$>kg)VM}wV_l~M^Ixnun*w3)pjvlE;o z`#$q3vqS~8P=!8IsUV}k;K{mW+EaDu%-8piU31W6d_AlsOr0JncXd&p=RAlPBUV^P zygT(5gG#R?Jp_UzW?3DGAusbe!Upb$U*AMyK+z(R0JvxV(j@y{hb;!HL2w!T4q+jH zP=k%dDdqtpbMWfO0WOCvb$0g3WNF#R(D%o#m3^FNJDB3tilWePxLl96=4jdG2ehnL zS;V)>#HS%1%fOP4tV>FcZTA<+NQx$}eH2~&Jcw_c97UMHaTl6u*N{-@L8QZnuz4)N z3mwRX(NjMIRlczxi08R+o*iKNU=5m$s+D|RDI#jW?pMs_ zxW}5btzWMD>(}tDT#5YmAk~*lak8ZDh*Q$UEG4GQ)3LQ278S&8{#Tg=n#gsY*kX(O zqcL@?kv>$xVg+b-L7~|t>O$Gag*W|~Q-AD@W-F))480%EuG<<%8mba-An6BBa-Quy z5x?jbYck+|OE2$3DIM30m?vi@M;*fvL@iTR6C}u{SAzpmz6<`>9}kV#bbd4OBlHe@ z!6X~0w9$k*1OC?bPUI>bRRSLi7Wt#J*Z{eEbk!l{8hxl=lX_0^v%o7%NCqcq2Ir5= zh{#X5*5>&(YJs_Ku1RSh_2SCpXdL;0I7d7rvbtRN6_Gbp3IF*c^|GuHkw1uUad-Cc zpY03CmKN(hzB%Y#;=Lo%ODt*e+2NUc(CySR9uYU@5hWo*cU^l6&aAN%2CX^I_tPw^ z*c|oWwN%b1G5S*wX};oTgc<<@xMg3_Yc;{3Px&Gqdr3?MIQu?`YwM>EglWjg7T zC#WQ?vryQN3e3!i4?@3UALvO3QdQM*-nJcT34m>JKddYfCu4Zc z2QS6zP2=vu=t$zTRr`W(F*aY%<2!lOThxHm$(q0^S^5k4NtfRNsI;l=NN{)z1R{?p zAiTci-%G#mgx4f8C7Kl*Y>>P_r0z!gjrUJchS++81L~IZM*H~<7fLTPI0_sYFGM&| z70)c#t8cp$n$-6a^3$-c#NFe6Hw|=S2?_j1{n$H>8_B2+=GrJ@b*{*4a!u09P?4a~ zVTWZ}FdYH!OXfn_I1OC6mR=d((3`A2eTXL8qtr zpx>*rJ9LUq`A_K+ZH_ND@;=$LJ?4s_GZu+2PkyEC{PI;rp^GeByyF+_1F{;ZA(5#P zx{*w9zIE-|(dy}W(*^V=Q&Z@^(s~<1`V*kbgR(kY#3F*Bq7@!FS9*Fcio9W63|N96 z1Ojw6+>^E!aoy4jKv%}a4b4;&%Y0g`nHUpye2}g>7IQtVnPxh+)MR`hB)tLTa(y(-f zstzC}uXi99l{*dwHHZ+UP1g{gn=`?RqrABztbgXP{y>Iq9=g(sUN;XI0bpSnO4R2G zs41jr;r}+Y>;fHF+!}a!& z^6jvTpNB+LKM!Z28)9bhB;D}&1@-WjV!J%267BPA_CMR$b4U@y zrEyPgiSxqy`^b2Hm*nj+*&au& zwwpgDZ@yd!C+0Nr-}tyUQ~7Z<^0i>M&M!hxZ6|uP()oC@7Stv-++Xjct-9^aEYG_y zK7s7cR%5SrMTRr2lfJSx8qJb~_)ipRuI^PYV%3)zw}0{IJQ;f@vRnx>K=;&NZVNKz zPB!9BR?1VPcxf|<0cv@%dB1$PI$oP<@~Pjbaa!w3dTFK7b2J1#NcX$1-Kf#4b-G** zrn>#6ASc&8SLWAfXUhmmAyNVsHI%9Kc5D%hys@nd zzQ9&UqX9OA2^5R5XcUKZMUwsWy4WAFuB2%e4r2!f`-}{}K9x2w!ERJkRDL(vZ^nrV2V^_IsObu!`t@!G-P)!^a3KS- z&+rI{GH*Zuns*<3bcViHIUAtVaow1n7nGQugmLikP21P*%~qRkj%0#)hAnQSD&}q2 z-7uzm2Sf{BqnLI@9O<6-#L^k`#uBR+s(;ycLNg`wtJmpVS4$ES@pfDO< zOMG*2Af2a}>K)fH=XScOe7ZSGXXNx%9XL@}6h%0+`Cg}-cx82UG*^M_7SvS7O~~>^ zyE||fXhJD-6;nZ3vr|WFATp>m?Sj{?ZlDDC12b6xj|`UjiMplpb9B>Hnz16Bh@)-I z$s;P9@OfBG4R5-Wd0#xLRLy7q(AY)~v~v^!NcRb{LD85-h*j+Y|8J^3rV&UHshAcCCB z>-+=QNrV(ZkEc|Aw_FVG(#Zd~KG&`4n69wA6V?RPvEWJb&bKo*(B-R*bnJrrsi`Ud zvtaRG8py@Ndv2z8*Js51F8MH`TR5-)OB2gcktGb)B4XD&B;EO`#!}{aW)0T2y(onm z<>OXP;^FTvhg0DadJYug`XZ z*ZLCy>S$krnT~=DeIL9`2lixGR~RsyYbAb zNcwdyq4|w;(or8LFKhGc=Ica}x7XtV;Ag%|7uKr!ki3yHw$;%VgkA=`1VG$xt1%=B z0XKbYz-p&5 zNxQpi3~!G9luWQ)Z1NdF>;{vuUu;TSJw0`q+H>P2$I@%~h?~f+500bH>lkKU$cbEU z(%qiV+Vi^arwlt=Sy^e-yFH&Q(MMmhyO>GhGUWu(VHDNc)02OHuJ-ZL{+pe@f6Y=r znRbyTv@374#B14v|kV$uEhrRS76sgfdl;{PClKp zd#zEdMN?QTme~R-+ebk;IC&I{SI*mnwkQe#PM1w3;4yTw<#2d=F)SDedMt?L64@nx zN<{`tidYOJ`G-HUcx5-o>!!R$mjaq4p1@ldg28HfL{VTN0|?ovEmDnn|B}>Y>(7&V zx4oy8gW`5fnkD2__KQ&fmq`E@mj-BF@tlf^DjGa<1;oC%&JoaclD{~ZHF5}u48ccW z0G+_hqH*b@J`RC^f)0w(pU3xY-eJA`F^F(s(Z@1H>(?@0&kZWOg9a_yMILTf$M#eK zIusi=8;qw$gY3OYXr|g8JGlK5*i567^}(rfbMz=Gk^Qd`4B${8h{&J?AOWrQm=WjF z!~MYnr|Y(w-DdJIyz!=OK9YrqP0K%3z}<65Ax)43+H`F_ZlY2&A$%hzsk8X)xvpS0 zhzOGD!akt9MIGXv_on*&=p(srY@$$u#%DH~)})bLUw0ubXFD)>YfZyZ7nuS2iS1ks z?!)cLyQ+#7ooc&C(1P$W%GA^}Q=>>3z>Qj=8Y<`}5R;deA8I7-;{pn0h{MHx*G9Tu z6mZdYyXwafySbX>7ez9P-(T5$0nzd&Sg15ire7MYa36;Ew4a=@WTP|6C5BCPT3V(SL-Ue}*b{T=2T`mP;mwr4l@qW0w zm^K(I)_wt-R}01fd>t@k)#Nb@2L zuhbu}?bC+8WF+rRm9<;4VZnYe*TDIzxd|unE&CyZ<=dR6=tS%inPNc=LtuePSv5-{ zRMc8pK0R)Xf`<%n$TxSOUkM;+-X?|@f)Bzuw(zAdhth`KWa=9w68fyjxUrNx0hN^us{nYK#*@|g*F7hv3AK-F;CScg@lA8 zYjt$XMXTHl6|l2F5CVriehhwT^tv!PSZG9mf*uyDH0|!-tU!1hgzp^SjUP`2;oVIo zKLp%MhUb%Noi|JX1SyB+fz}QX0?7(Bq3qY+n|y9e=IdNJi81(yN!DB&0>vfDM?tkb zQ~*`INaM`233&46SYGr-jqF#3>B)x>EaX?B{PT;Z z5U|8!F9iTAhyOaDZGp3vKxFKd@4O0^n5JaB*ww)yela>PR`?zYc-rXK5pbxI| z(}D&b3kNCTz-T%AEr!z~H`2U@cIE(Fdh>jxGXk^;-u6s1sDe(w|ME}gJ`Li;={d?OE8 zIwO8zA^*F*@9Q@RP&HNtPZ6LAk2O|?q#g-(RZuYzdRj#7X)-7G_;^LdkX7H zo%f?zL8TUhq^)~ymb!+(4I4{-sTIT-m1&hX=E89i1}FZr$M^DSg4#@aHKiLzQ>M{D zdco8vZ4o3d8cYg6GSE^ESSh|vr8U7}BQm`6MDFr>2U_8?_>xqiW#@&+sb`}S*jQsg z_1gd{w|V+_-~v@e<{P^~LkJj+$#}jpuj7hDixbE@KvN6LHVhgKW+C*x(a`6N062LR z@O)Yt8XBWokg*MbWC%onZV+SJJu!8w?JzIrK+Iios%9KCdHE5(J-~9> z0SMkLm_LH#jfKwFy8}R@d_R_pX}8e8To>uQF|_=vdI62EO3B>JYzZt^8oUoOs_FvF zV0BcQ3iEm)9gyjFLTC6OvLgK$Bvk$ZECbHasuz93gDE{x(tWS3B+k|dKxmV31L+{g zOWPTIz%}rE2Cq&wMnThB3Ye2oGQcw;IOUkICeVkrFSqn_G)Ls6`|6y&y4YQ8rUEp{ zH~nTU(NL^pIQ=m)7UC`~dR`=`s>lRj!|QYHA_D`F#rs@Fk1HQMw{PgNvP=SY?*SUUf~6K7mQ7d!d~tWK z77xH?cugeWeIS{549_e1smRE}K^6uN|4bUi#DEoi67o8SC(#C|bMTd{wm00JsgxVn zA_2FwO!py#@4Xkfy1}vw{}I?PuT)n3x|eXyoU8D|bD+dOX3fPaUaS`J-#MWhp%XkGDnL`0#OW->OYixw!N+o)HP;Rs!u_Qj{ zTws&8U1gvVv-Jaym;O(nssJ?eO6ccDl7_;(D4Gx3(1l$M>s**;Z2}@&dv$z4_oT2b z;4dQ62CMcML)o%ly%+icGed(x4KHpe^&36a-_QIm7=HD_a_E%#hbxBSdN;_P?j|`p ziBkZQc}$Fgye(!2=kt=O13=I1vxZh9oD#j-mFf}@AFdjZRdeN!m=j$whO#8XZztUW z(aSVw^b~dlh6^=roNNH4CO`=Qc9JCIRRyaBsl_so5I*bdd9~Mpjz+C!U!j+zk+3TO zd|niOASl*&UzNjZVFq59Um4$hQQ3NE9tB@A211m<#;%)yFlbi&U?>i7LaEF|a=5IS zi(C7k7`VvGS^f$Zg9cs}%@WX62iIFj>XjQkU2g$K0mRE*w1M|<0_x|{XaKpqT#Xjr zMoQszq>YPoyCV1I{k@orUAs7aBs~YH$}= zL2sl&#UDJ+XKnVIAAA9HA<;=iwA@~uIIa(ncmsemFfV6d0e5Q!=~Y127|8Q}+b=HU zvD5Srhf7oWjGt`aF)A(rMrtr@sVEFmRh_C2Brm`1&hWZ!eB z2l9!F17wYQQ*D20N~_`SeAZy2#IQMSZ)u|#{M@g;;S^z3$qs=Xfpz2p%*Q`;0VJM| zn+}|udm@G7S5DR!&`T=NH!W#iT>mC%yBt$q;KXCyY09}w*0fQF(7tMNTh4AE-0tRT@3O`h@ z_7TvqT-oEQ;U1Fu^>zaYfgas$p>xp=lk?{}RUx50)cy|N($l={if(GXxwS>nN1AAyG8Q+M8GUOmeNqF4IKM4|fE?0e9Y zr1~a;nClTRun;hzwm&&?LWT_S&1R{MszB8V**UG|2~SctJLvVyL#Pojpceo(APu;q zU~}P%MTK5|o^=p-&Scp;m;jB3FCGYH?-~QB-()IX+S1t&X=rFK<|!@EwOsh1ol|yp zb(u^SYj47!=^Jw()^S-5kqchTInz|8YBrqyk>hpxivrAY?ZP9xGXS`gF`({Az>oM{ zHvPB8@_vGK$=ViiSc16lQ~1{xkv zxUqiPy}ZeK^9=Eaka!(5-C$99ABv9HNrO!Q!(5J)rfeg=NKSJ;+nx{y8J9#iZ7wE=k3fO+8kzu%69gSh9nHy$ zUX!xV_;QoSCSS(@iNin&Y;{gaNr^zkWB5GoW{{;)aJUlA0jKj?wNCU%7{vZ?{cH_1 zRKrz0pa8x7(*#rqxO@OmRaV9DCH!b)x~I-DBdH$JdU@l7y@vIvx!mOGmts>h->Wqu za(9agy#!#wW%VaJWV?^`A8mWi z@8Qm%d)l@>X8O}(CyGTez=|{I*h!f38b7EO>(9cCfJLQ3B$UaD^-w zoWLlT4@lb#y7^NTPcudadL^Bl%3-u$SQ7d+&c4t&lYwY&5PlZK-Nk6bwlS27CuHjd z_>3?*_*0ck(S*rR3ZFsfCg7ft0C>Yo=)MLm&L)WP^7r2;_&2(i9M17kLxDm6CP zAjguHag_)+fOZ23w#){`ehUOq83hH*x@q$dABu->QVk94?ci@^DOawvR(IK(nb?^F zn?&p|CIb?5Ajv@bO&+6PvU&ZXFm(7l{`3xxVz?y41CQ7PDIy zOuLuXr}r)+l11F=Cy*|MUwj8|EC~RcjU?}+$4&$^5^d<2J;bQR9|577xn~Ht3Zu2R zs=+u=w4tj{&qKXZc;rv3RdiPL*$_~`GqB9 zZf}1Yyv6}^y>Gr^MTG#FodM!o5~uMaxJs7H?0SFeF_6NC zhe`VK@VEQBXi6cmx1{^O)K}ltpx>H<2Nw9F*9FaV&DuBbIlFKFj20FH+f-)Ujx>xl z1&l|l!U7X6Q-OTMGa))Wyd7k#;$W=-2Qvj+*;t=dLq~@ci%OVnJJzGD!$>NMe9JW@ zHue+9aZQ0j_>bn$?6igkRL4)61|FS7-XLjH0w)7K1}Os$nIg1t2_Vl{0r=JmBv+x0 z4?JXW$-CiXNB|twl+Nz?LL-4btdc?H3Yo6~7*2WJw}^ zzCF+lco<>pa*qb*LO^T~FJZ0cDYv7-9U@K#DfDv1uyDKTJE1jKUr>gcCSc>)D78aop}xQ!*ihhK9DnHCTr)Uv++U z0ZKIrM3Cm;`uTl-*Vk5m5WUWKafQ<8U--FugN-FVS`crY$v15F)iU)?^FEgKzS*lz zBXF)jJAGoy^8=hmY=^)Mm6`D24>(@SmT0*K zc62+?2bmdSZZj0H#SsgQUdW9_8EPzC??-%mk;=Q(_ikg=U=Y4A{px1p`MddjVy@5imHbokUTyEj1?RNkQE<31yC{lB1iurqi89rm#OYVOdNRt7mDPgBBI1w>$ZvAO{8?x&*Jo zTEK-lrVV5rQ#)rX4!j+EZsB8F_!}pD`xjn Date: Sun, 16 Mar 2025 04:56:54 +0000 Subject: [PATCH 10/26] Add logo to background on main page in autologin case. --- web-portal/client/js/main.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/web-portal/client/js/main.js b/web-portal/client/js/main.js index f13edf0..e89e46c 100644 --- a/web-portal/client/js/main.js +++ b/web-portal/client/js/main.js @@ -30,7 +30,13 @@ window.addEventListener('load', (event) => { const rr = urlParams.get('rr') || false; const fromvnc = urlParams.get('fromvnc') || false; - if (! isAutoLogin) document.getElementById("page-container").style.visibility = "visible"; + if (isAutoLogin) { + document.body.style("background-image") = url('images/logos/logo_red_no_border_568x385.png'); + document.body.style("background-repeat") = "no-repeat"; + document.body.style("background-position") = "center"; + document.body.style("position") = "relative"; + } + else document.getElementById("page-container").style.visibility = "visible"; if (targetSystem == "Notecards") { document.getElementById("fill_window_cb").checked = true; @@ -56,10 +62,6 @@ window.addEventListener('load', (event) => { document.getElementById("fill_window_cb").checked = true; document.getElementById("dev-div").style.display = "none"; document.getElementById("do_not_checkbox_div").style.display = "none"; - hideRow("resume"); - showRow("initial_exec"); - showRow("run_notecards"); - showRow("run_rooms"); document.getElementById("run_notecards_cb").checked = alNotecards; document.getElementById("run_rooms_cb").checked = alRooms; document.getElementById("sftp_checkbox").checked = false; From edfe5e171f5393aabc7e2800bb13a7f51423eb4f Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sun, 16 Mar 2025 05:15:38 +0000 Subject: [PATCH 11/26] Fix body.style.background... clauses in main.js --- web-portal/client/js/main.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web-portal/client/js/main.js b/web-portal/client/js/main.js index e89e46c..3bc18d4 100644 --- a/web-portal/client/js/main.js +++ b/web-portal/client/js/main.js @@ -31,10 +31,10 @@ window.addEventListener('load', (event) => { const fromvnc = urlParams.get('fromvnc') || false; if (isAutoLogin) { - document.body.style("background-image") = url('images/logos/logo_red_no_border_568x385.png'); - document.body.style("background-repeat") = "no-repeat"; - document.body.style("background-position") = "center"; - document.body.style("position") = "relative"; + 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"; From 8d2741abd408496e08902d7263ef972885996f9a Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sun, 16 Mar 2025 06:40:32 +0000 Subject: [PATCH 12/26] Plumb return from novnc for autologin case - should just return to logo page, not full main page --- web-portal/client/js/main.js | 4 +++- web-portal/client/novnc_oio/ui.js | 5 ++++- web-portal/server/js/medley.js | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/web-portal/client/js/main.js b/web-portal/client/js/main.js index 3bc18d4..7e35457 100644 --- a/web-portal/client/js/main.js +++ b/web-portal/client/js/main.js @@ -113,7 +113,7 @@ window.addEventListener('load', (event) => { dlg.showModal(); } } - if(isAutoLogin) startSession("interlisp"); + if(isAutoLogin && (! fromvnc)) startSession("interlisp"); }); function startSession (interlispOrXterm) { @@ -182,6 +182,7 @@ function startSession (interlispOrXterm) { + `&rooms=${runRooms || "false"}` + `&sftp=${startSftp || "false"}` + `&exec=${medleyExec || "inter"}` + + ( isAutoLogin ? "&autologin" : "") ); } ); @@ -198,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/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); } From f3317b8434ae2960928473a9b704a240cd2879d8 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sun, 16 Mar 2025 20:30:33 +0000 Subject: [PATCH 13/26] Pass into MEDLEY a new env variable OIO_FB_URL that contains the url for the online filebrowser --- docker_medley/scripts/run-online-medley | 1 + web-portal/server/js/medley.js | 3 +++ 2 files changed, 4 insertions(+) diff --git a/docker_medley/scripts/run-online-medley b/docker_medley/scripts/run-online-medley index 2fbca49..c2befda 100755 --- a/docker_medley/scripts/run-online-medley +++ b/docker_medley/scripts/run-online-medley @@ -142,6 +142,7 @@ fi -d ${FILEBROWSER_DATABASE} --lockPassword --perm.share=false --perm.execute=false /usr/local/bin/filebrowser -d ${FILEBROWSER_DATABASE} --port ${FILEBROWSER_PORT} \ ${FILEBROWSER_CERT} ${FILEBROWSER_KEY} & +export OIO_FB_URL="${OIO_FB_URL}:${FILEBROWSER_PORT}/files/il?u=${MEDLEY_UNAME}&p=${SFTP_PWD}" # # # diff --git a/web-portal/server/js/medley.js b/web-portal/server/js/medley.js index 1fa5404..725c823 100644 --- a/web-portal/server/js/medley.js +++ b/web-portal/server/js/medley.js @@ -16,6 +16,8 @@ const config = require("./config"); const express = require("express"); const docker = require('./docker'); +const url = require("url"); + // // The router // @@ -112,6 +114,7 @@ function interlispRunCmd(req) { + dockerTlsMounts + ` --env PORT=${port}` + ` --env NCO=${config.isNCO(req) ? "true" : "false"}` + + ` --env OIO_FB_URL=${url.format({protocol: req.protocol, host: req.hostname})}` + medleyEnvs(req) + ` --env IDLE_SECS=${isGuest ? config.idleTimeoutSecsGuest : config.idleTimeoutSecs}` + sftpEnvs(req) From 5accf518a991fee31740faf05ac7ed99b9802bdf Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sun, 16 Mar 2025 22:40:36 +0000 Subject: [PATCH 14/26] Suppress open in new tab warning when opening filebrowser from Medley online --- docker_medley/scripts/request_new_tab.sh | 3 ++- web-portal/client/novnc_oio/ui.js | 25 +++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/docker_medley/scripts/request_new_tab.sh b/docker_medley/scripts/request_new_tab.sh index 6832de7..3ee408b 100644 --- a/docker_medley/scripts/request_new_tab.sh +++ b/docker_medley/scripts/request_new_tab.sh @@ -13,7 +13,8 @@ # 2022-10-11 Frank Halasz # # -URL=5d4f26d9d86696b6$1 +if [ $(echo $1 | grep -q "online.interlisp.org:3" | echo $?) -eq 0 ]; then nowarn=1; else nowarn=0; fi +URL="5d4f26d9d86696b${nowarn}$1" OLD_NAME=$(/usr/bin/vncconfig -display ${DISPLAY} -get desktop) /usr/bin/vncconfig -display ${DISPLAY} -set desktop="${URL}" /usr/bin/vncconfig -display ${DISPLAY} -set desktop="${OLD_NAME}" diff --git a/web-portal/client/novnc_oio/ui.js b/web-portal/client/novnc_oio/ui.js index df56a43..bf1087f 100644 --- a/web-portal/client/novnc_oio/ui.js +++ b/web-portal/client/novnc_oio/ui.js @@ -1060,7 +1060,7 @@ const UI = { UI.rfb.addEventListener("capabilities", UI.updatePowerButton); UI.rfb.addEventListener("clipboard", UI.clipboardReceive); UI.rfb.addEventListener("bell", UI.bell); - UI.rfb.addEventListener("desktopname", UI.updateDesktopName); + UI.rfb.addEventListener("desktopname", updateUI.updateDesktopName); UI.rfb.clipViewport = UI.getSetting('view_clip'); UI.rfb.scaleViewport = UI.getSetting('resize') === 'scale'; UI.rfb.resizeSession = UI.getSetting('resize') === 'remote'; @@ -1355,17 +1355,18 @@ const UI = { // Interlisp Online // - async openCLHSTab(url) { - let noWarn = false; + async openCLHSTab(url, noWarn) { let guest = false; - let response = await window.fetch('/user/clhstabnotice'); - if(response.ok) { - let txt = await response.text(); - noWarn = (txt == "true"); - guest = (txt == "guest"); + if (!noWarn) { + let response = await window.fetch('/user/clhstabnotice'); + if(response.ok) { + let txt = await response.text(); + noWarn = (txt == "true"); + guest = (txt == "guest"); + } } if(noWarn) - UI.openCLHSTabFinish(url); + UI.openCLHSTabFinish(url); else { const dlg = document.getElementById('OIO_CLHS_tab_notice_dlg'); if(guest) document.getElementById('OIO_CLHS_do_not_checkbox_div').hidden = true; @@ -1815,11 +1816,13 @@ const UI = { }, // Interlisp Online + // Used as a way to open a new tab to show a url + // url is encoded in new desktop name updateDesktopName(e) { let payload = e.detail.name; - if (payload.match(/^5d4f26d9d86696b6/)) { + if (payload.match(/^5d4f26d9d86696b/)) { let url=payload.slice(16); - UI.openCLHSTab(url); + UI.openCLHSTab(url, payload.match(/^5d4f26d9d86696b1/); } else { UI.desktopName = payload; // Display the desktop name in the document title From 3890d81cbcad8b2453afd23a9e3e126839bd5e86 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sun, 16 Mar 2025 22:59:45 +0000 Subject: [PATCH 15/26] Fix typo in novnc/ui.js --- web-portal/client/novnc_oio/ui.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-portal/client/novnc_oio/ui.js b/web-portal/client/novnc_oio/ui.js index bf1087f..ebc76e9 100644 --- a/web-portal/client/novnc_oio/ui.js +++ b/web-portal/client/novnc_oio/ui.js @@ -1822,7 +1822,7 @@ const UI = { let payload = e.detail.name; if (payload.match(/^5d4f26d9d86696b/)) { let url=payload.slice(16); - UI.openCLHSTab(url, payload.match(/^5d4f26d9d86696b1/); + UI.openCLHSTab(url, payload.match(/^5d4f26d9d86696b1/)); } else { UI.desktopName = payload; // Display the desktop name in the document title From a419e699b8f0a87003b54f80ba6d85c509e10c46 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sun, 16 Mar 2025 23:30:02 +0000 Subject: [PATCH 16/26] Fix another typo in novnc/ui.js --- web-portal/client/novnc_oio/ui.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-portal/client/novnc_oio/ui.js b/web-portal/client/novnc_oio/ui.js index ebc76e9..8d4a9ad 100644 --- a/web-portal/client/novnc_oio/ui.js +++ b/web-portal/client/novnc_oio/ui.js @@ -1060,7 +1060,7 @@ const UI = { UI.rfb.addEventListener("capabilities", UI.updatePowerButton); UI.rfb.addEventListener("clipboard", UI.clipboardReceive); UI.rfb.addEventListener("bell", UI.bell); - UI.rfb.addEventListener("desktopname", updateUI.updateDesktopName); + UI.rfb.addEventListener("desktopname", UI.updateDesktopName); UI.rfb.clipViewport = UI.getSetting('view_clip'); UI.rfb.scaleViewport = UI.getSetting('resize') === 'scale'; UI.rfb.resizeSession = UI.getSetting('resize') === 'remote'; From 81e057348fb43d7d78cb3bd763d65b978de80ab7 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Mon, 17 Mar 2025 06:52:20 +0000 Subject: [PATCH 17/26] Update ONLINE-INIT to create a FILES Import/Export button on screen that brings up filebrowser in another tab --- docker_medley/init/ONLINE-INIT | 44 ++++++++++++++++++++++------ docker_medley/init/ONLINE-INIT.LCOM | Bin 4380 -> 5069 bytes 2 files changed, 35 insertions(+), 9 deletions(-) mode change 100644 => 100755 docker_medley/init/ONLINE-INIT mode change 100644 => 100755 docker_medley/init/ONLINE-INIT.LCOM diff --git a/docker_medley/init/ONLINE-INIT b/docker_medley/init/ONLINE-INIT old mode 100644 new mode 100755 index e51ec4e..fdd0dc6 --- a/docker_medley/init/ONLINE-INIT +++ b/docker_medley/init/ONLINE-INIT @@ -1,12 +1,14 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "25-Feb-2024 11:38:10" {DSK}medley>il>ONLINE-INIT.;15 7712 +(FILECREATED "16-Mar-2025 23:41:43" {DSK}medley>il>x>ONLINE-INIT.;2 8873 - :EDIT-BY "fgh" + :EDIT-BY "guest" - :CHANGES-TO (FNS Online.DoInit) + :CHANGES-TO (FNS Online.FileButton Online.DoInit) + (VARS ONLINE-INITCOMS) - :PREVIOUS-DATE "25-Feb-2024 11:21:27" {DSK}medley>il>ONLINE-INIT.;14) + :PREVIOUS-DATE "25-Feb-2024 11:38:10" {DSK}local>interlisp>medley>greetfiles>ONLINE-INIT.;1 +) (PRETTYCOMPRINT ONLINE-INITCOMS) @@ -22,8 +24,8 @@ (INITVARS (Online.LogoutTimeout 30) (ONLINEP NIL)) (ADVISE (SAVEVM :IN \IDLER)) - (FNS Online.SftpInitInfo Online.SftpUpdateInfo Online.SetUpNOTECARDSDIRECTORIES Online.DoInit - ONLINEP) + (FNS Online.SftpInitInfo Online.SftpUpdateInfo Online.SetUpNOTECARDSDIRECTORIES + Online.FileButton Online.DoInit ONLINEP) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (Online.DoInit))) (DECLARE%: FIRST DONTEVAL@LOAD DOCOPY (P (BKSYSBUF " "]) @@ -102,9 +104,28 @@ (PRIN1 "and Notecards will not work properly." T) NIL]) +(Online.FileButton + [LAMBDA NIL (* ; "Edited 16-Mar-2025 23:40 by guest") + (LET ((RIGHTMARGINISH 140) + P B L) + (SETQ P (create POSITION + XCOORD _ (IDIFFERENCE SCREENWIDTH RIGHTMARGINISH) + YCOORD _ 250)) + (SETQ B (CREATE-BUTTON '(ShellBrowse (UNIX-GETENV "OIO_FB_URL")) + "IMPORT/EXPORT" P)) + (WINDOWPROP B 'RIGHTBUTTONFN 'NILL) + [WINDOWPROP B 'BUTTONEVENTFN (FUNCTION (LAMBDA (BUTTON) + (if (LASTMOUSESTATE (ONLY LEFT)) + then (EXECUTE-BUTTON BUTTON] + (SETQ L (Apps.CreateLabel "FILES" (IDIFFERENCE SCREENWIDTH (IDIFFERENCE RIGHTMARGINISH 50)) + 300)) + (WINDOWPROP L 'RIGHTBUTTONFN 'NILL]) + (Online.DoInit [LAMBDA NIL + (* ;; "Edited 16-Mar-2025 23:26 by guest") + (* ;; "Edited 25-Feb-2024 11:37 by fgh") (* ;; "Edited 24-Feb-2024 00:26 by runner") @@ -174,7 +195,11 @@ (* ;;  "Setup NOTECARDSDIRECTORIES. Should be done it APPS-INIT. But until thats done, we'll do it here.") - (Online.SetUpNOTECARDSDIRECTORIES]) + (Online.SetUpNOTECARDSDIRECTORIES) + + (* ;; "Create File Import/Export Button") + + (Online.FileButton]) (ONLINEP [LAMBDA NIL (* ; "Edited 24-Feb-2024 22:31 by fgh") @@ -189,6 +214,7 @@ (BKSYSBUF " ") ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1660 7576 (Online.SftpInitInfo 1670 . 2543) (Online.SftpUpdateInfo 2545 . 2800) ( -Online.SetUpNOTECARDSDIRECTORIES 2802 . 4510) (Online.DoInit 4512 . 7437) (ONLINEP 7439 . 7574))))) + (FILEMAP (NIL (1764 8737 (Online.SftpInitInfo 1774 . 2647) (Online.SftpUpdateInfo 2649 . 2904) ( +Online.SetUpNOTECARDSDIRECTORIES 2906 . 4614) (Online.FileButton 4616 . 5525) (Online.DoInit 5527 . +8598) (ONLINEP 8600 . 8735))))) STOP diff --git a/docker_medley/init/ONLINE-INIT.LCOM b/docker_medley/init/ONLINE-INIT.LCOM old mode 100644 new mode 100755 index 9c8a099c7ea3056a7d31ea7c2edadc0e72ad4124..ee4db3fe8ac2d8006750b41ed42884c444327994 GIT binary patch delta 1040 zcmZuv&2G~`5RRchYCtIx6+aSa@TIndga48y21VG(CRuQ7%XX5MBDJA0C90c5i7Vhj zUVsBA2QGlbGXx%iBM;CAKwLR&wN{X)4VKZ`C4nhOM;XE zNmdn6&1B#1u8dw3EYrXy;<1Un^j(Pqnh~WLR*+OlQRNH+;dXDYAFQ;Y(*;JeZ5NK? z(&;n7W>%2Pdls-|(*>&=bh>`J+zEVrKMZ@_BTuP^yPc2&wxKx$Hfy(vNDH1)YePmVs>Z(M0)gA4}PAc0P-NRCa4JGfHyYMN6avv#Y5#O^{= z|MeyD^cHy}st3WZ>+8Mf85?{)dOm9JL|1HL$Ah_ljNOVb)j&Ep=u)>wF>Yf%FzQWE zz^;2uY?iF1?N~PCRzd6chw0+LC);DRp7;S|=RrztE=m?*x=AyM@_8_^VL)DiQQYZN zsIm#G3b+J~%qA{*RmkLzwqkxv8Rc+5sDVt6L@M$$r<|LL_cvw!ct$b`$mW5G_Szj4QU^s4kCHaB6 zIQf#KsawfNRU(^|&7R~8QdS&4PBD`oiyzNinDs)o_f_iZ_+1K7^!QWiT2g=LuDg1@ KJo%lvN&Nv7-3s;q delta 327 zcmX@BK1XRnxQLOdu3Ku7u91O}iGrb_m9d4Dk>$i}^?H9lA5TA5T~9yH5It){Q%waf zB_m@br6yK}Mph<9N(v>(`MCu->M07Dc?wF70Rh1Z$m;a;^pq4*5=&B36tL+xSJLFt zaP#zWbq;cM3~_YD3>upgc@DEqHWw0PNRrdZJ2*1fDb$T?^LimUMgWBqQ2+n{ From 37572f2d0feb51e2212265a4e767bd249a038f01 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Tue, 18 Mar 2025 04:53:20 +0000 Subject: [PATCH 18/26] Fix FILES IMPORT/EXPORT button on Medley screen so that it doesn't interfere with other buttons on right side. Add page with Run Again button when returning from noVnc in autologin case. --- docker_medley/init/ONLINE-INIT | 73 +++++++++++++++++++--------- docker_medley/init/ONLINE-INIT.LCOM | Bin 5069 -> 5357 bytes web-portal/client/views/main.pug | 1 + web-portal/server/js/app.js | 19 ++++++-- 4 files changed, 67 insertions(+), 26 deletions(-) diff --git a/docker_medley/init/ONLINE-INIT b/docker_medley/init/ONLINE-INIT index fdd0dc6..a24a03f 100755 --- a/docker_medley/init/ONLINE-INIT +++ b/docker_medley/init/ONLINE-INIT @@ -1,13 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "16-Mar-2025 23:41:43" {DSK}medley>il>x>ONLINE-INIT.;2 8873 +(FILECREATED "17-Mar-2025 17:06:18" {DSK}medley>il>ONLINE-INIT.;16 10625 - :EDIT-BY "guest" + :EDIT-BY "fgh" - :CHANGES-TO (FNS Online.FileButton Online.DoInit) - (VARS ONLINE-INITCOMS) + :CHANGES-TO (FNS Online.FileButton) - :PREVIOUS-DATE "25-Feb-2024 11:38:10" {DSK}local>interlisp>medley>greetfiles>ONLINE-INIT.;1 + :PREVIOUS-DATE "16-Mar-2025 23:41:43" {DSK}local>interlisp>medley>greetfiles>ONLINE-INIT.;1 ) @@ -105,21 +104,49 @@ NIL]) (Online.FileButton - [LAMBDA NIL (* ; "Edited 16-Mar-2025 23:40 by guest") - (LET ((RIGHTMARGINISH 140) - P B L) - (SETQ P (create POSITION - XCOORD _ (IDIFFERENCE SCREENWIDTH RIGHTMARGINISH) - YCOORD _ 250)) - (SETQ B (CREATE-BUTTON '(ShellBrowse (UNIX-GETENV "OIO_FB_URL")) - "IMPORT/EXPORT" P)) - (WINDOWPROP B 'RIGHTBUTTONFN 'NILL) - [WINDOWPROP B 'BUTTONEVENTFN (FUNCTION (LAMBDA (BUTTON) - (if (LASTMOUSESTATE (ONLY LEFT)) - then (EXECUTE-BUTTON BUTTON] - (SETQ L (Apps.CreateLabel "FILES" (IDIFFERENCE SCREENWIDTH (IDIFFERENCE RIGHTMARGINISH 50)) - 300)) - (WINDOWPROP L 'RIGHTBUTTONFN 'NILL]) + [LAMBDA NIL (* ; "Edited 17-Mar-2025 16:51 by fgh") + (* ; "Edited 16-Mar-2025 23:40 by guest") + + (* ;; " Add the FILES IMPORT/EXPORT button to the bottom of the button stack on the right side of the screen") + + (LET* ((RIGHTMARGINISH 140) + (Apps.BUTTONS (for B in *ALL-BUTTONS* when (WINDOWPROP B 'Apps.BUTTON) collect B)) + (LowestButton (CAR Apps.BUTTONS)) + P B L) + (if LowestButton + then + (* ;; " Find the lowest existing button on the right side of the screen") + + (for B in Apps.BUTTONS when [ILESSP (fetch BOTTOM of (WINDOWPROP B 'REGION)) + (fetch BOTTOM of (WINDOWPROP LowestButton + 'REGION] + do (SETQ LowestButton B)) + + (* ;; + " Set the y-position for the label based on the lowest button, then create the label") + + (SETQ L (Apps.CreateLabel "FILES" (IDIFFERENCE SCREENWIDTH (IDIFFERENCE + RIGHTMARGINISH + 50)) + (IDIFFERENCE (fetch BOTTOM of (WINDOWPROP LowestButton 'REGION)) + 25))) + (WINDOWPROP L 'RIGHTBUTTONFN 'NILL) + + (* ;; + " Set the position of the files button based on the label, then create the button") + + (SETQ P (create POSITION + XCOORD _ (IDIFFERENCE SCREENWIDTH RIGHTMARGINISH) + YCOORD _ (IDIFFERENCE (fetch BOTTOM of (WINDOWPROP LowestButton + 'REGION)) + 80))) + (SETQ B (CREATE-BUTTON '(ShellBrowse (UNIX-GETENV "OIO_FB_URL")) + "IMPORT/EXPORT" P)) + (WINDOWPROP B 'RIGHTBUTTONFN 'NILL) + [WINDOWPROP B 'BUTTONEVENTFN (FUNCTION (LAMBDA (BUTTON) + (if (LASTMOUSESTATE (ONLY LEFT)) + then (EXECUTE-BUTTON BUTTON] + T]) (Online.DoInit [LAMBDA NIL @@ -214,7 +241,7 @@ (BKSYSBUF " ") ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1764 8737 (Online.SftpInitInfo 1774 . 2647) (Online.SftpUpdateInfo 2649 . 2904) ( -Online.SetUpNOTECARDSDIRECTORIES 2906 . 4614) (Online.FileButton 4616 . 5525) (Online.DoInit 5527 . -8598) (ONLINEP 8600 . 8735))))) + (FILEMAP (NIL (1706 10489 (Online.SftpInitInfo 1716 . 2589) (Online.SftpUpdateInfo 2591 . 2846) ( +Online.SetUpNOTECARDSDIRECTORIES 2848 . 4556) (Online.FileButton 4558 . 7277) (Online.DoInit 7279 . +10350) (ONLINEP 10352 . 10487))))) STOP diff --git a/docker_medley/init/ONLINE-INIT.LCOM b/docker_medley/init/ONLINE-INIT.LCOM index ee4db3fe8ac2d8006750b41ed42884c444327994..0860953063640a85923875e9d75520b70083b1b5 100755 GIT binary patch delta 964 zcmZWo!B5jr7;hnHHk53z0CMq5jY3I=eXm{DRXuF%!Jc+)({>C3WS~qSPDWtH;}Xvv zAoF6pdzK&+k)(-}k-uef>K7Lp)iXNGFTiM@cN< z6ri*&sk)3#pUmE~OoN&vNlof4+(D`cQ33T*u`Z`{MG~O#sQ&b@HoF7+2Owl^+hsDR z->0gHeB8J#OTlH5&B; z2B?rdJUm{=l|0WfT?V9r7zrG@T=0rnXPMoJTYx1%80NEvk?d0EMc_JDc#f;RjPqQ1 zI-VV&!xzIZ&bYVt$Kxns^3BTF=Xh+y8hh`fCuTf8Y9+dqi8{xgE#DMsxZSqKBEJ9S z(hy&})*ki!%J|N%zXm2iw*1dRAJ=ZrRAPZvV60d`+zcX{J)y+`sr?wg89-5A^L6pl zgNv)i-pu+3I<$7yxoh0|`0f{9nfzN+Pkq0CzOp9S(X7N!C2`il+#Hr=*r29ca!8q) zd8-Tr1JNhKPy>5hVrT40Z1w5Yh$`B1svD(o`*M z?cz~&yHPc^A69FSR{G=Egd#27I|8gCxz&kGHxY{uTTNDo=`ERnQfV-$VK4`W;}P!r zTT%vGRwFUXH18E4lL?s_Wq`;I*TZA!0m&K&v}jw7cblyGi@-3sbrcmxfn^l@U&s~C I-$Zfb4>U-MJ`-ug0o(p5(DO9iV~2dr5HS$g;8 zytV&fKMZ^txC#v@>+E3}8WO_)uqw7Nu{2$R^}FT8Dr=p>A_vKiq684W`SD!(4@^`^ zZnTHgcL%X+GuJ6Ti#r8~Pj~Cdz%Y6mSgu2v(mw?0?0tH*E@t9x0AZdj^0ebDX}(y? z(4N?F0(VLsgrh_TD~jC-4abS%@I<_HtSiIxq->J_LY8J&NR{CBtN84}wFW*!fT7PN z;wJ(XVtU}QksTlK_7hJA;rzZJ2-&B{=-x3m1aFi5esQ=g&8?u#(tLY*R;sPo2Hw>C zE%vy?cp2Voa`9DDxaQtbo%l#-Bb7ijW>XqC;WUcF2#g-stJPI!aGB26sXsqSGw9Yq z#Hg_}1l7Ei{+O{a;5#r)2&nIaNqD0#d8gIQFn}I`grnVHN*(5bZWg~9J4ZT!3gJ%N yfN>bnss}Wqn$%yud6&*JLDvMSTzMh^|6vjxMPbZdyR%a9kXn3f%D3N|_~9RMHJy6^ diff --git a/web-portal/client/views/main.pug b/web-portal/client/views/main.pug index 6747730..dc8da53 100644 --- a/web-portal/client/views/main.pug +++ b/web-portal/client/views/main.pug @@ -25,6 +25,7 @@ block headeradds const isAutoLogin = #{isAutoLogin}; const alNotecards = #{notecards}; const alRooms = #{rooms}; + const alURL = #{alURL}; link(rel="stylesheet", href="/stylesheets/main.css") diff --git a/web-portal/server/js/app.js b/web-portal/server/js/app.js index 3673eca..846ef67 100644 --- a/web-portal/server/js/app.js +++ b/web-portal/server/js/app.js @@ -20,6 +20,7 @@ const logger = require('morgan'); const session = require("express-session"); const passport = require('passport'); const url = require('url'); +const cookieParser = require('cookie-parser'); //const favicon = require('serve-favicon') // Set up main app as well as the filesApp @@ -74,6 +75,9 @@ app.use(passport.initialize()); app.use(passport.session()); const ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn.bind(null, '/user/login'); +// Use cookie-parser +app.use(cookieParser()); + // Do the routing app.use((req, res, next) => { if(req.protocol === 'https' || !config.supportHttps) next(); @@ -88,16 +92,25 @@ app.get('/main', ensureLoggedIn(), async (req, res, next) => { - res.render('main', + let page = 'main'; + let alURL = ""; + const fromvnc = (req.query.fromvnc != undefined); + const isAutoLogin = (req.query.autologin != undefined); + if(isAutoLogin && fromvnc) { + alURL = req.cookies.autologinURL; + page = 'again'; + } + res.render(page, { 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), - isAutoLogin: (req.query.autologin != undefined), + isAutoLogin: isAutoLogin, notecards: (req.query.notecards != undefined), - rooms: (req.query.rooms != undefined) + rooms: (req.query.rooms != undefined), + alURL: alURL } ); } From 7c082273eede2c89adbe4226996d378f56a93206 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Tue, 18 Mar 2025 20:40:58 +0000 Subject: [PATCH 19/26] Added in again.pug and again.css left out of last commit. In /guest route processing, added cookie to store full url to be used later by the again.pug page after returning from novnc --- web-portal/client/stylesheets/again.css | 31 ++++++++++++++++++++++++ web-portal/client/views/again.pug | 32 +++++++++++++++++++++++++ web-portal/server/js/app.js | 4 ++++ 3 files changed, 67 insertions(+) create mode 100644 web-portal/client/stylesheets/again.css create mode 100644 web-portal/client/views/again.pug diff --git a/web-portal/client/stylesheets/again.css b/web-portal/client/stylesheets/again.css new file mode 100644 index 0000000..d6c4ef7 --- /dev/null +++ b/web-portal/client/stylesheets/again.css @@ -0,0 +1,31 @@ +/*************************************************************************** + * + * again.css: css code for again.pug on online.interlisp.org web portal. + * + * 2025-03-17 Frank Halasz + * + * + * Copyright: 2025 by Interlisp.org + * + * + **************************************************************************/ + +#page-container { + text-align: center; + vertical-align: middle; + display: table-cell; +} + +#run-button { + font-size: 24px; + line-height: 1.6; + padding: 1rem 0rem; +} + +body { + background-image: url('images/logos/logo_red_no_border_568x385.png'); + background-repeat: no-repeat; + background-position: center; + position: relative; +} + diff --git a/web-portal/client/views/again.pug b/web-portal/client/views/again.pug new file mode 100644 index 0000000..b0483ab --- /dev/null +++ b/web-portal/client/views/again.pug @@ -0,0 +1,32 @@ +//- + /*************************************************************************** + * + * again.pug: page for online.interlisp.org web portal to be used in + * the autologin case when returneing from noVnc + * + * 2025-03-17 Frank Halasz + * + * + * Copyright: 2025 by Interlisp.org + * + * + **************************************************************************/ + +extends layout + +block variables + +block headeradds + + script. + const alURL = #{alURL}; + + link(rel="stylesheet", href="/stylesheets/again.css") + + + +block content + + #again-button + button.main-button(type="button" onclick='window.location.assign(decodeURI(alURL));')!= "Run Medley Again") + diff --git a/web-portal/server/js/app.js b/web-portal/server/js/app.js index 846ef67..b00b7ef 100644 --- a/web-portal/server/js/app.js +++ b/web-portal/server/js/app.js @@ -117,6 +117,10 @@ app.get('/main', ); app.get('/guest', (req, res) => { + + const cookieUrl = urlEncode(`${req.protocol}://${req.get('host')}${req.originalUrl}`); + res.cookie('autologinURL`, cookieUrl); + const newQuery = {}; newQuery.autologin = ""; newQuery.username = config.guestUsername; From 5c43933c68b375b9c086a316b3dcf933b80e3c5c Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Tue, 18 Mar 2025 20:54:50 +0000 Subject: [PATCH 20/26] Fix typo --- web-portal/server/js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-portal/server/js/app.js b/web-portal/server/js/app.js index b00b7ef..c6f4dfc 100644 --- a/web-portal/server/js/app.js +++ b/web-portal/server/js/app.js @@ -119,7 +119,7 @@ app.get('/guest', (req, res) => { const cookieUrl = urlEncode(`${req.protocol}://${req.get('host')}${req.originalUrl}`); - res.cookie('autologinURL`, cookieUrl); + res.cookie('autologinURL', cookieUrl); const newQuery = {}; newQuery.autologin = ""; From 682c36d0e1296256221ba714807b795931123721 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Tue, 18 Mar 2025 21:17:52 +0000 Subject: [PATCH 21/26] Fix urlEncode => encodeURI in app.js --- web-portal/server/js/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web-portal/server/js/app.js b/web-portal/server/js/app.js index c6f4dfc..469fc84 100644 --- a/web-portal/server/js/app.js +++ b/web-portal/server/js/app.js @@ -110,7 +110,7 @@ app.get('/main', isAutoLogin: isAutoLogin, notecards: (req.query.notecards != undefined), rooms: (req.query.rooms != undefined), - alURL: alURL + alURL: alURL || "dummy" } ); } @@ -118,7 +118,7 @@ app.get('/main', app.get('/guest', (req, res) => { - const cookieUrl = urlEncode(`${req.protocol}://${req.get('host')}${req.originalUrl}`); + const cookieUrl = encodeURI(`${req.protocol}://${req.get('host')}${req.originalUrl}`); res.cookie('autologinURL', cookieUrl); const newQuery = {}; From 1514d65bfaa6d25daf7bd830961e74b55d641a34 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 19 Mar 2025 00:25:12 +0000 Subject: [PATCH 22/26] Fix extra ) in again.pug causing syntax error --- web-portal/client/views/again.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-portal/client/views/again.pug b/web-portal/client/views/again.pug index b0483ab..21d738e 100644 --- a/web-portal/client/views/again.pug +++ b/web-portal/client/views/again.pug @@ -28,5 +28,5 @@ block headeradds block content #again-button - button.main-button(type="button" onclick='window.location.assign(decodeURI(alURL));')!= "Run Medley Again") + button.main-button(type="button" onclick='window.location.assign(decodeURI(alURL));')!= "Run Medley Again" From b58f1a2798d5ccaf04790948bda4ad2086cc1a7e Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 19 Mar 2025 01:10:09 +0000 Subject: [PATCH 23/26] Minor fixes to again.pug and main.pug pages --- web-portal/client/stylesheets/again.css | 4 +++- web-portal/client/views/again.pug | 2 +- web-portal/client/views/main.pug | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/web-portal/client/stylesheets/again.css b/web-portal/client/stylesheets/again.css index d6c4ef7..467e019 100644 --- a/web-portal/client/stylesheets/again.css +++ b/web-portal/client/stylesheets/again.css @@ -14,16 +14,18 @@ text-align: center; vertical-align: middle; display: table-cell; + visibility: hidden; } #run-button { font-size: 24px; line-height: 1.6; padding: 1rem 0rem; + visibility: visible; } body { - background-image: url('images/logos/logo_red_no_border_568x385.png'); + background-image: url('/images/logos/logo_red_no_border_568x385.png'); background-repeat: no-repeat; background-position: center; position: relative; diff --git a/web-portal/client/views/again.pug b/web-portal/client/views/again.pug index 21d738e..966d7f5 100644 --- a/web-portal/client/views/again.pug +++ b/web-portal/client/views/again.pug @@ -19,7 +19,7 @@ block variables block headeradds script. - const alURL = #{alURL}; + const alURL = "#{alURL}"; link(rel="stylesheet", href="/stylesheets/again.css") diff --git a/web-portal/client/views/main.pug b/web-portal/client/views/main.pug index dc8da53..2cb826e 100644 --- a/web-portal/client/views/main.pug +++ b/web-portal/client/views/main.pug @@ -25,7 +25,7 @@ block headeradds const isAutoLogin = #{isAutoLogin}; const alNotecards = #{notecards}; const alRooms = #{rooms}; - const alURL = #{alURL}; + const alURL = "#{alURL}"; link(rel="stylesheet", href="/stylesheets/main.css") From a762739db6a8c732028259da467291088266b97f Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 19 Mar 2025 01:43:34 +0000 Subject: [PATCH 24/26] More fooling with css on again pag to get again button to show-up and look ok. --- web-portal/client/stylesheets/again.css | 5 ++++- web-portal/client/views/again.pug | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/web-portal/client/stylesheets/again.css b/web-portal/client/stylesheets/again.css index 467e019..213b6fe 100644 --- a/web-portal/client/stylesheets/again.css +++ b/web-portal/client/stylesheets/again.css @@ -15,9 +15,11 @@ vertical-align: middle; display: table-cell; visibility: hidden; + height: 100vh; + width: 100vw; } -#run-button { +#again-button { font-size: 24px; line-height: 1.6; padding: 1rem 0rem; @@ -25,6 +27,7 @@ } body { + height: 100vh; background-image: url('/images/logos/logo_red_no_border_568x385.png'); background-repeat: no-repeat; background-position: center; diff --git a/web-portal/client/views/again.pug b/web-portal/client/views/again.pug index 966d7f5..7bf68f8 100644 --- a/web-portal/client/views/again.pug +++ b/web-portal/client/views/again.pug @@ -27,6 +27,6 @@ block headeradds block content - #again-button + .row.text-center#again-button button.main-button(type="button" onclick='window.location.assign(decodeURI(alURL));')!= "Run Medley Again" From 5b47d6d115379a5d5ae691b8192da7ab3d729d04 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 19 Mar 2025 04:09:50 +0000 Subject: [PATCH 25/26] Realigning things a bit on the the again.pug page --- web-portal/client/stylesheets/again.css | 1 - 1 file changed, 1 deletion(-) diff --git a/web-portal/client/stylesheets/again.css b/web-portal/client/stylesheets/again.css index 213b6fe..200a453 100644 --- a/web-portal/client/stylesheets/again.css +++ b/web-portal/client/stylesheets/again.css @@ -12,7 +12,6 @@ #page-container { text-align: center; - vertical-align: middle; display: table-cell; visibility: hidden; height: 100vh; From bf679135d1310b73564abcf547d7006fc7bfd512 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 19 Mar 2025 06:02:45 +0000 Subject: [PATCH 26/26] Adjust location of File IMPORT/EXPORT button in ONLINE-INIT --- docker_medley/init/ONLINE-INIT | 22 ++++++++++------------ docker_medley/init/ONLINE-INIT.LCOM | Bin 5357 -> 5297 bytes 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/docker_medley/init/ONLINE-INIT b/docker_medley/init/ONLINE-INIT index a24a03f..f1de5c9 100755 --- a/docker_medley/init/ONLINE-INIT +++ b/docker_medley/init/ONLINE-INIT @@ -1,13 +1,10 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "17-Mar-2025 17:06:18" {DSK}medley>il>ONLINE-INIT.;16 10625 +(FILECREATED "18-Mar-2025 22:45:51" {DSK}medley>il>ONLINE-INIT.;1 10668 - :EDIT-BY "fgh" + :EDIT-BY "guest" - :CHANGES-TO (FNS Online.FileButton) - - :PREVIOUS-DATE "16-Mar-2025 23:41:43" {DSK}local>interlisp>medley>greetfiles>ONLINE-INIT.;1 -) + :PREVIOUS-DATE "17-Mar-2025 17:06:18" {DSK}medley>il>ONLINE-INIT.;1) (PRETTYCOMPRINT ONLINE-INITCOMS) @@ -104,7 +101,8 @@ NIL]) (Online.FileButton - [LAMBDA NIL (* ; "Edited 17-Mar-2025 16:51 by fgh") + [LAMBDA NIL (* ; "Edited 18-Mar-2025 22:31 by guest") + (* ; "Edited 17-Mar-2025 16:51 by fgh") (* ; "Edited 16-Mar-2025 23:40 by guest") (* ;; " Add the FILES IMPORT/EXPORT button to the bottom of the button stack on the right side of the screen") @@ -129,7 +127,7 @@ RIGHTMARGINISH 50)) (IDIFFERENCE (fetch BOTTOM of (WINDOWPROP LowestButton 'REGION)) - 25))) + 35))) (WINDOWPROP L 'RIGHTBUTTONFN 'NILL) (* ;; @@ -139,7 +137,7 @@ XCOORD _ (IDIFFERENCE SCREENWIDTH RIGHTMARGINISH) YCOORD _ (IDIFFERENCE (fetch BOTTOM of (WINDOWPROP LowestButton 'REGION)) - 80))) + 85))) (SETQ B (CREATE-BUTTON '(ShellBrowse (UNIX-GETENV "OIO_FB_URL")) "IMPORT/EXPORT" P)) (WINDOWPROP B 'RIGHTBUTTONFN 'NILL) @@ -241,7 +239,7 @@ (BKSYSBUF " ") ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1706 10489 (Online.SftpInitInfo 1716 . 2589) (Online.SftpUpdateInfo 2591 . 2846) ( -Online.SetUpNOTECARDSDIRECTORIES 2848 . 4556) (Online.FileButton 4558 . 7277) (Online.DoInit 7279 . -10350) (ONLINEP 10352 . 10487))))) + (FILEMAP (NIL (1640 10532 (Online.SftpInitInfo 1650 . 2523) (Online.SftpUpdateInfo 2525 . 2780) ( +Online.SetUpNOTECARDSDIRECTORIES 2782 . 4490) (Online.FileButton 4492 . 7320) (Online.DoInit 7322 . +10393) (ONLINEP 10395 . 10530))))) STOP diff --git a/docker_medley/init/ONLINE-INIT.LCOM b/docker_medley/init/ONLINE-INIT.LCOM index 0860953063640a85923875e9d75520b70083b1b5..c4462eba55dbddd886e5e80a71b62498b0acdc93 100755 GIT binary patch delta 117 zcmaE>xlwaMgph@$*6GxK8F^wBG!HaS}VD^5kMpZN|{e I^Ev&v0bng3ssI20 delta 199 zcmdm}`Brm6gpj$eZ(@%gLPdTLtGV<49yUB85vud7+RSa1C6S73HGkFDJ?Ft%gIkp%(2VND@iTN$t*6g o%T47^$w{rWOD{@IElC5KT)cTI<3e^u$;sxN+Kd64lR5pk0b`9j6aWAK