From 0f39d31ffc15966c8b2a311e4262efce2f761889 Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Wed, 24 Mar 2021 13:36:23 -0700 Subject: [PATCH] Fixed MeshCmd.js login method. --- agents/MeshCmd-signed.exe | Bin 4434272 -> 4435984 bytes agents/MeshCmd64-signed.exe | Bin 4041568 -> 4043280 bytes agents/meshcmd.js | 32 ++++++++++++++++++++++++-------- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/agents/MeshCmd-signed.exe b/agents/MeshCmd-signed.exe index 6a1103597d18192c588ad431137073a4ab7207c9..ac69fdfc9064c094042793badff564d009e17b93 100644 GIT binary patch delta 2406 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 diff --git a/agents/MeshCmd64-signed.exe b/agents/MeshCmd64-signed.exe index 6bdf091466fba81969ea3e633f181dbc5394743e..cdd3493ef3c58c148583ac7028d053e9f2d75ca7 100644 GIT binary patch delta 2381 zcmciCdpwl+8US!JshG?NbFyrB85y@3cVgZNtHMzcx-46#cX?+FV@7jvO|!#>({>T@ z7O`oiY@5rrjMbLK!KM^zL!nabcF`8)sDslvkLzx`=kN1=KHvG{ndkTWJ@4~-X72Tj zld>O*rfTchKXaWjY2DAVb(112r4s?Jn z&;xYv7q9~8gZF>|Fa+;|mB0uX0~3G%Q(y)dz#Oas7JvyXffcX@Ho#WZPGWIiW@?PF z02|l=d*A>ZffH~BF2EJIfz>LFG4~gfhTg%UK7pIo`};C&5vKRX(2&r;pxJtQ1xV-n){R~%23KZ5KAO@gp7C*#Yu5+UOl}-1*MvywLTLuG0fdV%t*!A` zOdzzjW^#~JI9a)eW61b@$A6y+@plr5+AdT_e<5Sxa%PX~GC=7;v2j8idNcQGP+BB{ zMFJ#|6^l!wFu5!WiGqIPlIhAtI39^d{-JoeM2JcFQm8h32ZyMx=japSPL!dYIQIoR zPA-kIWD$HDF?59vv|l2^VsTsM#{v;1Nn#Q@DwM7P zr!Z~dtl6YEOe#$fOCsM*GM`UEK9KWxxP;A46H%yr#GDM zbQ}gT8<xw*|w!J=yP9Ef}`p6ulTR-CPWb<>&k!II; zcF7g3ztPq`yK#fJihSvVFco%``$orp=YdnM#9BtW#Seb{oX>=#BMCW!mU`p;1Fk>c zrlfA9SHu@Dqh-}*V;0*Rp10((h`*O{(-qRK9>l>5Ukj0rTW%+x|CDh`i-G()G|WzF zQybCD&wbKlmuE&&f40H5>vSi>?jY}%mdo+~nLK`>_sc*|`&6~lneFs)G~)8>UWLIk zuUEsXjeXB}_b0P0*KCurB0dXq@JtjaGbK-(l-2+6P4U2wnRXWL-f{J13Aax(ASmBK zQEZ&jga; zi1lkhg@H@d=g|hKV?|}*-R_TD`qxFIXpalZ&j%Pz{45I3FVUE)x*g!}c?nZy98*d= zf|@6;6@9$eHD>uqa()t>_x7pzN3UFNCzFq=5n5-tuN02Xj`ofYF0Ntro=Y^XGyF1M zQ%RcY4vy;f=hb3+j;IF66*lQi-%!gB71stR zZn*2E-u?HGQI6M(Lx~6DYsQ|v?zlS4bPnAo82{z`p)anEq_ywg)G%?Svg_uZN6`i2 zt=7V@f^QGAACdmK=b{@~srw0Z2XQ>ytSp9>v45M**GS#$_92pcH7o&H=T z?5Jz0e%Y;G=sM8WHYO26P#`ZrfjpZYGf&g=U->G$_GI?>!la}HLOn#UB8Oa{AXoMp*5g9GLMtF~y~ z3sTfXQ|_fiJ>IM9{={Sa_)fL#mM8VmdOl-1{M;PF^*49dY(BSJHR_mEuKlJpQU5?~ zZ*Rbq_p$vCt_w%bIkmUC*_Fk%EmFRJ6MgfOULWTH+5N(%ye!um2Zh>(ZD;#K>?%t~ z$M5f|An|F0+aM`TW);dWE^pYnv$G??kERiVzkSL&gY3CS*AP{*Y?^x<9Zdw$ba!@L zCSzU0=F)#frfTvMzQ0qqyfoaaG$_8JpmFUaiK6$xic>sId?$JXvc>W8z*uati delta 1620 zcmYMuc{J2(7zc1OV_#>|2xIw;EX^>MnX>(U)8rDO>{1AGYcLsO8I&3%i7w@q>PPCz zNg^qUJ4BWg2OYY$C@q!}x+;4K_pQ#o_dVzH$NRkR^L(G*#}+Ve`WGuml!5gC5l{g(0IGl* zpbn4#4L}pn0<-}LAOkwUMnD(P1M~p{U=u(AsDL40Bx=Xdm@{dTb2PvhFab;fGk^{- zfX%=bz#OmuEJc!YR-cxYT-|J4UF>%_czf7*?QnGw;XhfcDT)GDtrfUR5s~{N_`%$e z*l2bPH-azvd=M65F`TrBa99)(j_eMWjblecvC%w;389NU2n+2_L{!luv9KKaqz_S* z{QhLfL_d!sDyVSQS_W-AifllG+F)rE>40Tq$xMhJ%i}@%`si>4tb%%nAw=KcHxA|L@LCWgxo5g30jp`X_fWfbaxrHQvxoHT`#|@Hc)vZrNx&NUr1?rMB>XweYm-w}kStgTbU| z?RYgo%Sn=OFaV~kwAC+K?7DQIyT6~P!=C8FQB#UFA`5fPAJsTspy?+?pRc0Pi>SC?R!jJAbT!w)c{CqFH#T2aPzrJ2m6YA?htp*saVo7T6dc{n`CNfW<@t=nEINsBxR^49ZxPQU}VJ2=;EfG?|Uhn zV>a9`xmzugrraN*3VwlVrTCUxx2TfONXyAZc9ktxN9S`)`rY>UEmg8i75*E5!AOXS zAIFM0@>s(Xr}l>VzfzLwGN_m|lnQ!&aOr5!aeK0SX+r^4h)1GpPY9CFB|gG_sh^>qHuwB zTtg^w-uJ+0Byci@TLzN{2z3j_bB>{1Hlc9~=aGb4;t KJ!7wkf%6YFR>Cj< diff --git a/agents/meshcmd.js b/agents/meshcmd.js index b47d5702..08118887 100644 --- a/agents/meshcmd.js +++ b/agents/meshcmd.js @@ -159,6 +159,7 @@ function run(argv) { if ((typeof args.uuidoutput) == 'string' || args.uuidoutput) { settings.uuidoutput = args.uuidoutput; } if ((typeof args.desc) == 'string') { settings.desc = args.desc; } if (args.emailtoken) { settings.emailtoken = true; } + if (args.smstoken) { settings.smstoken = true; } if (args.debug === true) { settings.debuglevel = 1; } if (args.debug) { try { waitForDebugger(); } catch (e) { } } if (args.noconsole) { settings.noconsole = true; } @@ -1950,16 +1951,31 @@ function startRouter() { // Start by requesting a login token, this is needed because of 2FA and check that we have correct credentials from the start var options; try { - var url = settings.serverurl.split('meshrelay.ashx').join('control.ashx'); + // Parse the URL + options = http.parseUri(settings.serverurl.split('meshrelay.ashx').join('control.ashx')); + + // Figure out the 2FA token to use if any + var xtoken = null; + if (settings.emailtoken) { xtoken = '**email**'; } + else if (settings.smstoken) { xtoken = '**sms**'; } + else if (settings.token != null) { xtoken = settings.token; } + + // Complete the URL and add a x-meshauth header if needed + var xurlargs = []; if (settings.authcookie != null) { - url += '?auth=' + settings.authcookie; - } else if (settings.username != null && settings.password != null) { - url += '?user=' + settings.username + '&pass=' + settings.password; + xurlargs.push('auth=' + settings.authcookie); + if (xtoken != null) { xurlargs.push('token=' + xtoken); } + } else { + if (xtoken != null) { + options.headers = { 'x-meshauth': Buffer.from(settings.username,'binary').toString('base64') + ',' + Buffer.from(settings.password,'binary').toString('base64') + ',' + Buffer.from(xtoken,'binary').toString('base64') }; + } else { + options.headers = { 'x-meshauth': Buffer.from(settings.username,'binary').toString('base64') + ',' + Buffer.from(settings.password,'binary').toString('base64') }; + } } - if (settings.emailtoken) { url += '&token=**email**'; } else if (settings.token != null) { url += '&token=' + settings.token; } - if (settings.loginkey) { url += '&key=' + settings.loginkey; } - options = http.parseUri(url); + if (settings.loginkey) { xurlargs.push('key=' + settings.loginkey); } + if (xurlargs.length > 0) { options.path += '?' + xurlargs.join('&'); } } catch (e) { console.log("Unable to parse \"serverUrl\"."); process.exit(1); return; } + options.checkServerIdentity = onVerifyServer; options.rejectUnauthorized = false; settings.websocket = http.request(options); @@ -1979,7 +1995,7 @@ function OnServerWebSocket(msg, s, head) { if (command.email2fasent === true) { console.log("Login token email sent."); } else if (command.email2fa === true) { - console.log("Login token required, use --token [token], or --emailtoken get a token."); + console.log("Login token required, use --token [token], or --emailtoken, --smstoken get a token."); } else { console.log("Login token required, use --token [token]."); }