clientside-redirect
Version:
Check if there is a client redirect setup on the URL
134 lines (117 loc) • 3.27 kB
JavaScript
var request = require("request");
var chalk = require("chalk");
var fs = require("fs");
var program = require("commander");
var terminal = require("../lib/terminal.js");
var checkForRedirect = require('../lib/checkForRedirect.js');
var pkg = require('../package.json');
program
.version(pkg.version)
.usage('\<[options] file\>')
.option('-F, --file <item>', 'Path to a file, containing a newline separated list of URLs')
.option('-U, --url <item>', 'URL(s) separated by a comma, Eg- \"http://www.apple.com\"')
.parse(process.argv);
var AUTH_PROMPT = {
properties : {
user : { description: "Username:".blue, required: true },
pass : { description : "Password:".blue, required:true, hidden:true }
}
};
if (process.argv.length <= 2) {
print(chalk.red("Come on really? You have to enter atleast one option"));
program.help();
program.exit();
} else {
if(program.file) {
getFileContent(program.file).then(function(lines) {
return checkForAuth(lines);
}, function(err) {
if(err.message.indexOf("ENOENT") > -1) {
error("File not found, get it together :) !");
} else {
error(err.message);
}
}).then(function(links) {
terminal.output(links);
});
} //end of program.file
if(program.url) {
var option = program.url.split(',');
checkForAuth(option).then(function(links) {
terminal.output(links);
}, function(err) {
error(err);
});
}
} //close main else
function getFileContent(file) {
return new Promise(function(resolve, reject) {
fs.readFile(file, function(err, listOfLines) {
if (err){
reject(err);
} else {
var lines = listOfLines.toString().split('\n').map(function(item) {
return item.trim();
}).filter(function(item) {
return item.length;
});
resolve(lines);
}
})
}); //end of Promise
}// end of getFileContent
function checkForAuth(urls) {
return new Promise(function(resolve, reject) {
request(urls[0], function(err, res) {
if(err) return reject(err);
if(res.statusCode === 401) {
promptForAuth(urls[0]).then(function(creds) {
return checkForRedirect(urls, creds);
}, function(err) {
return reject(err);
}).then(function(links) {
resolve(links);
});
} else {
checkForRedirect(urls, null).then(function(links) {
resolve(links);
}, function(err) {
reject(err);
});
}
});
});
}//end of checkForAuth
function promptForAuth(url) {
return new Promise(function(resolve, reject) {
prompt.start();
prompt.message = null;
prompt.delimiter = "";
prompt.get(AUTH_PROMPT, function(err, creds) {
if (err) return reject(err);
request(url, { auth: creds }, function (err, res) {
if(err) return reject(err);
if(res.statusCode !== 401) {
resolve(creds);
} else {
counter ++;
if(counter < 3) {
error("Invalid credential, please try again");
promptForAuth(url);
} else {
counter = 0;
error(chalk.red("Please check if you have access to this server, exiting app! "));
process.exit(0);
}
}
});
});
});
} //end of promptForAuth
function print(msg) {
console.log(msg);
}
function error(msg) {
console.log(chalk.red(msg));
}