From 89cafa3ba4fb5e19f2ec963397b749dff898f584 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Wed, 13 May 2020 15:44:45 -0700 Subject: [PATCH] Updated linux proxy detetion logic --- meshcore/agentcore.c | 36 +---------- microscript/ILibDuktape_Polyfills.c | 2 +- modules/proxy-helper.js | 92 ++++++++++++++++++++++++++++- 3 files changed, 93 insertions(+), 37 deletions(-) diff --git a/meshcore/agentcore.c b/meshcore/agentcore.c index 391cfdf..9a9b5c2 100644 --- a/meshcore/agentcore.c +++ b/meshcore/agentcore.c @@ -432,41 +432,7 @@ int MeshAgent_GetSystemProxy(MeshAgentHostContainer *agent, char *buffer, size_t })();"; #else // Linux Only - char getProxy[] = "(function getProxies(){\ - if(require('fs').existsSync('/etc/environment'))\ - {\ - var e = require('fs').readFileSync('/etc/environment').toString();\ - var tokens = e.split('\\n');\ - for(var line in tokens)\ - {\ - var val = tokens[line].split('=');\ - if(val.length == 2 && (val[0].trim() == 'http_proxy' || val[0].trim() == 'https_proxy'))\ - {\ - return(val[1].split('//')[1]);\ - }\ - }\ - }\ - if(require('fs').existsSync('/etc/profile.d/proxy_setup'))\ - {\ - var child = require('child_process').execFile('/bin/sh', ['sh']);\ - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });\ - child.stdin.write('cat /etc/profile.d/proxy_setup | awk \\'{ split($2, tok, \"=\"); if(tok[1]==\"http_proxy\") { print tok[2]; }}\\'\\nexit\\n');\ - child.waitExit();\ - child.ret = child.stdout.str.trim().split('\\n')[0].split('//')[1];\ - if(child.ret != '') { return(child.ret); }\ - }\ - if (require('fs').existsSync('/usr/bin/gsettings'))\ - {\ - var setting;\ - var ids = require('user-sessions').loginUids(); \ - for (var i in ids)\ - {\ - setting = require('linux-gnome-helpers').getProxySettings(ids[i]);\ - if (setting.mode == 'manual') { return(setting.host + ':' + setting.port);} \ - }\ - }\ - throw('No Proxy set');\ - })();"; + char getProxy[] = "require('proxy-helper').getProxy()"; #endif // Linux and FreeBSD if (duk_peval_string(agent->meshCoreCtx, getProxy) == 0) diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index dc7e241..7d9e196 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2212,7 +2212,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) free(_notifybardesktop); // proxy-helper, refer to modules/proxy-helper.js - duk_peval_string_noresult(ctx, "addModule('proxy-helper', Buffer.from('LyoKQ29weXJpZ2h0IDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8NCg0KZnVuY3Rpb24gcG9zaXhfcHJveHlDaGVjayh1aWQsIGNoZWNrQWRkcikNCnsNCiAgICB2YXIgZzsNCiAgICB2YXIgeCA9IHByb2Nlc3MuZW52Wydub19wcm94eSddID8gcHJvY2Vzcy5lbnZbJ25vX3Byb3h5J10uc3BsaXQoJywnKSA6IFtdOw0KICAgIHZhciB0Ow0KDQogICAgaWYgKHJlcXVpcmUoJ2xpbnV4LWdub21lLWhlbHBlcnMnKS5hdmFpbGFibGUgJiYgKGcgPSByZXF1aXJlKCdsaW51eC1nbm9tZS1oZWxwZXJzJykuZ2V0UHJveHlTZXR0aW5ncyh1aWQpKS5tb2RlICE9ICdub25lJykNCiAgICB7DQogICAgICAgIHggPSBnLmV4Y2VwdGlvbnM7DQogICAgfQ0KDQogICAgZm9yKHZhciBpIGluIHgpDQogICAgew0KICAgICAgICBpZiAoeFtpXSA9PSBjaGVja0FkZHIpIHsgcmV0dXJuICh0cnVlKTsgfSAgICAgICAgICAgICAgIC8vIERpcmVjdCBNYXRjaA0KICAgICAgICBpZiAoY2hlY2tBZGRyLmVuZHNXaXRoKCcuJyArIHhbaV0pKSB7IHJldHVybiAodHJ1ZSk7IH0gIC8vIFN1YmRvbWFpbiBNYXRjaA0KICAgICAgICBpZiAoKHYgPSB4W2ldLnNwbGl0KCcvJykpLmxlbmd0aCA9PSAyKQ0KICAgICAgICB7DQogICAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZihyZXF1aXJlKCdpcC1hZGRyZXNzJykuQWRkcmVzczQuZnJvbVN0cmluZyh2WzBdKS5tYXNrKHBhcnNlSW50KHZbMV0pKSA9PSByZXF1aXJlKCdpcC1hZGRyZXNzJykuQWRkcmVzczQuZnJvbVN0cmluZyhjaGVja0FkZHIpLm1hc2socGFyc2VJbnQodlsxXSkpKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHRydWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoIChleCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gKGZhbHNlKTsNCn0NCg0KZnVuY3Rpb24gd2luZG93c19wcm94eUNoZWNrKGtleSwgY2hlY2tBZGRyKQ0Kew0KICAgIGlmKCFrZXkpDQogICAgew0KICAgICAgICB2YXIgaTsNCiAgICAgICAgLy8gS2V5IHdhc24ndCBzcGVjaWZpZWQsIHNvIGxldHMgdHJ5IHRvIGZpZ3VyZSBpdCBvdXQNCiAgICAgICAgaWYoKGk9cmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFByb2Nlc3NPd25lck5hbWUocHJvY2Vzcy5waWQpKS50c2lkID09IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIFdlIGFyZSBhIHNlcnZpY2UsIHNvIHdlIHNob3VsZCBjaGVjayB0aGUgdXNlciB0aGF0IGluc3RhbGxlZCB0aGUgTWVzaCBBZ2VudA0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAga2V5ID0gcmVxdWlyZSgnd2luLXJlZ2lzdHJ5JykuUXVlcnlLZXkocmVxdWlyZSgnd2luLXJlZ2lzdHJ5JykuSEtFWS5Mb2NhbE1hY2hpbmUsICdTWVNURU1cXEN1cnJlbnRDb250cm9sU2V0XFxTZXJ2aWNlc1xcTWVzaCBBZ2VudCcsICdfSW5zdGFsbGVkQnknKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoKHh4KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIC8vIFRoaXMgaW5mbyBpc24ndCBhdmFpbGFibGUsIHNvIGxldCdzIHRyeSB0byB1c2UgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlcg0KICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAga2V5ID0gcmVxdWlyZSgnd2luLXJlZ2lzdHJ5JykudXNlcm5hbWVUb1VzZXJLZXkocmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVzZXJuYW1lKHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCkpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY2F0Y2goeHh4KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gTm8gdXNlcnMgYXJlIGxvZ2dlZCBpbiwgc28gYXMgYSBsYXN0IHJlc29ydCwgbGV0J3MgdHJ5IHRoZSBsYXN0IGxvZ2dlZCBpbiB1c2VyLg0KICAgICAgICAgICAgICAgICAgICB2YXIgZW50cmllcyA9IHJlcXVpcmUoJ3dpbi1yZWdpc3RyeScpLlF1ZXJ5S2V5KHJlcXVpcmUoJ3dpbi1yZWdpc3RyeScpLkhLRVkuVXNlcnMpOw0KICAgICAgICAgICAgICAgICAgICBmb3IoaSBpbiBlbnRyaWVzLnN1YmtleXMpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGVudHJpZXMuc3Via2V5c1tpXS5zcGxpdCgnLScpLmxlbmd0aD41ICYmICFlbnRyaWVzLnN1YmtleXNbaV0uZW5kc1dpdGgoJ19DbGFzc2VzJykpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gZW50cmllcy5zdWJrZXlzW2ldOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgLy8gV2UgYXJlIGEgbG9nZ2VkIGluIHVzZXINCiAgICAgICAgICAgIGtleSA9IHJlcXVpcmUoJ3dpbi1yZWdpc3RyeScpLnVzZXJuYW1lVG9Vc2VyS2V5KGkubmFtZSk7DQogICAgICAgIH0NCiAgICAgICAgaWYoIWtleSkge3Rocm93KCdDb3VsZCBub3QgZGV0ZXJtaW5lIHdoaWNoIHVzZXIgcHJveHkgc2V0dGluZyB0byBxdWVyeScpO30NCiAgICB9DQogICAgdmFyIHByb3h5T3ZlcnJpZGUgPSByZXF1aXJlKCd3aW4tcmVnaXN0cnknKS5RdWVyeUtleShyZXF1aXJlKCd3aW4tcmVnaXN0cnknKS5IS0VZLlVzZXJzLCBrZXkgKyAnXFxTb2Z0d2FyZVxcTWljcm9zb2Z0XFxXaW5kb3dzXFxDdXJyZW50VmVyc2lvblxcSW50ZXJuZXQgU2V0dGluZ3MnLCAnUHJveHlPdmVycmlkZScpLnNwbGl0KCc7Jyk7DQogICAgZm9yKHZhciBpIGluIHByb3h5T3ZlcnJpZGUpDQogICAgew0KICAgICAgICBwcm94eU92ZXJyaWRlW2ldID0gcHJveHlPdmVycmlkZVtpXS50cmltKCk7DQogICAgICAgIGlmICgoY2hlY2tBZGRyID09ICcxMjcuMC4wLjEnIHx8IGNoZWNrQWRkciA9PSAnOjoxJykgJiYgcHJveHlPdmVycmlkZVtpXSA9PSAnPGxvY2FsPicpIHsgcmV0dXJuICh0cnVlKTsgfQ0KICAgICAgICBpZiAoY2hlY2tBZGRyID09IHByb3h5T3ZlcnJpZGVbaV0pIHsgcmV0dXJuICh0cnVlKTsgfSAvLyBFeGFjdCBNYXRjaA0KICAgICAgICBpZiAocHJveHlPdmVycmlkZVtpXS5zdGFydHNXaXRoKCcqLicpICYmIGNoZWNrQWRkci5lbmRzV2l0aChwcm94eU92ZXJyaWRlW2ldLnN1YnN0cmluZygxKSkpIHsgcmV0dXJuICh0cnVlKTsgfQ0KICAgICAgICBpZiAocHJveHlPdmVycmlkZVtpXS5lbmRzV2l0aCgnLionKSAmJiBjaGVja0FkZHIuc3RhcnRzV2l0aChwcm94eU92ZXJyaWRlW2ldLnN1YnN0cmluZygwLCBwcm94eU92ZXJyaWRlW2ldLmxlbmd0aCAtIDEpKSkgeyByZXR1cm4gKHRydWUpOyB9DQogICAgfQ0KICAgIHJldHVybiAoZmFsc2UpOw0KfQ0KDQpzd2l0Y2ggKHByb2Nlc3MucGxhdGZvcm0pDQp7DQogICAgY2FzZSAnbGludXgnOg0KICAgIGNhc2UgJ2ZyZWVic2QnOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHsgaWdub3JlUHJveHk6IHBvc2l4X3Byb3h5Q2hlY2sgfTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHsgaWdub3JlUHJveHk6IHdpbmRvd3NfcHJveHlDaGVjayB9Ow0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICBicmVhazsNCn0NCv==', 'base64').toString());"); + duk_peval_string_noresult(ctx, "addModule('proxy-helper', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmZ1bmN0aW9uIGxpbnV4X2dldFByb3h5KCkNCnsNCiAgICAvLyBDaGVjayBFbnZpcm9ubWVudCBWYXJpYWJlbHMNCiAgICBpZihyZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy9ldGMvZW52aXJvbm1lbnQnKSkNCiAgICB7DQoJICAgIHZhciBlID0gcmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmMoJy9ldGMvZW52aXJvbm1lbnQnKS50b1N0cmluZygpOw0KCSAgICB2YXIgdG9rZW5zID0gZS5zcGxpdCgnXFxuJyk7DQoJICAgIGZvcih2YXIgbGluZSBpbiB0b2tlbnMpDQoJICAgIHsNCgkJICAgIHZhciB2YWwgPSB0b2tlbnNbbGluZV0uc3BsaXQoJz0nKTsNCgkJICAgIGlmKHZhbC5sZW5ndGggPT0gMiAmJiAodmFsWzBdLnRyaW0oKSA9PSAnaHR0cF9wcm94eScgfHwgdmFsWzBdLnRyaW0oKSA9PSAnaHR0cHNfcHJveHknKSkNCgkJICAgIHsNCgkJCSAgICByZXR1cm4odmFsWzFdLnNwbGl0KCcvLycpWzFdKTsNCgkJICAgIH0NCgkgICAgfQ0KICAgIH0NCg0KICAgIC8vIENoZWNrIHByb2ZpbGUuZA0KICAgIGlmKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYygnL2V0Yy9wcm9maWxlLmQvcHJveHlfc2V0dXAnKSkNCiAgICB7DQoJICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQoJICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCgkgICAgY2hpbGQuc3RkaW4ud3JpdGUoImNhdCAvZXRjL3Byb2ZpbGUuZC9wcm94eV9zZXR1cCB8IGF3ayAnIiArICd7IHNwbGl0KCQyLCB0b2ssICI9Iik7IGlmKHRva1sxXT09Imh0dHBfcHJveHkiKSB7IHByaW50IHRva1syXTsgfX1cJ1xuZXhpdFxuJyk7DQoJICAgIGNoaWxkLndhaXRFeGl0KCk7DQoJICAgIGNoaWxkLnJldCA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpLnNwbGl0KCdcbicpWzBdLnNwbGl0KCcvLycpWzFdOw0KCSAgICBpZihjaGlsZC5yZXQgIT0gJycpIHsgcmV0dXJuKGNoaWxkLnJldCk7IH0NCiAgICB9DQoNCiAgICAvLyBDaGVjayBnc2V0dGluZ3MNCiAgICBpZiAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKCcvdXNyL2Jpbi9nc2V0dGluZ3MnKSkNCiAgICB7DQoJICAgIHZhciBzZXR0aW5nOw0KCSAgICB2YXIgaWRzID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmxvZ2luVWlkcygpOyANCgkgICAgZm9yICh2YXIgaSBpbiBpZHMpDQoJICAgIHsNCgkJICAgIHNldHRpbmcgPSByZXF1aXJlKCdsaW51eC1nbm9tZS1oZWxwZXJzJykuZ2V0UHJveHlTZXR0aW5ncyhpZHNbaV0pOw0KCQkgICAgaWYgKHNldHRpbmcubW9kZSA9PSAnbWFudWFsJykgeyByZXR1cm4oc2V0dGluZy5ob3N0ICsgJzonICsgc2V0dGluZy5wb3J0KTt9IA0KCSAgICB9DQogICAgfQ0KDQogICAgaWYgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYygnL2V0Yy9hcHQvYXB0LmNvbmYuZC9wcm94eS5jb25mJykpDQogICAgew0KICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IGNvbnNvbGUubG9nKGMudG9TdHJpbmcoKSk7IH0pOw0KICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiY2F0IC9ldGMvYXB0L2FwdC5jb25mLmQvcHJveHkuY29uZiB8IHRyICdcXG4nICdgJyB8IGF3ayAtRidgJyAneyIpOw0KICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnZm9yKG49MTtuPE5GOysrbikgeyBsbj1zcGxpdCgkbix0b2ssIjo6Iik7IHNwbGl0KHRva1tsbl0scHgsIlxcIiIpOyBzcGxpdChweFsyXSx4LCI6Ly8iKTsgaWYoeFsyXSE9IiIpIHsgcHJpbnQgeFsyXTsgYnJlYWs7IH0gfScpOw0KICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgifSdcbmV4aXRcbiIpOw0KICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICBpZiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgIT0gIiIpIHsgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7IH0NCiAgICB9DQogICAgaWYgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYygnL2V0Yy95dW0uY29uZicpKQ0KICAgIHsNCiAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyBjb25zb2xlLmxvZyhjLnRvU3RyaW5nKCkpOyB9KTsNCiAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2NhdCAvZXRjL3l1bS5jb25mIHwgZ3JlcCAicHJveHk9IiB8ICcgKyAidHIgJ1xcbicgJ2AnIHwgYXdrIC1GJ2AnICd7Iik7DQogICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdmb3Iobj0xO248TkY7KytuKSB7IGNsPXNwbGl0KCRuLGMsIiMiKTsgc3BsaXQoJG4scHgsIjovLyIpOyBpZihweFsyXSE9IiIgJiYgY2w9PTEpIHsgcHJpbnQgcHhbMl07IGJyZWFrOyB9IH0nKTsNCiAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIn0nXG5leGl0XG4iKTsNCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpICE9ICIiKSB7IHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOyB9DQogICAgfQ0KICAgIGlmIChyZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy9ldGMvc3lzY29uZmlnL3Byb3h5JykpDQogICAgew0KICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IGNvbnNvbGUubG9nKGMudG9TdHJpbmcoKSk7IH0pOw0KICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnY2F0IC9ldGMvc3lzY29uZmlnL3Byb3h5IHwgZ3JlcCBQUk9YWV9FTkFCTEVEPSB8IGF3ayBcJ3snKTsNCiAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ3NwbGl0KCQwLHJlcywiXFwiIik7IGlmKHJlc1syXT09InllcyIpIHsgcHJpbnQgcmVzWzJdOyB9JykNCiAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIn0nXG5leGl0XG4iKTsNCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpICE9ICIiKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBFbmFibGVkDQogICAgICAgICAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyBjb25zb2xlLmxvZyhjLnRvU3RyaW5nKCkpOyB9KTsNCiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdjYXQgL2V0Yy9zeXNjb25maWcvcHJveHkgfCBncmVwIF9QUk9YWSB8ICcgKyAidHIgJ1xcbicgJ2AnIHwgYXdrIC1GJ2AnICd7Iik7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnZm9yKGk9MTtpPE5GOysraSkgeyBpZihzcGxpdCgkaSxyLCJIVFRQX1BST1hZPSIpPjEgfHwgc3BsaXQoJGksciwiSFRUUFNfUFJPWFk9Iik+MSkgeycpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2NsPXNwbGl0KCRpLGMsIiMiKTsnKTsNCiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdzcGxpdCgkaSxweCwiXFwiIik7IHNwbGl0KHB4WzJdLHB4eCwiOi8vIik7IGlmKHB4eFsyXSE9IiIgJiYgY2w9PTEpIHsgcHJpbnQgcHh4WzJdOyBicmVhazsgfScpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ30gfScpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIn0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICBpZiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgIT0gJycpIHsgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7IH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICB0aHJvdyAoJ05vIHByb3hpZXMnKTsNCn0NCmZ1bmN0aW9uIHBvc2l4X3Byb3h5Q2hlY2sodWlkLCBjaGVja0FkZHIpDQp7DQogICAgdmFyIGc7DQogICAgdmFyIHggPSBwcm9jZXNzLmVudlsnbm9fcHJveHknXSA/IHByb2Nlc3MuZW52Wydub19wcm94eSddLnNwbGl0KCcsJykgOiBbXTsNCiAgICB2YXIgdDsNCg0KICAgIGlmIChyZXF1aXJlKCdsaW51eC1nbm9tZS1oZWxwZXJzJykuYXZhaWxhYmxlICYmIChnID0gcmVxdWlyZSgnbGludXgtZ25vbWUtaGVscGVycycpLmdldFByb3h5U2V0dGluZ3ModWlkKSkubW9kZSAhPSAnbm9uZScpDQogICAgew0KICAgICAgICB4ID0gZy5leGNlcHRpb25zOw0KICAgIH0NCg0KICAgIGZvcih2YXIgaSBpbiB4KQ0KICAgIHsNCiAgICAgICAgaWYgKHhbaV0gPT0gY2hlY2tBZGRyKSB7IHJldHVybiAodHJ1ZSk7IH0gICAgICAgICAgICAgICAvLyBEaXJlY3QgTWF0Y2gNCiAgICAgICAgaWYgKGNoZWNrQWRkci5lbmRzV2l0aCgnLicgKyB4W2ldKSkgeyByZXR1cm4gKHRydWUpOyB9ICAvLyBTdWJkb21haW4gTWF0Y2gNCiAgICAgICAgaWYgKCh2ID0geFtpXS5zcGxpdCgnLycpKS5sZW5ndGggPT0gMikNCiAgICAgICAgew0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYocmVxdWlyZSgnaXAtYWRkcmVzcycpLkFkZHJlc3M0LmZyb21TdHJpbmcodlswXSkubWFzayhwYXJzZUludCh2WzFdKSkgPT0gcmVxdWlyZSgnaXAtYWRkcmVzcycpLkFkZHJlc3M0LmZyb21TdHJpbmcoY2hlY2tBZGRyKS5tYXNrKHBhcnNlSW50KHZbMV0pKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybih0cnVlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjYXRjaCAoZXgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIChmYWxzZSk7DQp9DQoNCmZ1bmN0aW9uIHdpbmRvd3NfcHJveHlDaGVjayhrZXksIGNoZWNrQWRkcikNCnsNCiAgICBpZigha2V5KQ0KICAgIHsNCiAgICAgICAgdmFyIGk7DQogICAgICAgIC8vIEtleSB3YXNuJ3Qgc3BlY2lmaWVkLCBzbyBsZXRzIHRyeSB0byBmaWd1cmUgaXQgb3V0DQogICAgICAgIGlmKChpPXJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRQcm9jZXNzT3duZXJOYW1lKHByb2Nlc3MucGlkKSkudHNpZCA9PSAwKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBXZSBhcmUgYSBzZXJ2aWNlLCBzbyB3ZSBzaG91bGQgY2hlY2sgdGhlIHVzZXIgdGhhdCBpbnN0YWxsZWQgdGhlIE1lc2ggQWdlbnQNCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGtleSA9IHJlcXVpcmUoJ3dpbi1yZWdpc3RyeScpLlF1ZXJ5S2V5KHJlcXVpcmUoJ3dpbi1yZWdpc3RyeScpLkhLRVkuTG9jYWxNYWNoaW5lLCAnU1lTVEVNXFxDdXJyZW50Q29udHJvbFNldFxcU2VydmljZXNcXE1lc2ggQWdlbnQnLCAnX0luc3RhbGxlZEJ5Jyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjYXRjaCh4eCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAvLyBUaGlzIGluZm8gaXNuJ3QgYXZhaWxhYmxlLCBzbyBsZXQncyB0cnkgdG8gdXNlIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXINCiAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGtleSA9IHJlcXVpcmUoJ3dpbi1yZWdpc3RyeScpLnVzZXJuYW1lVG9Vc2VyS2V5KHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRVc2VybmFtZShyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNhdGNoKHh4eCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vIE5vIHVzZXJzIGFyZSBsb2dnZWQgaW4sIHNvIGFzIGEgbGFzdCByZXNvcnQsIGxldCdzIHRyeSB0aGUgbGFzdCBsb2dnZWQgaW4gdXNlci4NCiAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJpZXMgPSByZXF1aXJlKCd3aW4tcmVnaXN0cnknKS5RdWVyeUtleShyZXF1aXJlKCd3aW4tcmVnaXN0cnknKS5IS0VZLlVzZXJzKTsNCiAgICAgICAgICAgICAgICAgICAgZm9yKGkgaW4gZW50cmllcy5zdWJrZXlzKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihlbnRyaWVzLnN1YmtleXNbaV0uc3BsaXQoJy0nKS5sZW5ndGg+NSAmJiAhZW50cmllcy5zdWJrZXlzW2ldLmVuZHNXaXRoKCdfQ2xhc3NlcycpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGVudHJpZXMuc3Via2V5c1tpXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIFdlIGFyZSBhIGxvZ2dlZCBpbiB1c2VyDQogICAgICAgICAgICBrZXkgPSByZXF1aXJlKCd3aW4tcmVnaXN0cnknKS51c2VybmFtZVRvVXNlcktleShpLm5hbWUpOw0KICAgICAgICB9DQogICAgICAgIGlmKCFrZXkpIHt0aHJvdygnQ291bGQgbm90IGRldGVybWluZSB3aGljaCB1c2VyIHByb3h5IHNldHRpbmcgdG8gcXVlcnknKTt9DQogICAgfQ0KICAgIHZhciBwcm94eU92ZXJyaWRlID0gcmVxdWlyZSgnd2luLXJlZ2lzdHJ5JykuUXVlcnlLZXkocmVxdWlyZSgnd2luLXJlZ2lzdHJ5JykuSEtFWS5Vc2Vycywga2V5ICsgJ1xcU29mdHdhcmVcXE1pY3Jvc29mdFxcV2luZG93c1xcQ3VycmVudFZlcnNpb25cXEludGVybmV0IFNldHRpbmdzJywgJ1Byb3h5T3ZlcnJpZGUnKS5zcGxpdCgnOycpOw0KICAgIGZvcih2YXIgaSBpbiBwcm94eU92ZXJyaWRlKQ0KICAgIHsNCiAgICAgICAgcHJveHlPdmVycmlkZVtpXSA9IHByb3h5T3ZlcnJpZGVbaV0udHJpbSgpOw0KICAgICAgICBpZiAoKGNoZWNrQWRkciA9PSAnMTI3LjAuMC4xJyB8fCBjaGVja0FkZHIgPT0gJzo6MScpICYmIHByb3h5T3ZlcnJpZGVbaV0gPT0gJzxsb2NhbD4nKSB7IHJldHVybiAodHJ1ZSk7IH0NCiAgICAgICAgaWYgKGNoZWNrQWRkciA9PSBwcm94eU92ZXJyaWRlW2ldKSB7IHJldHVybiAodHJ1ZSk7IH0gLy8gRXhhY3QgTWF0Y2gNCiAgICAgICAgaWYgKHByb3h5T3ZlcnJpZGVbaV0uc3RhcnRzV2l0aCgnKi4nKSAmJiBjaGVja0FkZHIuZW5kc1dpdGgocHJveHlPdmVycmlkZVtpXS5zdWJzdHJpbmcoMSkpKSB7IHJldHVybiAodHJ1ZSk7IH0NCiAgICAgICAgaWYgKHByb3h5T3ZlcnJpZGVbaV0uZW5kc1dpdGgoJy4qJykgJiYgY2hlY2tBZGRyLnN0YXJ0c1dpdGgocHJveHlPdmVycmlkZVtpXS5zdWJzdHJpbmcoMCwgcHJveHlPdmVycmlkZVtpXS5sZW5ndGggLSAxKSkpIHsgcmV0dXJuICh0cnVlKTsgfQ0KICAgIH0NCiAgICByZXR1cm4gKGZhbHNlKTsNCn0NCg0Kc3dpdGNoIChwcm9jZXNzLnBsYXRmb3JtKQ0Kew0KICAgIGNhc2UgJ2xpbnV4JzoNCiAgICBjYXNlICdmcmVlYnNkJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7IGlnbm9yZVByb3h5OiBwb3NpeF9wcm94eUNoZWNrLCBnZXRQcm94eTogbGludXhfZ2V0UHJveHkgfTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHsgaWdub3JlUHJveHk6IHdpbmRvd3NfcHJveHlDaGVjayB9Ow0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICBicmVhazsNCn0NCg==', 'base64').toString());"); #ifdef _POSIX duk_peval_string_noresult(ctx, "addModule('linux-pathfix', Buffer.from('LyoKQ29weXJpZ2h0IDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8NCg0KZnVuY3Rpb24gY2hlY2tQYXRoKCkNCnsNCiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnKQ0KICAgIHsNCiAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdlY2hvICRQQVRIIHwgYXdrIFwneyB5ZXM9MDsgYT1zcGxpdCgkMCwgYiwgIjoiKTsgZm9yKHg9MTt4PD1hOysreCkgeyBpZihiW3hdPT0iL3NiaW4iKSB7IHllcz0xOyB9IH0gcHJpbnQgeWVzOyB9XCdcbmV4aXRcbicpOw0KICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgIGlmIChwYXJzZUludChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSkgPT0gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgcHJvY2Vzcy5zZXRlbnYoJ1BBVEgnLCBwcm9jZXNzLmVudlsnUEFUSCddICsgJzovc2JpbicpOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQptb2R1bGUuZXhwb3J0cyA9IGNoZWNrUGF0aDsNCg0KDQo=', 'base64').toString());"); diff --git a/modules/proxy-helper.js b/modules/proxy-helper.js index 1b6b9c5..2eb3dc5 100644 --- a/modules/proxy-helper.js +++ b/modules/proxy-helper.js @@ -14,6 +14,96 @@ See the License for the specific language governing permissions and limitations under the License. */ + +function linux_getProxy() +{ + // Check Environment Variabels + if(require('fs').existsSync('/etc/environment')) + { + var e = require('fs').readFileSync('/etc/environment').toString(); + var tokens = e.split('\\n'); + for(var line in tokens) + { + var val = tokens[line].split('='); + if(val.length == 2 && (val[0].trim() == 'http_proxy' || val[0].trim() == 'https_proxy')) + { + return(val[1].split('//')[1]); + } + } + } + + // Check profile.d + if(require('fs').existsSync('/etc/profile.d/proxy_setup')) + { + var child = require('child_process').execFile('/bin/sh', ['sh']); + child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); + child.stdin.write("cat /etc/profile.d/proxy_setup | awk '" + '{ split($2, tok, "="); if(tok[1]=="http_proxy") { print tok[2]; }}\'\nexit\n'); + child.waitExit(); + child.ret = child.stdout.str.trim().split('\n')[0].split('//')[1]; + if(child.ret != '') { return(child.ret); } + } + + // Check gsettings + if (require('fs').existsSync('/usr/bin/gsettings')) + { + var setting; + var ids = require('user-sessions').loginUids(); + for (var i in ids) + { + setting = require('linux-gnome-helpers').getProxySettings(ids[i]); + if (setting.mode == 'manual') { return(setting.host + ':' + setting.port);} + } + } + + if (require('fs').existsSync('/etc/apt/apt.conf.d/proxy.conf')) + { + var child = require('child_process').execFile('/bin/sh', ['sh']); + child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); + child.stderr.on('data', function (c) { console.log(c.toString()); }); + child.stdin.write("cat /etc/apt/apt.conf.d/proxy.conf | tr '\\n' '`' | awk -F'`' '{"); + child.stdin.write('for(n=1;n