From 3599021a66cfe817db5f412311c5b81e44a8e0b2 Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Sat, 17 Jul 2021 23:03:44 -0700 Subject: [PATCH] Completed remote desktop server view only option. --- agents/MeshCmd-signed.exe | Bin 4187176 -> 4187624 bytes agents/MeshCmd64-signed.exe | Bin 3801640 -> 3802088 bytes meshdesktopmultiplex.js | 3 +++ views/default-mobile.handlebars | 9 +++++---- views/default.handlebars | 10 ++++++---- webserver.js | 2 +- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/agents/MeshCmd-signed.exe b/agents/MeshCmd-signed.exe index 30ead8cb0a1e13a6eeff304472bf666982b298cc..5f94c7a4ebf5824a257b8ac66e64fe3986b383f3 100644 GIT binary patch delta 1887 zcma*kdpOi-8wYSRG#N9)s2ORKS9V)3yAf6;3Gb~x+P!xF**`wl^&GDIdq4N@SJ^Z} z8TfvNQnQCbEin9SABCXSJV@72vNV)gRGg zq#WsyRC82pfWvK25^ZOsVrP^B_t+pIp0Ywr98-ggaJMaDkgc|e?)NT)9F!v`8aBL$ zyvPtGI!B#ddSC|&#KA^+h=Ki*Q95oLx1`B>aX(6M(C zs>P;j2o`20LNm-q3*HrzP+UR%7UMk|B^>js z`VuBNd=}YIDPody9>tse>8sqhgZ!7x?uEFx5Ye&GBta*AXV6vMzc+HnZo0&lzjPy^ zTObAB{SAICa}Lo=`%4&xu(jkCCL#Z)iCK^csgm$|ssYBm_a&*~Q=aH%(YVFyy8SDL zzLTCrj-$S{6?eBSj`zLnyF~s=lGI4HpJO)~{OyU%K42nSgE2oXz=h38!Cv=gY0Xs(!MMKQ$Elg18;yt;8WuBHT;ZfSpW8cnm_i1zAL9X)BjSdYy%8AM}e@<3izLPUrJssVXNVE?s zrBO=9lDOfGGK)_~E7yH}tH)1A<#_!wenGQrbhz1)%7L?LG`aB@0?#Sy2KudH(8AFMk5Ltx5OXng*oAZes_;jx#8 zM?bkgWD-@L2mdn#%m#7f?E$O3}lge|JxlN zsF_!K>P8+JCGs9IS)>{0yYAK=(D+b)y_oerfI^w0qnAe2ai}O8tkYR59&fFR+QK^2 zY-$qNbh34KaAVih)1mse%&?St)%Ekc9H;yIxs@%?`tLQBeCgc64an6baEzOLGSs4^ zI{h`hL0w4+)OuRsPki;2lpi|>ZO%kYHmM zurnunRTar?-DbCoA0I8tQEv^PKP)sAe3g+od@ruMeq(2?d4Q3RdZmFZJFowBS-+8g zilSwvxCj*<`+ikocHzZ=`O7i_R{MJuBz$AZmA6iw+ZDFg$%P`OA6~k# zCNIS5@Z>rEgigO(pUt+5Mwxl8+^1JM;;aTYlSNC$cLlelh3=im*xJ+irird~87N;` s_L3i>3A8I&aX+SYXjAE}Ul*qR=RulJ;*jW}@UDYf==93okHrW651$7x=Kufz delta 1814 zcma*je>~K890zdU>u`RYpXb-%a4ya{*P&wR^ZlBY(DGwP%w&qgaqcdpQSDAGKOX7V z8lOh2HYG|7`KnZxRGM9^&?Aqmm02xKVoYr}`(%&DdOZ4Te?0$qf4-mh>;3+Ip7hRR zCwu0xW(7u3oH&$?;gremceP-}E!b-mWD!C|bP+v7AE6-zh#_Kx7$bDV1TjU-5Oc%= zu|yb%6=IFpAhw7d!bI#52gDI!Ax?-h;)1XdSA>HsM%)m0go}6}Jj4^>BVLFAS%L@= zZ^Vae!F)ws#nf(JlG?p=_j}8e<+2>PR4kCn)3^!j>3QuDbI50Bzf{bk5<#1HXD-a%F%0mw?SR39)cA>9`@hmmri4=*sm zy)n@KsNyx%&65aOEgJx@R6PQ&1+{p`DKqKW%4QCty z13Dc5Mo|3;=&+P;%7~VW7FOeC^PPo!XLoqe4OqcQ4nc*Ad0+~k8{stAnGe2MNFh<` z^EZK9NOJ%dWbF>HiT-*4>xHQ>at}y>f+8>tH5Uj0%v9l?q}g7OhCx*rZVbEjfov#> zCYUgCKd^=`6a)iC90N2c)I~phRF5!%`JVtTX?OtWF`)|LEU2zTpHVX%N*aJaRM!Lh zast+7LW?izpPz4vX+OlQlN2FBwy;{paILwUuGbbuL^NMp-SVG}=3*Bwt$5 z5x?(ZW;0hEHX zlT|V__3Wovr7v%T09rjHb}4D0;nf?}4abeHTBcXuNZ!w?E&K3_cwKs4ckhyidq0>= zJQq4OCn(UlS#=|w>?2q0{6)#)Z)Mv#Ytv@#-@mK~F4`Cx*F1meq@LA$M9r8>p3}Li z99$M)pV$BD?|MPC(vM@TVGdrtbmF(_ms-=n{@=n5g(>pwxVxV+E@X(6KdpRH%JB`( z8&)6l`KY?NYxOy^Suc5;j27*%Ix)K5d7{0ka4ODb-GhTME(uRZ9^l*9(?Q1m%*jR5 z>*!|>?dhLeGydRUSoxW;D`23pI9g?H(brjdw^;P^k4@J!x21CV`jE^=brBikT~Qs^ zsiQ3){c&lOWgoEFmET*UxJxlGg@+#zzblve_;~v)T^27S^bB}KAw_@CF$1c%4^=3d z44TZ5F;m;5A@zHik=RvEB+c44a>+=kB&M)<<~Zj%rg|@yXQ4k{mX&6i7%HUy7l2{9 zI@FyMotW<6U$^*trX6M-wm#Bc6U+Zm+Z8)AyXDXq<;>BV)9~A}6lI*2CwA{Mmkf?9 zz5M>RN|pIH{AacSkE`aTr)aZ3q?x*UB^+_{H0u7m_DUP!y*T(uWnPEp?dzMlv^f7j z!-2)E{Tee~Zo$WPbH?IV+h`eu17chI?E|Ul-E+eZnq-D5`uA0}^V2fV>L%BbE^Sj# zZq#^uole%kq8$PYa#~pt;c;$;bv{Cz%-EW0r!jc(CI8^lTk4eM`}!JsPYxDMX}-$U z`Yp5GQ$^e}D&(Dss>s$>%$Z)*$d+9*-}NfkvSF^w8a;LAGu{&xL|%E4E0@k8B!o9*w&fT;aX$U=J;u+&GN?% zNgK1BdT!8e-(klvq~E@KH_mWv<_EilePqzR01j_w?j{i-o$2+zG8E)D)gxa$_`{ea6d0H+xJ~d%mvTl1)6(@v^N!)er%uT#dj%hv2Lnk&q>pyM0Av6F diff --git a/agents/MeshCmd64-signed.exe b/agents/MeshCmd64-signed.exe index 847e720c649312e7595f45600aaca076f8a8917e..21c8d4c95ea37e9a0e6d4a18c7c76b36e059ed1c 100644 GIT binary patch delta 1868 zcma*jSyYop6bEp!m=Yi?Wfc+)qU?qU;(VWMVNq~HB}5birELgnSVF|A5H`UDu`V#I zR;3mSQWdM81jVSxCPIOVAgLmS)>9Gb0aIH*JNTfU_N5QMbLP&R`@b_&mHmwLEcY4d zVmgWJK6N6KG&kL%eCNBIEDe$+)59IZNxO;#2r8-$Sc7q z4H)JHzNAHlOCp65sPqEXaFz$OU{oj2frCCklj!yVbia2Y#8@6!MuXZtz?Bf30M+EV zB@XRffdSO11)9*W2xP&&Lf{N7tuS2;d$w2_8*9&Yw1F8sTpw~NI34mJxCBi^7z1h* zqG8Yt7{6;KQ1iFs4=030DUdSeYCTw11dtILyIsi zI8y?wh`-MRnkn402&2!v#SkVOw^1)_0Wou13*J@mVl(;!)Mf+~4S)p|5vW&eiE9xr zTfky6iAxx?gI#7Hea+2Lunx@C*6>t4phKPcIGyleVRFiU2Vro9ITre_X#|?)Pl9dg zm?oiRf!(M5D-5ErwM3{bCjP&PxhN5(;$hdx8W0Zsj%RQ+22yP{Rr4|Z126e^W|@RV zbbR3P&Wy3jno*-Vz3%x(_%3`;!MJCAL|IGTfYOyX_8dQ{$IV;dCk{E=wU6~^O!AjO zhVf~g7_~Hde*VfmP!(VIM0v#Pa+@%w zAbf$Oef8sx5kp>Gr>wiZD6|*{nZokPA@9Ok4YeCZk8ShfSC2hdvO{%JTP2qoDF$pu z>iHFgv=a|LSJp;nB(VL=Zt9C3x^9Zv)0)fAW#l;ZS-Je7-*(wp z%=MtrZFBr`{$!Bo)MbuTZcRs45l12ncoF^ft|Wk|>WymSZ5AD>JvFbkYeT>n_v$Az zgEEf{pR)R0)@|qzt+r37++5gHFY*;~0>`UE*h>bEh|TReIHy~Yhr4NA5^FYzUhSw1lxBG~F7+b9&LmJe>cr|cJ z(=ET*yzUCBF4z&f(7|Xt$$6CGy)UzM!WVb#ADNBWc{EKFoIKyzZR&^9Uw93e{IPvF z-?-vyW(vo};pY;!hXKq{EAeFI!(Ne`bJBVp^{28V_kAU!VN-8Xli!3Zt17~NRoh=+ fQjsD|&nK%rUwHuX&t&-yF0GHR(0Ms@cC_LjVR|dM delta 1792 zcma*jdozxEC3dk(n`KjPm|QS=j>nm$LEjdoagyI&-?aE`w7bIenL$q zf%tIe?yUr0;_$O=9Rz6yVGR@B0erLK2~fW8z03Ev5HtLj)?ISOH#y=#gXE;r0AqgAy#(YeoKAr6O$y-aZ%B0 zHnF2Q9BKYc2ZV<>B7DRNnT^arobmjbz|0U*MVLMm?gX0fECz-r%jxoFK*HMuK%ot< zurW;-T8C=dLg3)_r5i`xd<{qwV|wtXy?}+E-3?93Wb#*655x8H?aM-z#hgZFfL9z4x$J!b1kL|o2q~W`bh+4P)XYxlkm_jer5JAWJLkpc^ku8^WReP-litF0$zAk`TRE&-zCllp8&=#u z&=9()2O57CY|E(F_i3S1o*%J6{H)SdFT3Zl?a|Ev0fDUcU}xV;1J%jouenF;hg{u3FZ$naxs9va+F`V^ay!@m>w`A2UPvgri zL9ag*WTgqMR5vDG3M-R^?)ctv&pH`7BY0(8NVEI^^SCg%#zau7Nol#6w~sp`?2b31 zr8bqA9^97J@w+mj^DxoF-Ed5=vMeJ!ZJ=pXFU0*sMPgUqRA-mPJC?saRC-jWXtcya zf8Vj?*VM;P+Y;Y$_w02U$(YUOJMw4G3Ff(JXxZj^<-Vg5v`CJ863?rr=yk)7whMF@ zeW&~M^XAx`71MW(fAp`j6a+eW?BHI%J2CyvF5f=?D_#!8ebu>Vc+`Ib2n4bkX)969 z{x(f-WHa}kmfB;F@MD^?EMmzDg?yr?tzHy%>ZL)Y z;SK*Iy{(a4ZVaKgRk6`Wqu4c((am3$)g-iBkiIPi=8J!pe0Tue(`1poryM^R$)}7( z^&QL(TIilpfBn`EYjwFSCcL{^#PC1NrZNj|X4>%|247uxO})nS(7+j~PrL1*9!qLj z+1#+7yVKcapJdW|k5)QtnAWGPZesm5>e5v}4(!~mv!9`mYq-9@Y*(@jXK$Iep2_)T z|Czg-YOM6Va$qNIld3NMbl!&*!!3t-de7gB?Ur2Mo)NsJ*cP(LRyWD1^n_cy{5K=r zt91h!Tus#+G|8_&juyr+-K#1$R;?dsDQq?}1l_OJD<1;$&H?`ndVG?onY z4${Yx45)vEnjW7hl<&?Baj$AA%L;2{ zJR9p~)@+`KkM 90)) return false; } @@ -2816,7 +2816,7 @@ // Check what keys we are allows to send if (currentNode != null) { var meshrights = GetMeshRights(currentNode.meshid); - var inputAllowed = ((meshrights == 0xFFFFFFFF) || (((meshrights & 8) != 0) && ((meshrights & 256) == 0))); + var inputAllowed = ((features2 & 0x2000) == 0) && ((meshrights == 0xFFFFFFFF) || (((meshrights & 8) != 0) && ((meshrights & 256) == 0))); if (inputAllowed == false) return false; var limitedInputAllowed = ((meshrights != 0xFFFFFFFF) && (((meshrights & 8) != 0) && ((meshrights & 256) == 0) && ((meshrights & 4096) != 0))); if (limitedInputAllowed == true) { if ((e.altKey == true) || (e.ctrlKey == true) || ((e.keyCode < 32) && (e.keyCode != 8) && (e.keyCode != 13)) || (e.keyCode > 90)) return false; } @@ -2851,7 +2851,7 @@ // Check what keys we are allows to send if (currentNode != null) { var meshrights = GetMeshRights(currentNode.meshid); - var inputAllowed = ((meshrights == 0xFFFFFFFF) || (((meshrights & 8) != 0) && ((meshrights & 256) == 0))); + var inputAllowed = ((features2 & 0x2000) == 0) && ((meshrights == 0xFFFFFFFF) || (((meshrights & 8) != 0) && ((meshrights & 256) == 0))); if (inputAllowed == false) return false; var limitedInputAllowed = ((meshrights != 0xFFFFFFFF) && (((meshrights & 8) != 0) && ((meshrights & 256) == 0) && ((meshrights & 4096) != 0))); if (limitedInputAllowed == true) { if ((e.altKey == true) || (e.ctrlKey == true) || ((e.keyCode < 32) && (e.keyCode != 8) && (e.keyCode != 13)) || (e.keyCode > 90)) return false; } @@ -3991,6 +3991,7 @@ if (tsid != null) { desktop.options.tsid = tsid; } if (consent != null) { desktop.options.consent = consent; } desktop.onStateChanged = onDesktopStateChange; + if ((features2 & 0x2000) != 0) desktop.m.stopInput = true; desktop.onConsoleMessageChange = function () { if (desktop.consoleMessage) { Q('p11DeskConsoleMsg').innerHTML += formatAgentConsoleMessage(desktop.consoleMessage, desktop.consoleMessageId, desktop.consoleMessageArgs); @@ -4351,7 +4352,7 @@ QV('termarea4', !fullscreen); var rights = GetNodeRights(currentNode); - var inputAllowed = (currentNode.agent.id != 14) && ((rights == 0xFFFFFFFF) || (((rights & 8) != 0) && ((rights & 256) == 0) && ((rights & 4096) == 0))); + var inputAllowed = ((features2 & 0x2000) == 0) && (currentNode.agent.id != 14) && ((rights == 0xFFFFFFFF) || (((rights & 8) != 0) && ((rights & 256) == 0) && ((rights & 4096) == 0))); // Show full screen buttons if needed QV('deskkeybutton1', fullscreen); diff --git a/views/default.handlebars b/views/default.handlebars index e268c8f7..37b58869 100644 --- a/views/default.handlebars +++ b/views/default.handlebars @@ -3567,7 +3567,7 @@ // Check what keys we are allows to send if (currentNode != null) { var meshrights = GetNodeRights(currentNode); - var inputAllowed = ((meshrights == 0xFFFFFFFF) || (((meshrights & 8) != 0) && ((meshrights & 256) == 0))); + var inputAllowed = ((features2 & 0x2000) == 0) && ((meshrights == 0xFFFFFFFF) || (((meshrights & 8) != 0) && ((meshrights & 256) == 0))); if (inputAllowed == false) return false; var limitedInputAllowed = ((meshrights != 0xFFFFFFFF) && (((meshrights & 8) != 0) && ((meshrights & 256) == 0) && ((meshrights & 4096) != 0))); if (limitedInputAllowed == true) { if ((e.altKey == true) || (e.ctrlKey == true) || ((e.keyCode < 32) && (e.keyCode != 8) && (e.keyCode != 13)) || (e.keyCode > 90)) return false; } @@ -3626,7 +3626,7 @@ // Check what keys we are allows to send if (currentNode != null) { var meshrights = GetNodeRights(currentNode); - var inputAllowed = ((meshrights == 0xFFFFFFFF) || (((meshrights & 8) != 0) && ((meshrights & 256) == 0))); + var inputAllowed = ((features2 & 0x2000) == 0) && ((meshrights == 0xFFFFFFFF) || (((meshrights & 8) != 0) && ((meshrights & 256) == 0))); if (inputAllowed == false) return false; var limitedInputAllowed = ((meshrights != 0xFFFFFFFF) && (((meshrights & 8) != 0) && ((meshrights & 256) == 0) && ((meshrights & 4096) != 0))); if (limitedInputAllowed == true) { if ((e.altKey == true) || (e.ctrlKey == true) || ((e.keyCode < 32) && (e.keyCode != 8) && (e.keyCode != 13)) || (e.keyCode > 90)) return false; } @@ -3660,7 +3660,7 @@ // Check what keys we are allows to send if (currentNode != null) { var meshrights = GetNodeRights(currentNode); - var inputAllowed = ((meshrights == 0xFFFFFFFF) || (((meshrights & 8) != 0) && ((meshrights & 256) == 0))); + var inputAllowed = ((features2 & 0x2000) == 0) && ((meshrights == 0xFFFFFFFF) || (((meshrights & 8) != 0) && ((meshrights & 256) == 0))); if (inputAllowed == false) return false; var limitedInputAllowed = ((meshrights != 0xFFFFFFFF) && (((meshrights & 8) != 0) && ((meshrights & 256) == 0) && ((meshrights & 4096) != 0))); if (limitedInputAllowed == true) { if ((e.altKey == true) || (e.ctrlKey == true) || ((e.keyCode < 32) && (e.keyCode != 8) && (e.keyCode != 13)) || (e.keyCode > 90)) return false; } @@ -7640,6 +7640,7 @@ if (desktop.m.SendCompressionLevel) { desktop.m.SendCompressionLevel(1, desktopsettings.quality, desktopsettings.scaling, desktopsettings.framerate); } desktop.onStateChanged = onDesktopStateChange; desktop.onMetadataChange = function(metadata) { updateMetadata(desktop, 'deskmetadata'); } + if ((features2 & 0x2000) != 0) desktop.m.stopInput = true; if (desktop && desktop.m.mouseCursorActive) { desktop.m.mouseCursorActive(true); } QV('DeskInputLockedButton', desktop.m.RemoteInputLock === 1); QV('DeskInputUnLockedButton', desktop.m.RemoteInputLock === 0); @@ -7700,7 +7701,7 @@ QV('d7meshkvm', (webRtcDesktop) || ((currentNode.agent != null) && (currentNode.agent.caps & 1) && ((deskState == false) || (desktop.contype == 1)))); // Enable buttons - var inputAllowed = ((currentNode.agent == null) || (currentNode.agent.id != 14)) && ((rights == 0xFFFFFFFF) || (((rights & 8) != 0) && ((rights & 256) == 0) && ((rights & 4096) == 0))); + var inputAllowed = ((features2 & 0x2000) == 0) && ((currentNode.agent == null) || (currentNode.agent.id != 14)) && ((rights == 0xFFFFFFFF) || (((rights & 8) != 0) && ((rights & 256) == 0) && ((rights & 4096) == 0))); var online = ((currentNode.conn & 1) != 0); // If Agent (1) connected, enable remote desktop QE('connectbutton1', online); var hwonline = ((currentNode.conn & 6) != 0); // If CIRA (2) or AMT (4) connected, enable hardware terminal @@ -7859,6 +7860,7 @@ if (tsid != null) { desktop.options.tsid = tsid; } if (consent != null) { desktop.options.consent = consent; } desktop.onStateChanged = onDesktopStateChange; + if ((features2 & 0x2000) != 0) desktop.m.stopInput = true; desktop.m.onRemoteInputLockChanged = function(obj, state) { QV('DeskInputLockedButton', state); QV('DeskInputUnLockedButton', !state); } desktop.onConsoleMessageChange = function () { if (desktop.consoleMessage) { diff --git a/webserver.js b/webserver.js index faa1b467..c2a35e16 100644 --- a/webserver.js +++ b/webserver.js @@ -2818,7 +2818,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) { if (domain.localsessionrecording === false) { features2 += 0x00000400; } // Disable local recording feature if (domain.clipboardget == false) { features2 += 0x00000800; } // Disable clipboard get if (domain.clipboardset == false) { features2 += 0x00001000; } // Disable clipboard set - if ((typeof domain.desktop != 'object') || (domain.desktop.viewonly != false)) { features2 += 0x00002000; } // Indicates remote desktop is viewonly + if ((typeof domain.desktop == 'object') && (domain.desktop.viewonly == true)) { features2 += 0x00002000; } // Indicates remote desktop is viewonly return { features: features, features2: features2 }; }