diff --git a/src/drivers/webextension/background.html b/src/drivers/webextension/background.html
index 06e298abf..4c4160ac3 100644
--- a/src/drivers/webextension/background.html
+++ b/src/drivers/webextension/background.html
@@ -6,7 +6,6 @@
-
diff --git a/src/wappalyzer.js b/src/wappalyzer.js
index 1ec8a4850..4169dc428 100644
--- a/src/wappalyzer.js
+++ b/src/wappalyzer.js
@@ -14,12 +14,12 @@ var wappalyzer = (function() {
*/
var Application = function(app, detected) {
this.app = app;
- this.confidence = {};
+ this.confidence = { };
this.confidenceTotal = 0;
this.detected = Boolean(detected);
- this.excludes = [];
+ this.excludes = [ ];
this.version = '';
- this.versions = [];
+ this.versions = [ ];
};
Application.prototype = {
@@ -27,7 +27,9 @@ var wappalyzer = (function() {
* Calculate confidence total
*/
getConfidence: function() {
- var total = 0, id;
+ var
+ id,
+ total = 0;
for ( id in this.confidence ) {
total += this.confidence[id];
@@ -67,7 +69,7 @@ var wappalyzer = (function() {
this.detected = true;
// Set confidence level
- this.confidence[type + ' ' + ( key ? key + ' ' : '' ) + pattern.regex] = pattern.confidence ? pattern.confidence : 100;
+ this.confidence[type + ' ' + ( key ? key + ' ' : '' ) + pattern.regex] = pattern.confidence || 100;
// Detect version number
if ( pattern.version ) {
@@ -81,15 +83,11 @@ var wappalyzer = (function() {
var ternary = new RegExp('\\\\' + i + '\\?([^:]+):(.*)$').exec(version);
if ( ternary && ternary.length === 3 ) {
- w.log({ match: match, i: i, ternary: ternary });
-
version = version.replace(ternary[0], match ? ternary[1] : ternary[2]);
-
- w.log({ version: version });
}
// Replace back references
- version = version.replace(new RegExp('\\\\' + i, 'g'), match ? match : '');
+ version = version.replace(new RegExp('\\\\' + i, 'g'), match || '');
});
if ( version && this.versions.indexOf(version) < 0 ) {
@@ -102,6 +100,10 @@ var wappalyzer = (function() {
}
};
+ var asArray = function(value) {
+ return typeof value === 'string' ? [ value ] : value;
+ };
+
/**
* Call driver functions
*/
@@ -112,10 +114,6 @@ var wappalyzer = (function() {
return;
}
- if ( func !== 'log' ) {
- w.log('w.driver.' + func);
- }
-
return w.driver[func](args);
};
@@ -127,25 +125,17 @@ var wappalyzer = (function() {
key,
parsed = {};
- // Convert array to object containing array
- if ( patterns instanceof Array ) {
- patterns = { main: patterns }
- }
-
// Convert string to object containing array containing string
- if ( typeof patterns === 'string' ) {
- patterns = { main: [ patterns ] };
+ if ( typeof patterns === 'string' || patterns instanceof Array ) {
+ patterns = {
+ main: asArray(patterns)
+ };
}
for ( key in patterns ) {
parsed[key] = [];
- // Convert string to array containing string
- if ( typeof patterns[key] === 'string' ) {
- patterns[key] = [ patterns[key] ];
- }
-
- patterns[key].forEach(function(pattern) {
+ asArray(patterns[key]).forEach(function(pattern) {
var attrs = {};
pattern.split('\\;').forEach(function(attr, i) {
@@ -185,31 +175,33 @@ var wappalyzer = (function() {
* Main script
*/
var w = {
- apps: {},
- cats: null,
- ping: { hostnames: {} },
- adCache: [],
+ apps: {},
+ cats: null,
+ ping: {
+ hostnames: { }
+ },
+ adCache: [],
detected: {},
config: {
websiteURL: 'https://wappalyzer.com/',
twitterURL: 'https://twitter.com/Wappalyzer',
- githubURL: 'https://github.com/AliasIO/Wappalyzer',
+ githubURL: 'https://github.com/AliasIO/Wappalyzer',
+ },
+
+ validation: {
+ hostname: /(www.)?((.+?)\.(([a-z]{2,3}\.)?[a-z]{2,6}))$/,
+ hostnameBlacklist: /((local|dev(elopment)?|stag(e|ing)?|test(ing)?|demo(shop)?|admin|google|cache)\.|\/admin|\.local)/
},
/**
* Log messages to console
*/
log: function(message, type) {
- if ( type === undefined ) {
- type = 'debug';
- }
-
- if ( typeof message === 'object' ) {
- message = JSON.stringify(message);
- }
-
- driver('log', { message: message, type: type });
+ driver('log', {
+ message: JSON.stringify(message),
+ type: type || 'debug'
+ });
},
/**
@@ -218,15 +210,12 @@ var wappalyzer = (function() {
init: function() {
w.log('w.init');
- // Checks
- if ( w.driver === undefined ) {
- w.log('no driver, exiting');
-
- return;
- }
-
// Initialize driver
- driver('init');
+ if ( w.driver !== undefined ) {
+ driver('init');
+ } else {
+ w.log('No driver, exiting');
+ }
},
/**
@@ -303,11 +292,7 @@ var wappalyzer = (function() {
// Exclude app in detected apps only
for ( app in apps ) {
if ( w.apps[app].excludes ) {
- if ( typeof w.apps[app].excludes === 'string' ) {
- w.apps[app].excludes = [ w.apps[app].excludes ];
- }
-
- w.apps[app].excludes.forEach(function(excluded) {
+ asArray(w.apps[app]).excludes.forEach(function(excluded) {
excludes.push(excluded);
});
}
@@ -336,12 +321,7 @@ var wappalyzer = (function() {
confidence = apps[app].confidence;
if ( w.apps[app] && w.apps[app].implies ) {
- // Cast strings to an array
- if ( typeof w.apps[app].implies === 'string' ) {
- w.apps[app].implies = [ w.apps[app].implies ];
- }
-
- w.apps[app].implies.forEach(function(implied) {
+ asArray(w.apps[app].implies).forEach(function(implied) {
implied = parsePatterns(implied)[0];
if ( !w.apps[implied.string] ) {
@@ -391,28 +371,24 @@ var wappalyzer = (function() {
var app, match;
for ( app in apps ) {
- if ( w.detected[url][app].getConfidence() >= 100 ) {
- if ( /(www.)?((.+?)\.(([a-z]{2,3}\.)?[a-z]{2,6}))$/.test(hostname) && !/((local|dev(elopment)?|stag(e|ing)?|test(ing)?|demo(shop)?|admin|google|cache)\.|\/admin|\.local)/.test(url) ) {
- if ( !w.ping.hostnames.hasOwnProperty(hostname) ) {
- w.ping.hostnames[hostname] = {
- applications: {},
- meta: {}
- };
- }
+ if ( w.detected[url][app].getConfidence() >= 100 && w.validation.hostname.test(hostname) && !w.validation.hostnameBlacklist.test(url) ) {
+ if ( !w.ping.hostnames.hasOwnProperty(hostname) ) {
+ w.ping.hostnames[hostname] = {
+ applications: {},
+ meta: {}
+ };
+ }
- if ( !w.ping.hostnames[hostname].applications.hasOwnProperty(app) ) {
- w.ping.hostnames[hostname].applications[app] = {
- hits: 0
- };
- }
+ if ( !w.ping.hostnames[hostname].applications.hasOwnProperty(app) ) {
+ w.ping.hostnames[hostname].applications[app] = {
+ hits: 0
+ };
+ }
- w.ping.hostnames[hostname].applications[app].hits ++;
+ w.ping.hostnames[hostname].applications[app].hits ++;
- if ( apps[app].version ) {
- w.ping.hostnames[hostname].applications[app].version = apps[app].version;
- }
- } else {
- w.log('Ignoring hostname "' + hostname + '"');
+ if ( apps[app].version ) {
+ w.ping.hostnames[hostname].applications[app].version = apps[app].version;
}
}
}
@@ -516,7 +492,7 @@ var wappalyzer = (function() {
header,
patterns = parsePatterns(w.apps[app.app].headers);
- if ( patterns.length && headers ) {
+ if ( headers ) {
for ( header in patterns ) {
patterns[header].forEach(function(pattern) {
header = header.toLowerCase();