Fixed MeshCmd.js login method.

Ylian Saint-Hilaire committed Mar 24, 2021 at 13:36 UTC 0f39d31ffc15966c8b2a311e4262efce2f761889
3 files changed +24 -8
agents/MeshCmd-signed.exe
Binary files a/agents/MeshCmd-signed.exe and b/agents/MeshCmd-signed.exe differ
agents/MeshCmd64-signed.exe
Binary files a/agents/MeshCmd64-signed.exe and b/agents/MeshCmd64-signed.exe differ
agents/meshcmd.js
+24 -8
@@ -159,6 +159,7 @@ function run(argv) {
159 if ((typeof args.uuidoutput) == 'string' || args.uuidoutput) { settings.uuidoutput = args.uuidoutput; }
160 if ((typeof args.desc) == 'string') { settings.desc = args.desc; }
161 if (args.emailtoken) { settings.emailtoken = true; }
162 + if (args.smstoken) { settings.smstoken = true; }
163 if (args.debug === true) { settings.debuglevel = 1; }
164 if (args.debug) { try { waitForDebugger(); } catch (e) { } }
165 if (args.noconsole) { settings.noconsole = true; }
@@ -1950,16 +1951,31 @@ function startRouter() {
1951 // Start by requesting a login token, this is needed because of 2FA and check that we have correct credentials from the start
1952 var options;
1953 try {
1953 - var url = settings.serverurl.split('meshrelay.ashx').join('control.ashx');
1954 + // Parse the URL
1955 + options = http.parseUri(settings.serverurl.split('meshrelay.ashx').join('control.ashx'));
1956 +
1957 + // Figure out the 2FA token to use if any
1958 + var xtoken = null;
1959 + if (settings.emailtoken) { xtoken = '**email**'; }
1960 + else if (settings.smstoken) { xtoken = '**sms**'; }
1961 + else if (settings.token != null) { xtoken = settings.token; }
1962 +
1963 + // Complete the URL and add a x-meshauth header if needed
1964 + var xurlargs = [];
1965 if (settings.authcookie != null) {
1955 - url += '?auth=' + settings.authcookie;
1956 - } else if (settings.username != null && settings.password != null) {
1957 - url += '?user=' + settings.username + '&pass=' + settings.password;
1966 + xurlargs.push('auth=' + settings.authcookie);
1967 + if (xtoken != null) { xurlargs.push('token=' + xtoken); }
1968 + } else {
1969 + if (xtoken != null) {
1970 + options.headers = { 'x-meshauth': Buffer.from(settings.username,'binary').toString('base64') + ',' + Buffer.from(settings.password,'binary').toString('base64') + ',' + Buffer.from(xtoken,'binary').toString('base64') };
1971 + } else {
1972 + options.headers = { 'x-meshauth': Buffer.from(settings.username,'binary').toString('base64') + ',' + Buffer.from(settings.password,'binary').toString('base64') };
1973 + }
1974 }
1959 - if (settings.emailtoken) { url += '&token=**email**'; } else if (settings.token != null) { url += '&token=' + settings.token; }
1960 - if (settings.loginkey) { url += '&key=' + settings.loginkey; }
1961 - options = http.parseUri(url);
1975 + if (settings.loginkey) { xurlargs.push('key=' + settings.loginkey); }
1976 + if (xurlargs.length > 0) { options.path += '?' + xurlargs.join('&'); }
1977 } catch (e) { console.log("Unable to parse \"serverUrl\"."); process.exit(1); return; }
1978 +
1979 options.checkServerIdentity = onVerifyServer;
1980 options.rejectUnauthorized = false;
1981 settings.websocket = http.request(options);
@@ -1979,7 +1995,7 @@ function OnServerWebSocket(msg, s, head) {
1995 if (command.email2fasent === true) {
1996 console.log("Login token email sent.");
1997 } else if (command.email2fa === true) {
1982 - console.log("Login token required, use --token [token], or --emailtoken get a token.");
1998 + console.log("Login token required, use --token [token], or --emailtoken, --smstoken get a token.");
1999 } else {
2000 console.log("Login token required, use --token [token].");
2001 }