From 317b0fc4d7a44d59200a52fdc78f1e3377c95c60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20M=C3=A9tais?= Date: Tue, 20 Dec 2016 22:37:20 +0800 Subject: [PATCH] Add proxy to the setting (#213) --- bin/cli.js | 6 +++++- front/src/js/services/apiService.js | 1 + front/src/views/index.html | 10 ++++++++++ lib/server/controllers/apiController.js | 2 ++ lib/tools/phantomas/phantomasWrapper.js | 6 ++++++ lib/tools/redownload/redownload.js | 15 ++++++++++++--- 6 files changed, 36 insertions(+), 4 deletions(-) diff --git a/bin/cli.js b/bin/cli.js index 723e385..c9e398f 100644 --- a/bin/cli.js +++ b/bin/cli.js @@ -15,7 +15,8 @@ var cli = meow({ 'Options:', ' --device Use "phone" or "tablet" to simulate a mobile device (by user-agent and viewport size).', ' --screenshot Will take a screenshot and use this value as the output path. It needs to end with ".png".', - ' --wait-for-selector Once the page is loaded, Phantomas will wait until the given CSS selector matches some elements.', + //' --wait-for-selector Once the page is loaded, Phantomas will wait until the given CSS selector matches some elements.', + ' --proxy Sets an HTTP proxy to pass through. Syntax is "host:port".', ' --cookie Adds a cookie on the main domain.', ' --auth-user Basic HTTP authentication username.', ' --auth-pass Basic HTTP authentication password.', @@ -56,6 +57,9 @@ options.device = cli.flags.device || 'desktop'; // Wait for CSS selector options.waitForSelector = cli.flags.waitForSelector || null; +// Proxy +options.proxy = cli.flags.proxy || null; + // Cookie options.cookie = cli.flags.cookie || null; diff --git a/front/src/js/services/apiService.js b/front/src/js/services/apiService.js index ba2680b..61e06c9 100644 --- a/front/src/js/services/apiService.js +++ b/front/src/js/services/apiService.js @@ -11,6 +11,7 @@ apiService.factory('API', ['$location', 'Runs', 'Results', function($location, R screenshot: true, device: settings.device, waitForSelector: settings.waitForSelector, + proxy: settings.proxy, cookie: settings.cookie, authUser: settings.authUser, authPass: settings.authPass, diff --git a/front/src/views/index.html b/front/src/views/index.html index 3d1a801..f8970c8 100644 --- a/front/src/views/index.html +++ b/front/src/views/index.html @@ -61,6 +61,16 @@ +
+
+ HTTP proxy + + +
HTTP proxy

Insert here your proxy settings with the format "host:port".

Example: "192.168.10.0:3333"
+
+
+
+
Block domains diff --git a/lib/server/controllers/apiController.js b/lib/server/controllers/apiController.js index 5a969c4..6831a67 100644 --- a/lib/server/controllers/apiController.js +++ b/lib/server/controllers/apiController.js @@ -32,6 +32,7 @@ var ApiController = function(app) { partialResult: req.body.partialResult || null, screenshot: req.body.screenshot || false, device: req.body.device || 'desktop', + proxy: req.body.proxy || null, waitForSelector: req.body.waitForSelector || null, cookie: req.body.cookie || null, authUser: req.body.authUser || null, @@ -71,6 +72,7 @@ var ApiController = function(app) { var runOptions = { screenshot: run.params.screenshot ? screenshot.getTmpFilePath() : false, device: run.params.device, + proxy: run.params.proxy, waitForSelector: run.params.waitForSelector, cookie: run.params.cookie, authUser: run.params.authUser, diff --git a/lib/tools/phantomas/phantomasWrapper.js b/lib/tools/phantomas/phantomasWrapper.js index 910d3d5..e27e37f 100644 --- a/lib/tools/phantomas/phantomasWrapper.js +++ b/lib/tools/phantomas/phantomasWrapper.js @@ -59,6 +59,12 @@ var PhantomasWrapper = function() { ].join(',') }; + // Proxy option can't be set to null or undefined... + // this is why it's set now and not in the object above + if (task.options.proxy) { + options.proxy = task.options.proxy; + } + // Output the command line for debugging purpose debug('If you want to reproduce the phantomas task only, copy the following command line:'); var optionsString = ''; diff --git a/lib/tools/redownload/redownload.js b/lib/tools/redownload/redownload.js index d487473..c79c71c 100644 --- a/lib/tools/redownload/redownload.js +++ b/lib/tools/redownload/redownload.js @@ -45,6 +45,14 @@ var Redownload = function() { }; } + var proxy = null; + if (data.params && data.params.options && data.params.options.proxy) { + proxy = data.params.options.proxy; + if (proxy.indexOf('http:') === -1) { + proxy = 'http://' + proxy; + } + } + // Prevent a bug with the font analyzer on empty pages var differentCharacters = ''; if (data.toolsResults.phantomas.offenders.differentCharacters && data.toolsResults.phantomas.offenders.differentCharacters.length > 0) { @@ -55,7 +63,7 @@ var Redownload = function() { var redownloadList = requestsList.map(function(entry) { return function(callback) { - redownloadEntry(entry, httpAuth) + redownloadEntry(entry, httpAuth, proxy) .then(contentTypeChecker.checkContentType) @@ -558,7 +566,7 @@ var Redownload = function() { } - function redownloadEntry(entry, httpAuth) { + function redownloadEntry(entry, httpAuth, proxy) { var deferred = Q.defer(); function downloadError(message) { @@ -610,7 +618,8 @@ var Redownload = function() { method: entry.method, url: entry.url, headers: reqHeaders, - timeout: REQUEST_TIMEOUT + timeout: REQUEST_TIMEOUT, + proxy: proxy }; // Basic auth