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