Skip to content

Instantly share code, notes, and snippets.

@Antoinebr
Created March 24, 2018 00:14
Show Gist options
  • Save Antoinebr/ac3b63a94c6e4ae8914bc8e86422480c to your computer and use it in GitHub Desktop.
Save Antoinebr/ac3b63a94c6e4ae8914bc8e86422480c to your computer and use it in GitHub Desktop.
var request = require('request');
const cheerio = require('cheerio')
const { URL } = require('url');
const chalk = require('chalk');
const init = function(domain){
return new Promise( (resolve, reject) => {  
 
request( `http://${domain}`, (error, response, body) => {
if( typeof response === "undefined" || error ) return reject(error);
if( response.statusCode === 200 && body ){
const jsFiles = getJsUrlfromDocument(body,domain);
if( !jsFiles && !jsFiles.length > 0) return reject('No JavaScript files');
let proms = requestsJS( jsFiles );
Promise
.all(proms)
.then( results => {
return resolve(results);
})
.catch( error => {
return reject(error);
});
}
});
})
};
const requestsJS = function(jsList){
var promises = [ ];
jsList.forEach( jsUrl => promises.push( searchAdyen(jsUrl) ) );
return promises;
}
let searchAdyen = function(jsUrl){
return new Promise( (resolve, reject) => { 
request( jsUrl , (error, response, body) => {
if( typeof response == "undefined" || error ) return reject(error);
if( response.statusCode === 200 && body ){
return resolve({
url : jsUrl,
adyen : (/adyen\.encrypt/).test(body) // window\.adyen
});
}
});
});
}
const getJsUrlfromDocument = function(body,domain){
const $ = cheerio.load(body);
var scripts = [];
try {
$('script').each( function(i, elem){
const src = $(this).attr('src');
if( typeof src !== "undefined"){
scripts.push( formatUrl(src,domain) );
}
});
console.log( chalk.grey("Scripts are ", scripts ) );
} catch (error) {
console.log( chalk.red('Cheerio failed ', error ) )
}
return ( scripts.length > 0 ) ? scripts : false;
}
const formatUrl = function(src,domain){
let scriptUrl = new URL( src , `http://${domain}` );
return scriptUrl.href;
}
module.exports = {
init : init
}
const detectAdyen = require('./adyen-detect.js');
const chalk = require('chalk');
const _ = require('lodash');
let url = "birchbox.fr";
detectAdyen
.init(url)
.then( r => {
const script = _.find( r, { 'adyen' : true } );
const result = script ? chalk.green(`We found Adyen in ${script.url}`) : 'We didn\' find adyen';
console.log( result );
})
.catch( e => console.log(e) );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment