Allow arrays and strings in apps.json

main
Elbert Alias 12 years ago
parent feec711a2f
commit e79c9075cd

@ -1,98 +0,0 @@
<script type='text/javascript'>/*
Download helper application
Copyright © 2012 q-- <https://github.com/q-->
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
var wShell=new ActiveXObject('WScript.Shell');
var cd = wShell.currentDirectory;
var scriptDirName='.windows_zip';
//Check for itself
if(cd.replace(fileSystem.getParentFolderName(cd)+'\\','')!==scriptDirName){
//OK, the file is not where it should be. Maybe do something.
}
var file='../7za.exe';
var file2='../../7za.exe';//In case of misunderstandings...
function checkFile(){
var filePath=false;
if(fileSystem.FileExists(file)) filePath=file; else if(fileSystem.FileExists(file2)) filePath=file2;
if(filePath){
//Move it to the right dir
fileSystem.MoveFile(filePath,'./7za.exe');
}else{
setTimeout(checkFile,1000);
}
}
function alreadyInstalled(already){
document.getElementsByTagName('h1')[0].innerHTML="7-Zip is "+already+" installed";
var paragraphs=document.getElementsByTagName('p');
for(var i=0;i<paragraphs.length;i++){
if(i===0)
paragraphs[i].innerHTML='Click the links below for more options.';
else
paragraphs[i].innerHTML='';
}
}
//URLS
var sevenZipDownloadURL = 'https://github.com/q--/Wappalyzer/raw/a5fdff64fb7858c975409c061906734a67c0ebb3/.windows_zip/7za.exe';
var sevenZipSourceDownloadURL = 'https://github.com/q--/Wappalyzer/raw/a5fdff64fb7858c975409c061906734a67c0ebb3/.windows_zip/7z920%20source%20code.tar.bz2';
var sevenZipLicenseURL = 'https://raw.github.com/q--/Wappalyzer/a5fdff64fb7858c975409c061906734a67c0ebb3/.windows_zip/license.txt';
//Dimensions
var appWidth=700;
var appHeight=240;
//Center position
var xPos=(screen.width - appWidth) / 2;
//var yPos=(screen.height - appHeight) / 2;
var yPos=0;
//Resize application
window.resizeTo(appWidth,appHeight);
//Move application
window.moveTo(xPos,yPos);
function doIt(){
if(!(fileSystem.FileExists(file)||fileSystem.FileExists(file2))){
var w=window.open("https://github.com/q--/Wappalyzer/raw/a5fdff64fb7858c975409c061906734a67c0ebb3/.windows_zip/7za.exe",'winGitH');
w.onload=function(){window.focus();}
}else alreadyInstalled('');
checkFile();
}
</script><style>p{font-size:1.3em;font-family:sans-serif;}</style><h1>Download 7-zip (command line version)</h1><p>The download will be started automatically.</p><p>Place the file in the <strong>same folder</strong> as Wappalyzer.<hr><a href=''>License</a><script>document.links[document.links.length-1].href=sevenZipLicenseURL</script> | <a href=''>Source code</a><script>document.links[document.links.length-1].href=sevenZipSourceDownloadURL</script>
<script>(fileSystem.FileExists('7za.exe'))?alreadyInstalled('already'):doIt()</script>

@ -24,6 +24,26 @@ var wappalyzer = (function() {
return w.driver[func](args);
};
/**
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
patterns = [ patterns ];
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
});
return parsed;
};
/**
* Main script
*/
@ -91,7 +111,7 @@ var wappalyzer = (function() {
*/
analyze: function(hostname, url, data) {
var
i, j, app, confidence, type, regex, regexMeta, regexScript, match, content, meta, header,
i, j, app, confidence, type, regexMeta, regexScript, match, content, meta, header,
profiler = {
regexCount: 0,
startTime: new Date().getTime()
@ -115,7 +135,6 @@ var wappalyzer = (function() {
w.detected[url] = {};
}
appLoop:
for ( app in w.apps ) {
// Skip if the app has already been detected
if ( w.detected[url].hasOwnProperty(app) || apps.indexOf(app) !== -1 ) {
@ -129,15 +148,13 @@ var wappalyzer = (function() {
switch ( type ) {
case 'url':
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(url) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(url) ) {
apps[app] = confidence;
}
});
break;
case 'html':
@ -145,15 +162,13 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(data[type]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(data[type]) ) {
apps[app] = confidence;
}
});
break;
case 'script':
@ -161,20 +176,19 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
regexScript = new RegExp('<script[^>]+src=("|\')([^"\']+)', 'ig');
profiler.regexCount ++;
while ( match = regexScript.exec(data.html) ) {
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
if ( regex.test(match[2]) ) {
apps[app] = confidence;
while ( match = regexScript.exec(data.html) ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(match[2]) ) {
apps[app] = confidence;
}
}
}
});
break;
case 'meta':
@ -193,15 +207,13 @@ var wappalyzer = (function() {
if ( new RegExp('name=["\']' + meta + '["\']', 'i').test(match) ) {
content = match.toString().match(/content=("|')([^"']+)("|')/i);
regex = new RegExp(w.apps[app].meta[meta].replace('/', '\\\/'), 'i');
parse(w.apps[app].meta[meta]).map(function(pattern) {
profiler.regexCount ++;
profiler.regexCount ++;
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
continue appLoop;
}
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
}
});
}
}
}
@ -213,15 +225,13 @@ var wappalyzer = (function() {
}
for ( header in w.apps[app].headers ) {
regex = new RegExp(w.apps[app][type][header].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( typeof data[type][header] === 'string' && regex.test(data[type][header]) ) {
apps[app] = confidence;
parse(w.apps[app][type][header]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( typeof data[type][header] === 'string' && pattern.regex.test(data[type][header]) ) {
apps[app] = confidence;
}
});
}
break;
@ -230,17 +240,15 @@ var wappalyzer = (function() {
break;
}
regex = RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
for ( i in data[type] ) {
profiler.regexCount ++;
if ( regex.test(data[type][i]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
for ( i in data[type] ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(data[type][i]) ) {
apps[app] = confidence;
}
}
}
});
break;
}

@ -24,6 +24,26 @@ var wappalyzer = (function() {
return w.driver[func](args);
};
/**
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
patterns = [ patterns ];
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
});
return parsed;
};
/**
* Main script
*/
@ -91,7 +111,7 @@ var wappalyzer = (function() {
*/
analyze: function(hostname, url, data) {
var
i, j, app, confidence, type, regex, regexMeta, regexScript, match, content, meta, header,
i, j, app, confidence, type, regexMeta, regexScript, match, content, meta, header,
profiler = {
regexCount: 0,
startTime: new Date().getTime()
@ -115,7 +135,6 @@ var wappalyzer = (function() {
w.detected[url] = {};
}
appLoop:
for ( app in w.apps ) {
// Skip if the app has already been detected
if ( w.detected[url].hasOwnProperty(app) || apps.indexOf(app) !== -1 ) {
@ -129,15 +148,13 @@ var wappalyzer = (function() {
switch ( type ) {
case 'url':
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(url) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(url) ) {
apps[app] = confidence;
}
});
break;
case 'html':
@ -145,15 +162,13 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(data[type]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(data[type]) ) {
apps[app] = confidence;
}
});
break;
case 'script':
@ -161,20 +176,19 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
regexScript = new RegExp('<script[^>]+src=("|\')([^"\']+)', 'ig');
profiler.regexCount ++;
while ( match = regexScript.exec(data.html) ) {
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
if ( regex.test(match[2]) ) {
apps[app] = confidence;
while ( match = regexScript.exec(data.html) ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(match[2]) ) {
apps[app] = confidence;
}
}
}
});
break;
case 'meta':
@ -193,15 +207,13 @@ var wappalyzer = (function() {
if ( new RegExp('name=["\']' + meta + '["\']', 'i').test(match) ) {
content = match.toString().match(/content=("|')([^"']+)("|')/i);
regex = new RegExp(w.apps[app].meta[meta].replace('/', '\\\/'), 'i');
parse(w.apps[app].meta[meta]).map(function(pattern) {
profiler.regexCount ++;
profiler.regexCount ++;
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
continue appLoop;
}
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
}
});
}
}
}
@ -213,15 +225,13 @@ var wappalyzer = (function() {
}
for ( header in w.apps[app].headers ) {
regex = new RegExp(w.apps[app][type][header].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( typeof data[type][header] === 'string' && regex.test(data[type][header]) ) {
apps[app] = confidence;
parse(w.apps[app][type][header]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( typeof data[type][header] === 'string' && pattern.regex.test(data[type][header]) ) {
apps[app] = confidence;
}
});
}
break;
@ -230,17 +240,15 @@ var wappalyzer = (function() {
break;
}
regex = RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
for ( i in data[type] ) {
profiler.regexCount ++;
if ( regex.test(data[type][i]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
for ( i in data[type] ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(data[type][i]) ) {
apps[app] = confidence;
}
}
}
});
break;
}

@ -24,6 +24,26 @@ var wappalyzer = (function() {
return w.driver[func](args);
};
/**
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
patterns = [ patterns ];
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
});
return parsed;
};
/**
* Main script
*/
@ -91,7 +111,7 @@ var wappalyzer = (function() {
*/
analyze: function(hostname, url, data) {
var
i, j, app, confidence, type, regex, regexMeta, regexScript, match, content, meta, header,
i, j, app, confidence, type, regexMeta, regexScript, match, content, meta, header,
profiler = {
regexCount: 0,
startTime: new Date().getTime()
@ -115,7 +135,6 @@ var wappalyzer = (function() {
w.detected[url] = {};
}
appLoop:
for ( app in w.apps ) {
// Skip if the app has already been detected
if ( w.detected[url].hasOwnProperty(app) || apps.indexOf(app) !== -1 ) {
@ -129,15 +148,13 @@ var wappalyzer = (function() {
switch ( type ) {
case 'url':
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(url) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(url) ) {
apps[app] = confidence;
}
});
break;
case 'html':
@ -145,15 +162,13 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(data[type]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(data[type]) ) {
apps[app] = confidence;
}
});
break;
case 'script':
@ -161,20 +176,19 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
regexScript = new RegExp('<script[^>]+src=("|\')([^"\']+)', 'ig');
profiler.regexCount ++;
while ( match = regexScript.exec(data.html) ) {
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
if ( regex.test(match[2]) ) {
apps[app] = confidence;
while ( match = regexScript.exec(data.html) ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(match[2]) ) {
apps[app] = confidence;
}
}
}
});
break;
case 'meta':
@ -193,15 +207,13 @@ var wappalyzer = (function() {
if ( new RegExp('name=["\']' + meta + '["\']', 'i').test(match) ) {
content = match.toString().match(/content=("|')([^"']+)("|')/i);
regex = new RegExp(w.apps[app].meta[meta].replace('/', '\\\/'), 'i');
parse(w.apps[app].meta[meta]).map(function(pattern) {
profiler.regexCount ++;
profiler.regexCount ++;
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
continue appLoop;
}
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
}
});
}
}
}
@ -213,15 +225,13 @@ var wappalyzer = (function() {
}
for ( header in w.apps[app].headers ) {
regex = new RegExp(w.apps[app][type][header].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( typeof data[type][header] === 'string' && regex.test(data[type][header]) ) {
apps[app] = confidence;
parse(w.apps[app][type][header]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( typeof data[type][header] === 'string' && pattern.regex.test(data[type][header]) ) {
apps[app] = confidence;
}
});
}
break;
@ -230,17 +240,15 @@ var wappalyzer = (function() {
break;
}
regex = RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
for ( i in data[type] ) {
profiler.regexCount ++;
if ( regex.test(data[type][i]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
for ( i in data[type] ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(data[type][i]) ) {
apps[app] = confidence;
}
}
}
});
break;
}

@ -24,6 +24,26 @@ var wappalyzer = (function() {
return w.driver[func](args);
};
/**
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
patterns = [ patterns ];
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
});
return parsed;
};
/**
* Main script
*/
@ -91,7 +111,7 @@ var wappalyzer = (function() {
*/
analyze: function(hostname, url, data) {
var
i, j, app, confidence, type, regex, regexMeta, regexScript, match, content, meta, header,
i, j, app, confidence, type, regexMeta, regexScript, match, content, meta, header,
profiler = {
regexCount: 0,
startTime: new Date().getTime()
@ -115,7 +135,6 @@ var wappalyzer = (function() {
w.detected[url] = {};
}
appLoop:
for ( app in w.apps ) {
// Skip if the app has already been detected
if ( w.detected[url].hasOwnProperty(app) || apps.indexOf(app) !== -1 ) {
@ -129,15 +148,13 @@ var wappalyzer = (function() {
switch ( type ) {
case 'url':
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(url) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(url) ) {
apps[app] = confidence;
}
});
break;
case 'html':
@ -145,15 +162,13 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(data[type]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(data[type]) ) {
apps[app] = confidence;
}
});
break;
case 'script':
@ -161,20 +176,19 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
regexScript = new RegExp('<script[^>]+src=("|\')([^"\']+)', 'ig');
profiler.regexCount ++;
while ( match = regexScript.exec(data.html) ) {
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
if ( regex.test(match[2]) ) {
apps[app] = confidence;
while ( match = regexScript.exec(data.html) ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(match[2]) ) {
apps[app] = confidence;
}
}
}
});
break;
case 'meta':
@ -193,15 +207,13 @@ var wappalyzer = (function() {
if ( new RegExp('name=["\']' + meta + '["\']', 'i').test(match) ) {
content = match.toString().match(/content=("|')([^"']+)("|')/i);
regex = new RegExp(w.apps[app].meta[meta].replace('/', '\\\/'), 'i');
parse(w.apps[app].meta[meta]).map(function(pattern) {
profiler.regexCount ++;
profiler.regexCount ++;
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
continue appLoop;
}
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
}
});
}
}
}
@ -213,15 +225,13 @@ var wappalyzer = (function() {
}
for ( header in w.apps[app].headers ) {
regex = new RegExp(w.apps[app][type][header].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( typeof data[type][header] === 'string' && regex.test(data[type][header]) ) {
apps[app] = confidence;
parse(w.apps[app][type][header]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( typeof data[type][header] === 'string' && pattern.regex.test(data[type][header]) ) {
apps[app] = confidence;
}
});
}
break;
@ -230,17 +240,15 @@ var wappalyzer = (function() {
break;
}
regex = RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
for ( i in data[type] ) {
profiler.regexCount ++;
if ( regex.test(data[type][i]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
for ( i in data[type] ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(data[type][i]) ) {
apps[app] = confidence;
}
}
}
});
break;
}

@ -1,52 +1,52 @@
<!ENTITY wappalyzer.name "Wappalyzer">
<!ENTITY wappalyzer.help "Wappalyzer - klicken für Details und Einstellungen">
<!ENTITY wappalyzer.showIcons "Applikations-Icons zeigen">
<!ENTITY wappalyzer.preferences "Weitere Optionen ...">
<!ENTITY wappalyzer.addonBar "In Addon-Leiste platzieren">
<!ENTITY wappalyzer.categories "Kategorienverwaltung">
<!ENTITY wappalyzer.performance "Performance">
<!ENTITY wappalyzer.interface "Interface">
<!ENTITY wappalyzer.tracking "Tracken">
<!ENTITY wappalyzer.research "Sende anonyme Reports über gefundene Applikationen zu Forschungszwecken an wappalyzer.com">
<!ENTITY wappalyzer.analyzeHeaders "Analyze response headers">
<!ENTITY wappalyzer.analyzeJavaScript "Analyze JavaScript">
<!ENTITY wappalyzer.analyzeOnload "Analyze onLoad events">
<!ENTITY wappalyzer.feedback "Feedback">
<!ENTITY wappalyzer.github "Github">
<!ENTITY wappalyzer.twitter "Twitter">
<!ENTITY wappalyzer.website "Zu wappalyzer.com browsen">
<!ENTITY wappalyzer.cat1 "CMS">
<!ENTITY wappalyzer.cat2 "Webforen">
<!ENTITY wappalyzer.cat3 "Datenbankverwaltung">
<!ENTITY wappalyzer.cat4 "Dokumentationstools">
<!ENTITY wappalyzer.cat5 "Widgets">
<!ENTITY wappalyzer.cat6 "Webshops">
<!ENTITY wappalyzer.cat7 "Bildergalerien">
<!ENTITY wappalyzer.cat8 "Wikis">
<!ENTITY wappalyzer.cat9 "Hosting Panels">
<!ENTITY wappalyzer.cat10 "Analyse">
<!ENTITY wappalyzer.cat11 "Blogs">
<!ENTITY wappalyzer.cat12 "JavaScript-Bibliotheken">
<!ENTITY wappalyzer.cat13 "Bugtracking-Systeme">
<!ENTITY wappalyzer.cat14 "Videoplattformen">
<!ENTITY wappalyzer.cat15 "Kommentarsysteme">
<!ENTITY wappalyzer.cat16 "CAPTCHAs">
<!ENTITY wappalyzer.cat17 "Font-Skripte">
<!ENTITY wappalyzer.cat18 "Web-Frameworks">
<!ENTITY wappalyzer.cat19 "Vermischtes">
<!ENTITY wappalyzer.cat20 "Editoren">
<!ENTITY wappalyzer.cat21 "LMS">
<!ENTITY wappalyzer.cat22 "Webserver">
<!ENTITY wappalyzer.cat23 "Cachetools">
<!ENTITY wappalyzer.cat24 "Rich-Text-Editoren">
<!ENTITY wappalyzer.cat25 "Javascript Graphics">
<!ENTITY wappalyzer.cat26 "Mobile Frameworks">
<!ENTITY wappalyzer.cat27 "Programmiersprachen">
<!ENTITY wappalyzer.cat28 "Betriebssysteme">
<!ENTITY wappalyzer.cat29 "Suchmaschinen">
<!ENTITY wappalyzer.cat30 "Web mail">
<!ENTITY wappalyzer.cat31 "CDN">
<!ENTITY wappalyzer.cat32 "Marketing Automation">
<!ENTITY wappalyzer.name "Wappalyzer">
<!ENTITY wappalyzer.help "Wappalyzer - klicken für Details und Einstellungen">
<!ENTITY wappalyzer.showIcons "Applikations-Icons zeigen">
<!ENTITY wappalyzer.preferences "Weitere Optionen ...">
<!ENTITY wappalyzer.addonBar "In Addon-Leiste platzieren (Ctrl+/)">
<!ENTITY wappalyzer.categories "Kategorienverwaltung">
<!ENTITY wappalyzer.performance "Performance">
<!ENTITY wappalyzer.interface "Interface">
<!ENTITY wappalyzer.tracking "Tracken">
<!ENTITY wappalyzer.research "Sende anonyme Reports über gefundene Applikationen zu Forschungszwecken an wappalyzer.com">
<!ENTITY wappalyzer.analyzeHeaders "Analyze response headers">
<!ENTITY wappalyzer.analyzeJavaScript "Analyze JavaScript">
<!ENTITY wappalyzer.analyzeOnload "Analyze onLoad events">
<!ENTITY wappalyzer.feedback "Feedback">
<!ENTITY wappalyzer.github "Github">
<!ENTITY wappalyzer.twitter "Twitter">
<!ENTITY wappalyzer.website "Zu wappalyzer.com browsen">
<!ENTITY wappalyzer.cat1 "CMS">
<!ENTITY wappalyzer.cat2 "Webforen">
<!ENTITY wappalyzer.cat3 "Datenbankverwaltung">
<!ENTITY wappalyzer.cat4 "Dokumentationstools">
<!ENTITY wappalyzer.cat5 "Widgets">
<!ENTITY wappalyzer.cat6 "Webshops">
<!ENTITY wappalyzer.cat7 "Bildergalerien">
<!ENTITY wappalyzer.cat8 "Wikis">
<!ENTITY wappalyzer.cat9 "Hosting Panels">
<!ENTITY wappalyzer.cat10 "Analyse">
<!ENTITY wappalyzer.cat11 "Blogs">
<!ENTITY wappalyzer.cat12 "JavaScript-Bibliotheken">
<!ENTITY wappalyzer.cat13 "Bugtracking-Systeme">
<!ENTITY wappalyzer.cat14 "Videoplattformen">
<!ENTITY wappalyzer.cat15 "Kommentarsysteme">
<!ENTITY wappalyzer.cat16 "CAPTCHAs">
<!ENTITY wappalyzer.cat17 "Font-Skripte">
<!ENTITY wappalyzer.cat18 "Web-Frameworks">
<!ENTITY wappalyzer.cat19 "Vermischtes">
<!ENTITY wappalyzer.cat20 "Editoren">
<!ENTITY wappalyzer.cat21 "LMS">
<!ENTITY wappalyzer.cat22 "Webserver">
<!ENTITY wappalyzer.cat23 "Cachetools">
<!ENTITY wappalyzer.cat24 "Rich-Text-Editoren">
<!ENTITY wappalyzer.cat25 "Javascript Graphics">
<!ENTITY wappalyzer.cat26 "Mobile Frameworks">
<!ENTITY wappalyzer.cat27 "Programmiersprachen">
<!ENTITY wappalyzer.cat28 "Betriebssysteme">
<!ENTITY wappalyzer.cat29 "Suchmaschinen">
<!ENTITY wappalyzer.cat30 "Web mail">
<!ENTITY wappalyzer.cat31 "CDN">
<!ENTITY wappalyzer.cat32 "Marketing Automation">

@ -3,7 +3,7 @@
<!ENTITY wappalyzer.showIcons "Show application icons">
<!ENTITY wappalyzer.preferences "Options">
<!ENTITY wappalyzer.addonBar "Place in addon-bar">
<!ENTITY wappalyzer.addonBar "Place in addon-bar (press Ctrl+/ to toggle)">
<!ENTITY wappalyzer.categories "Categories">
<!ENTITY wappalyzer.performance "Performance">
<!ENTITY wappalyzer.interface "Interface">

@ -3,7 +3,7 @@
<!ENTITY wappalyzer.showIcons "Montrer les icônes des applications">
<!ENTITY wappalyzer.preferences "Plus d'options...">
<!ENTITY wappalyzer.addonBar "Placer dans la barre des modules">
<!ENTITY wappalyzer.addonBar "Placer dans la barre des modules (Ctrl+/)">
<!ENTITY wappalyzer.categories "Gérer les catégories">
<!ENTITY wappalyzer.performance "Performance">
<!ENTITY wappalyzer.interface "Interface">

@ -1,51 +1,51 @@
<!ENTITY wappalyzer.name "Wappalyzer">
<!ENTITY wappalyzer.help "Wappalyzer - Klik voor meer informatie">
<!ENTITY wappalyzer.showIcons "Iconen zichtbaar">
<!ENTITY wappalyzer.preferences "Meer opties...">
<!ENTITY wappalyzer.addonBar "Plaats in addon-bar">
<!ENTITY wappalyzer.categories "Beheer categorien">
<!ENTITY wappalyzer.performance "Performance">
<!ENTITY wappalyzer.interface "Interface">
<!ENTITY wappalyzer.tracking "Tracking">
<!ENTITY wappalyzer.research "Verzend anonieme informatie over applicaties naar wappalyzer.com voor onderzoek">
<!ENTITY wappalyzer.analyzeHeaders "Analiseer response headers">
<!ENTITY wappalyzer.analyzeJavaScript "Analiseer JavaScript">
<!ENTITY wappalyzer.analyzeOnload "Analiseer onLoad events">
<!ENTITY wappalyzer.feedback "Feedback">
<!ENTITY wappalyzer.github "Github">
<!ENTITY wappalyzer.twitter "Twitter">
<!ENTITY wappalyzer.website "Ga naar wappalyzer.com">
<!ENTITY wappalyzer.cat1 "CMS">
<!ENTITY wappalyzer.cat2 "Forums">
<!ENTITY wappalyzer.cat3 "Database Managers">
<!ENTITY wappalyzer.cat4 "Documentatie Tools">
<!ENTITY wappalyzer.cat5 "Widgets">
<!ENTITY wappalyzer.cat6 "Web Winkels">
<!ENTITY wappalyzer.cat7 "Photo Gallerijen">
<!ENTITY wappalyzer.cat8 "Wikis">
<!ENTITY wappalyzer.cat9 "Hosting Panelen">
<!ENTITY wappalyzer.cat10 "Analytics">
<!ENTITY wappalyzer.cat11 "Blogs">
<!ENTITY wappalyzer.cat12 "JavaScript Frameworks">
<!ENTITY wappalyzer.cat13 "Issue Trackers">
<!ENTITY wappalyzer.cat14 "Video Spelers">
<!ENTITY wappalyzer.cat15 "Comment Systemen">
<!ENTITY wappalyzer.cat16 "CAPTCHAs">
<!ENTITY wappalyzer.cat17 "Font Scripts">
<!ENTITY wappalyzer.cat18 "Web Frameworks">
<!ENTITY wappalyzer.cat19 "Overige">
<!ENTITY wappalyzer.cat20 "Editors">
<!ENTITY wappalyzer.cat21 "LMS">
<!ENTITY wappalyzer.cat22 "Web Servers">
<!ENTITY wappalyzer.cat23 "Cache Tools">
<!ENTITY wappalyzer.cat24 "Rich Text Editors">
<!ENTITY wappalyzer.cat25 "Javascript Graphics">
<!ENTITY wappalyzer.cat26 "Mobiele Frameworks">
<!ENTITY wappalyzer.cat27 "Programmeer Talen">
<!ENTITY wappalyzer.cat28 "Operating Systems">
<!ENTITY wappalyzer.cat30 "Web Mail">
<!ENTITY wappalyzer.cat31 "CDN">
<!ENTITY wappalyzer.cat32 "Marketing Automatisering">
<!ENTITY wappalyzer.name "Wappalyzer">
<!ENTITY wappalyzer.help "Wappalyzer - Klik voor meer informatie">
<!ENTITY wappalyzer.showIcons "Iconen zichtbaar">
<!ENTITY wappalyzer.preferences "Meer opties...">
<!ENTITY wappalyzer.addonBar "Plaats in addon-bar (klik Ctrl+/)">
<!ENTITY wappalyzer.categories "Beheer categorien">
<!ENTITY wappalyzer.performance "Performance">
<!ENTITY wappalyzer.interface "Interface">
<!ENTITY wappalyzer.tracking "Tracking">
<!ENTITY wappalyzer.research "Verzend anonieme informatie over applicaties naar wappalyzer.com voor onderzoek">
<!ENTITY wappalyzer.analyzeHeaders "Analiseer response headers">
<!ENTITY wappalyzer.analyzeJavaScript "Analiseer JavaScript">
<!ENTITY wappalyzer.analyzeOnload "Analiseer onLoad events">
<!ENTITY wappalyzer.feedback "Feedback">
<!ENTITY wappalyzer.github "Github">
<!ENTITY wappalyzer.twitter "Twitter">
<!ENTITY wappalyzer.website "Ga naar wappalyzer.com">
<!ENTITY wappalyzer.cat1 "CMS">
<!ENTITY wappalyzer.cat2 "Forums">
<!ENTITY wappalyzer.cat3 "Database Managers">
<!ENTITY wappalyzer.cat4 "Documentatie Tools">
<!ENTITY wappalyzer.cat5 "Widgets">
<!ENTITY wappalyzer.cat6 "Web Winkels">
<!ENTITY wappalyzer.cat7 "Photo Gallerijen">
<!ENTITY wappalyzer.cat8 "Wikis">
<!ENTITY wappalyzer.cat9 "Hosting Panelen">
<!ENTITY wappalyzer.cat10 "Analytics">
<!ENTITY wappalyzer.cat11 "Blogs">
<!ENTITY wappalyzer.cat12 "JavaScript Frameworks">
<!ENTITY wappalyzer.cat13 "Issue Trackers">
<!ENTITY wappalyzer.cat14 "Video Spelers">
<!ENTITY wappalyzer.cat15 "Comment Systemen">
<!ENTITY wappalyzer.cat16 "CAPTCHAs">
<!ENTITY wappalyzer.cat17 "Font Scripts">
<!ENTITY wappalyzer.cat18 "Web Frameworks">
<!ENTITY wappalyzer.cat19 "Overige">
<!ENTITY wappalyzer.cat20 "Editors">
<!ENTITY wappalyzer.cat21 "LMS">
<!ENTITY wappalyzer.cat22 "Web Servers">
<!ENTITY wappalyzer.cat23 "Cache Tools">
<!ENTITY wappalyzer.cat24 "Rich Text Editors">
<!ENTITY wappalyzer.cat25 "Javascript Graphics">
<!ENTITY wappalyzer.cat26 "Mobiele Frameworks">
<!ENTITY wappalyzer.cat27 "Programmeer Talen">
<!ENTITY wappalyzer.cat28 "Operating Systems">
<!ENTITY wappalyzer.cat30 "Web Mail">
<!ENTITY wappalyzer.cat31 "CDN">
<!ENTITY wappalyzer.cat32 "Marketing Automatisering">

@ -24,6 +24,26 @@ var wappalyzer = (function() {
return w.driver[func](args);
};
/**
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
patterns = [ patterns ];
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
});
return parsed;
};
/**
* Main script
*/
@ -91,7 +111,7 @@ var wappalyzer = (function() {
*/
analyze: function(hostname, url, data) {
var
i, j, app, confidence, type, regex, regexMeta, regexScript, match, content, meta, header,
i, j, app, confidence, type, regexMeta, regexScript, match, content, meta, header,
profiler = {
regexCount: 0,
startTime: new Date().getTime()
@ -115,7 +135,6 @@ var wappalyzer = (function() {
w.detected[url] = {};
}
appLoop:
for ( app in w.apps ) {
// Skip if the app has already been detected
if ( w.detected[url].hasOwnProperty(app) || apps.indexOf(app) !== -1 ) {
@ -129,15 +148,13 @@ var wappalyzer = (function() {
switch ( type ) {
case 'url':
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(url) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(url) ) {
apps[app] = confidence;
}
});
break;
case 'html':
@ -145,15 +162,13 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(data[type]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(data[type]) ) {
apps[app] = confidence;
}
});
break;
case 'script':
@ -161,20 +176,19 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
regexScript = new RegExp('<script[^>]+src=("|\')([^"\']+)', 'ig');
profiler.regexCount ++;
while ( match = regexScript.exec(data.html) ) {
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
if ( regex.test(match[2]) ) {
apps[app] = confidence;
while ( match = regexScript.exec(data.html) ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(match[2]) ) {
apps[app] = confidence;
}
}
}
});
break;
case 'meta':
@ -193,15 +207,13 @@ var wappalyzer = (function() {
if ( new RegExp('name=["\']' + meta + '["\']', 'i').test(match) ) {
content = match.toString().match(/content=("|')([^"']+)("|')/i);
regex = new RegExp(w.apps[app].meta[meta].replace('/', '\\\/'), 'i');
parse(w.apps[app].meta[meta]).map(function(pattern) {
profiler.regexCount ++;
profiler.regexCount ++;
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
continue appLoop;
}
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
}
});
}
}
}
@ -213,15 +225,13 @@ var wappalyzer = (function() {
}
for ( header in w.apps[app].headers ) {
regex = new RegExp(w.apps[app][type][header].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( typeof data[type][header] === 'string' && regex.test(data[type][header]) ) {
apps[app] = confidence;
parse(w.apps[app][type][header]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( typeof data[type][header] === 'string' && pattern.regex.test(data[type][header]) ) {
apps[app] = confidence;
}
});
}
break;
@ -230,17 +240,15 @@ var wappalyzer = (function() {
break;
}
regex = RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
for ( i in data[type] ) {
profiler.regexCount ++;
if ( regex.test(data[type][i]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
for ( i in data[type] ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(data[type][i]) ) {
apps[app] = confidence;
}
}
}
});
break;
}

@ -24,6 +24,26 @@ var wappalyzer = (function() {
return w.driver[func](args);
};
/**
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
patterns = [ patterns ];
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
});
return parsed;
};
/**
* Main script
*/
@ -91,7 +111,7 @@ var wappalyzer = (function() {
*/
analyze: function(hostname, url, data) {
var
i, j, app, confidence, type, regex, regexMeta, regexScript, match, content, meta, header,
i, j, app, confidence, type, regexMeta, regexScript, match, content, meta, header,
profiler = {
regexCount: 0,
startTime: new Date().getTime()
@ -115,7 +135,6 @@ var wappalyzer = (function() {
w.detected[url] = {};
}
appLoop:
for ( app in w.apps ) {
// Skip if the app has already been detected
if ( w.detected[url].hasOwnProperty(app) || apps.indexOf(app) !== -1 ) {
@ -129,15 +148,13 @@ var wappalyzer = (function() {
switch ( type ) {
case 'url':
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(url) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(url) ) {
apps[app] = confidence;
}
});
break;
case 'html':
@ -145,15 +162,13 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(data[type]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(data[type]) ) {
apps[app] = confidence;
}
});
break;
case 'script':
@ -161,20 +176,19 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
regexScript = new RegExp('<script[^>]+src=("|\')([^"\']+)', 'ig');
profiler.regexCount ++;
while ( match = regexScript.exec(data.html) ) {
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
if ( regex.test(match[2]) ) {
apps[app] = confidence;
while ( match = regexScript.exec(data.html) ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(match[2]) ) {
apps[app] = confidence;
}
}
}
});
break;
case 'meta':
@ -193,15 +207,13 @@ var wappalyzer = (function() {
if ( new RegExp('name=["\']' + meta + '["\']', 'i').test(match) ) {
content = match.toString().match(/content=("|')([^"']+)("|')/i);
regex = new RegExp(w.apps[app].meta[meta].replace('/', '\\\/'), 'i');
parse(w.apps[app].meta[meta]).map(function(pattern) {
profiler.regexCount ++;
profiler.regexCount ++;
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
continue appLoop;
}
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
}
});
}
}
}
@ -213,15 +225,13 @@ var wappalyzer = (function() {
}
for ( header in w.apps[app].headers ) {
regex = new RegExp(w.apps[app][type][header].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( typeof data[type][header] === 'string' && regex.test(data[type][header]) ) {
apps[app] = confidence;
parse(w.apps[app][type][header]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( typeof data[type][header] === 'string' && pattern.regex.test(data[type][header]) ) {
apps[app] = confidence;
}
});
}
break;
@ -230,17 +240,15 @@ var wappalyzer = (function() {
break;
}
regex = RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
for ( i in data[type] ) {
profiler.regexCount ++;
if ( regex.test(data[type][i]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
for ( i in data[type] ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(data[type][i]) ) {
apps[app] = confidence;
}
}
}
});
break;
}

@ -331,6 +331,7 @@
"Contao": {
"cats": [ 1 ],
"html": "(<!--.+powered by (TYPOlight|Contao)-->|<link[^>]+(typolight|contao)\\.css)",
"meta": { "generator": "Contao" },
"implies": [ "PHP" ]
},
"Contenido": {

File diff suppressed because it is too large Load Diff

@ -24,6 +24,26 @@ var wappalyzer = (function() {
return w.driver[func](args);
};
/**
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
patterns = [ patterns ];
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
});
return parsed;
};
/**
* Main script
*/
@ -91,7 +111,7 @@ var wappalyzer = (function() {
*/
analyze: function(hostname, url, data) {
var
i, j, app, confidence, type, regex, regexMeta, regexScript, match, content, meta, header,
i, j, app, confidence, type, regexMeta, regexScript, match, content, meta, header,
profiler = {
regexCount: 0,
startTime: new Date().getTime()
@ -115,7 +135,6 @@ var wappalyzer = (function() {
w.detected[url] = {};
}
appLoop:
for ( app in w.apps ) {
// Skip if the app has already been detected
if ( w.detected[url].hasOwnProperty(app) || apps.indexOf(app) !== -1 ) {
@ -129,15 +148,13 @@ var wappalyzer = (function() {
switch ( type ) {
case 'url':
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(url) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(url) ) {
apps[app] = confidence;
}
});
break;
case 'html':
@ -145,15 +162,13 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( regex.test(data[type]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( pattern.regex.test(data[type]) ) {
apps[app] = confidence;
}
});
break;
case 'script':
@ -161,20 +176,19 @@ var wappalyzer = (function() {
break;
}
regex = new RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
regexScript = new RegExp('<script[^>]+src=("|\')([^"\']+)', 'ig');
profiler.regexCount ++;
while ( match = regexScript.exec(data.html) ) {
parse(w.apps[app][type]).map(function(pattern) {
profiler.regexCount ++;
if ( regex.test(match[2]) ) {
apps[app] = confidence;
while ( match = regexScript.exec(data.html) ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(match[2]) ) {
apps[app] = confidence;
}
}
}
});
break;
case 'meta':
@ -193,15 +207,13 @@ var wappalyzer = (function() {
if ( new RegExp('name=["\']' + meta + '["\']', 'i').test(match) ) {
content = match.toString().match(/content=("|')([^"']+)("|')/i);
regex = new RegExp(w.apps[app].meta[meta].replace('/', '\\\/'), 'i');
parse(w.apps[app].meta[meta]).map(function(pattern) {
profiler.regexCount ++;
profiler.regexCount ++;
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
continue appLoop;
}
if ( content && content.length === 4 && regex.test(content[2]) ) {
apps[app] = confidence;
}
});
}
}
}
@ -213,15 +225,13 @@ var wappalyzer = (function() {
}
for ( header in w.apps[app].headers ) {
regex = new RegExp(w.apps[app][type][header].replace('/', '\\\/'), 'i');
profiler.regexCount ++;
if ( typeof data[type][header] === 'string' && regex.test(data[type][header]) ) {
apps[app] = confidence;
parse(w.apps[app][type][header]).map(function(pattern) {
profiler.regexCount ++;
continue appLoop;
}
if ( typeof data[type][header] === 'string' && pattern.regex.test(data[type][header]) ) {
apps[app] = confidence;
}
});
}
break;
@ -230,17 +240,15 @@ var wappalyzer = (function() {
break;
}
regex = RegExp(w.apps[app][type].replace('/', '\\\/'), 'i');
for ( i in data[type] ) {
profiler.regexCount ++;
if ( regex.test(data[type][i]) ) {
apps[app] = confidence;
parse(w.apps[app][type]).map(function(pattern) {
for ( i in data[type] ) {
profiler.regexCount ++;
continue appLoop;
if ( pattern.regex.test(data[type][i]) ) {
apps[app] = confidence;
}
}
}
});
break;
}