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
}