Created
March 24, 2018 00:14
-
-
Save Antoinebr/ac3b63a94c6e4ae8914bc8e86422480c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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