You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
1.9 KiB
84 lines
1.9 KiB
'use strict';
|
|
|
|
const Wappalyzer = require('./wappalyzer');
|
|
const request = require('request');
|
|
const fs = require('fs');
|
|
const Browser = require('zombie');
|
|
|
|
const json = JSON.parse(fs.readFileSync(__dirname + '/apps.json'));
|
|
|
|
const driver = {
|
|
quiet: true,
|
|
|
|
analyze: url => {
|
|
const wappalyzer = new Wappalyzer();
|
|
|
|
wappalyzer.apps = json.apps;
|
|
wappalyzer.categories = json.categories;
|
|
|
|
return new Promise((resolve, reject) => {
|
|
wappalyzer.driver.log = (message, source, type) => {
|
|
if ( type === 'error' ) {
|
|
return reject(message);
|
|
}
|
|
|
|
if ( !driver.quiet ) {
|
|
console.log('[wappalyzer ' + type + ']', '[' + source + ']', message);
|
|
}
|
|
};
|
|
|
|
wappalyzer.driver.displayApps = detected => {
|
|
var apps = [];
|
|
|
|
Object.keys(detected).forEach(appName => {
|
|
const app = detected[appName];
|
|
|
|
var categories = [];
|
|
|
|
app.props.cats.forEach(id => {
|
|
var category = {};
|
|
|
|
category[id] = wappalyzer.categories[id].name;
|
|
|
|
categories.push(category)
|
|
});
|
|
|
|
apps.push({
|
|
name: app.name,
|
|
confidence: app.confidenceTotal.toString(),
|
|
version: app.version,
|
|
icon: app.props.icon || 'default.svg',
|
|
website: app.props.website,
|
|
categories
|
|
});
|
|
});
|
|
|
|
console.log('resolve ' + url);
|
|
|
|
resolve(apps);
|
|
};
|
|
|
|
const browser = new Browser();
|
|
|
|
browser.visit(url, error => {
|
|
wappalyzer.driver.document = browser.document;
|
|
|
|
const headers = browser.resources['0'].response.headers;
|
|
const vars = Object.getOwnPropertyNames(browser.window);
|
|
const html = browser.html();
|
|
|
|
const hostname = wappalyzer.parseUrl(url).hostname;
|
|
|
|
wappalyzer.analyze(hostname, url, {
|
|
headers,
|
|
html,
|
|
env: vars
|
|
});
|
|
});
|
|
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = driver;
|