Manually merged @SebastianLopienski's apps.json changes, added support for new apps.json syntax

main
Elbert Alias 12 years ago
parent e79c9075cd
commit f171989a9b

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns * Parse apps.json patterns
*/ */
var parse = function(patterns) { var parse = function(patterns) {
var parsed = []; var
attrs,
parsed = []
;
// Convert single patterns to an array // Convert single patterns to an array
if ( typeof patterns === 'string' ) { if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
} }
patterns.map(function(pattern) { patterns.map(function(pattern) {
parsed.push({ attrs = {};
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
}); });
parsed.push(attrs);
}); });
return parsed; return parsed;

@ -31,7 +31,8 @@
"29": "search-engines", "29": "search-engines",
"30": "web-mail", "30": "web-mail",
"31": "cdn", "31": "cdn",
"32": "marketing-automation" "32": "marketing-automation",
"33": "web-server-extension"
}, },
"apps": { "apps": {
"1C-Bitrix": { "1C-Bitrix": {
@ -73,7 +74,7 @@
}, },
"Adobe GoLive": { "Adobe GoLive": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" } "meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
}, },
"Advanced Web Stats": { "Advanced Web Stats": {
"cats": [ 10 ], "cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ], "cats": [ 12 ],
"env": "^AUI$" "env": "^AUI$"
}, },
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": { "Ametys": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" }, "meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
}, },
"Apache": { "Apache": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" } "headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
}, },
"Apache JSPWiki": { "Apache JSPWiki": {
"cats": [ 8 ], "cats": [ 8 ],
@ -144,13 +149,17 @@
}, },
"Atlassian Confluence": { "Atlassian Confluence": {
"cats": [ 8 ], "cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence", "html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"Atlassian Jira": { "Atlassian Jira": {
"cats": [ 13 ], "cats": [ 13 ],
"env": "^jira$", "env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira", "script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"AWStats": { "AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" }, "meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": { "CO2Stats": {
"cats": [ 10 ], "cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php" "html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -484,11 +498,12 @@
"meta": { "generator": "Dokeos" }, "meta": { "generator": "Dokeos" },
"html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue", "html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue",
"headers": { "X-Powered-By": "Dokeos" }, "headers": { "X-Powered-By": "Dokeos" },
"implies": [ "PHP", "xajax", "jQuery", "CKEditor" ] "implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ]
}, },
"DokuWiki": { "DokuWiki": {
"cats": [ 8 ], "cats": [ 8 ],
"meta": { "generator": "DokuWiki" }, "meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"DotNetNuke": { "DotNetNuke": {
@ -505,13 +520,13 @@
}, },
"DreamWeaver": { "DreamWeaver": {
"cats": [ 20 ], "cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)" "html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
}, },
"Drupal": { "Drupal": {
"cats": [ 1 ], "cats": [ 1 ],
"script": "drupal\\.js", "script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/", "html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" }, "headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$", "env": "^Drupal$",
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
@ -605,7 +620,7 @@
}, },
"FrontPage": { "FrontPage": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" }, "meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office" "html": "<html[^>]+urn:schemas-microsoft-com:office:office"
}, },
"FWP": { "FWP": {
@ -663,7 +678,7 @@
}, },
"Google Maps": { "Google Maps": {
"cats": [ 5 ], "cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)" "script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
}, },
"Google Sites": { "Google Sites": {
"cats": [ 1 ], "cats": [ 1 ],
@ -739,7 +754,7 @@
}, },
"IIS": { "IIS": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "IIS" }, "headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ] "implies": [ "Windows Server" ]
}, },
"ImpressCMS": { "ImpressCMS": {
@ -777,7 +792,12 @@
}, },
"iWeb": { "iWeb": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "^iWeb" } "meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
}, },
"Jalios": { "Jalios": {
"cats": [ 1 ], "cats": [ 1 ],
@ -792,6 +812,21 @@
"script": "jit.*\\.js", "script": "jit.*\\.js",
"env": "^\\$jit$" "env": "^\\$jit$"
}, },
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": { "Jirafe": {
"cats": [ 10, 32 ], "cats": [ 10, 32 ],
"script": "/jirafe\\.js", "script": "/jirafe\\.js",
@ -828,12 +863,13 @@
}, },
"jQuery": { "jQuery": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "jquery.*\\.js", "script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$" "env": "^jQuery$"
}, },
"jQuery Mobile": { "jQuery Mobile": {
"cats": [ 26 ], "cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js" "script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
}, },
"jQuery Sparklines": { "jQuery Sparklines": {
"cats": [ 25 ], "cats": [ 25 ],
@ -875,6 +911,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Kentico CMS" } "meta": { "generator": "Kentico CMS" }
}, },
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": { "KISSmetrics": {
"cats": [ 10 ], "cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$" "env": "^KM_COOKIE_DOMAIN$"
@ -978,13 +1018,13 @@
"Microsoft ASP.NET": { "Microsoft ASP.NET": {
"cats": [ 18 ], "cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE", "html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" }, "headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ] "implies": [ "IIS", "Windows Server" ]
}, },
"Microsoft SharePoint": { "Microsoft SharePoint": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" }, "meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" } "headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
}, },
"MiniBB": { "MiniBB": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1007,7 +1047,7 @@
}, },
"Modernizr": { "Modernizr": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "modernizr.*\\.js", "script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$" "env": "^Modernizr$"
}, },
"MODx": { "MODx": {
@ -1017,16 +1057,46 @@
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" }, "headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": { "MoinMoin": {
"cats": [ 8 ], "cats": [ 8 ],
"script": "moin.+/common/js/common\\.js", "script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$", "env": "^show_switch2gui$",
"implies": [ "Python" ] "implies": [ "Python" ]
}, },
"Mojolicious": { "Mojolicious": {
"cats": [ 18 ], "cats": [ 18 ],
"headers": { "x-powered-by": "mojolicious" }, "headers": { "x-powered-by": "mojolicious" },
"implies": [ "PERL" ] "implies": [ "Perl" ]
}, },
"Mollom": { "Mollom": {
"cats": [ 16 ], "cats": [ 16 ],
@ -1126,6 +1196,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"html": "<meta[^>]+openEngine" "html": "<meta[^>]+openEngine"
}, },
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": { "OpenGSE": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "GSE" }, "headers": { "Server": "GSE" },
@ -1140,6 +1216,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" } "headers": { "X-Powered-By": "OpenNemas" }
}, },
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": { "OpenText Web Solutions": {
"cats": [ 1 ], "cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions", "html": "<!--[^>]+published by Open Text Web Solutions",
@ -1149,6 +1229,10 @@
"cats": [ 10 ], "cats": [ 10 ],
"env": "^optimizely$" "env": "^optimizely$"
}, },
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": { "Oracle Recommendations On Demand": {
"cats": [ 10 ], "cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js" "script": "atgsvcs.+atgsvcs\\.js"
@ -1156,7 +1240,7 @@
"osCommerce": { "osCommerce": {
"cats": [ 6 ], "cats": [ 6 ],
"html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)", "html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)",
"header": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" } "headers": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
}, },
"osCSS": { "osCSS": {
"cats": [ 6 ], "cats": [ 6 ],
@ -1195,7 +1279,7 @@
}, },
"PHP": { "PHP": {
"cats": [ 27 ], "cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" }, "headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$" "url": "\\.php$"
}, },
"phpAlbum": { "phpAlbum": {
@ -1302,7 +1386,7 @@
}, },
"Prototype": { "Prototype": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js", "script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$" "env": "^Prototype$"
}, },
"Protovis": { "Protovis": {
@ -1316,7 +1400,8 @@
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"Python": { "Python": {
"cats": [ 27 ] "cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
}, },
"Quantcast": { "Quantcast": {
"cats": [ 10 ], "cats": [ 10 ],
@ -1339,8 +1424,8 @@
}, },
"RBS Change": { "RBS Change": {
"cats": [ 1, 6 ], "cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=", "html": "<html[^>]+xmlns:change=",
"meta": { "generator": "^RBS Change" }, "meta": { "generator": "RBS Change" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"RCMS": { "RCMS": {
@ -1355,7 +1440,7 @@
}, },
"Red Hat": { "Red Hat": {
"cats": [ 28 ], "cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" } "headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
}, },
"Reddit": { "Reddit": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1405,6 +1490,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" } "meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
}, },
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": { "script.aculo.us": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js", "script": "(scriptaculous|protoaculous)\\.js",
@ -1427,12 +1518,6 @@
"script": "w\\.sharethis\\.com/", "script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$" "env": "^SHARETHIS$"
}, },
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": { "Shopalize": {
"cats": [ 5, 10 ], "cats": [ 5, 10 ],
"env": "^Shopalize$" "env": "^Shopalize$"
@ -1515,7 +1600,7 @@
}, },
"SPIP": { "SPIP": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "SPIP" }, "meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" } "headers": { "X-Spip-Cache": ".*" }
}, },
"SQL Buddy": { "SQL Buddy": {
@ -1529,7 +1614,8 @@
"Squiz Matrix": { "Squiz Matrix": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Squiz Matrix" }, "meta": { "generator": "Squiz Matrix" },
"html": " Running (MySource|Squiz) Matrix", "X-Powered-By": "Squiz Matrix", "html": " Running (MySource|Squiz) Matrix",
"headers": { "X-Powered-By": "Squiz Matrix" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"StatCounter": { "StatCounter": {
@ -1545,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js", "script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$" "env": "^sublimevideo$"
}, },
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": { "SWFObject": {
"cats": [ 19 ], "cats": [ 19 ],
"script": "swfobject.*\\.js", "script": "swfobject.*\\.js",
@ -1798,7 +1896,7 @@
}, },
"WordPress": { "WordPress": {
"cats": [ 1, 11 ], "cats": [ 1, 11 ],
"meta": { "generator": "WordPress" }, "meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content", "html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$", "env": "^wp_username$",
"implies": [ "PHP" ] "implies": [ "PHP" ]

@ -31,7 +31,8 @@
"29": "search-engines", "29": "search-engines",
"30": "web-mail", "30": "web-mail",
"31": "cdn", "31": "cdn",
"32": "marketing-automation" "32": "marketing-automation",
"33": "web-server-extension"
}, },
"apps": { "apps": {
"1C-Bitrix": { "1C-Bitrix": {
@ -73,7 +74,7 @@
}, },
"Adobe GoLive": { "Adobe GoLive": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" } "meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
}, },
"Advanced Web Stats": { "Advanced Web Stats": {
"cats": [ 10 ], "cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ], "cats": [ 12 ],
"env": "^AUI$" "env": "^AUI$"
}, },
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": { "Ametys": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" }, "meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
}, },
"Apache": { "Apache": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" } "headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
}, },
"Apache JSPWiki": { "Apache JSPWiki": {
"cats": [ 8 ], "cats": [ 8 ],
@ -144,13 +149,17 @@
}, },
"Atlassian Confluence": { "Atlassian Confluence": {
"cats": [ 8 ], "cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence", "html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"Atlassian Jira": { "Atlassian Jira": {
"cats": [ 13 ], "cats": [ 13 ],
"env": "^jira$", "env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira", "script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"AWStats": { "AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" }, "meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": { "CO2Stats": {
"cats": [ 10 ], "cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php" "html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -484,11 +498,12 @@
"meta": { "generator": "Dokeos" }, "meta": { "generator": "Dokeos" },
"html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue", "html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue",
"headers": { "X-Powered-By": "Dokeos" }, "headers": { "X-Powered-By": "Dokeos" },
"implies": [ "PHP", "xajax", "jQuery", "CKEditor" ] "implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ]
}, },
"DokuWiki": { "DokuWiki": {
"cats": [ 8 ], "cats": [ 8 ],
"meta": { "generator": "DokuWiki" }, "meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"DotNetNuke": { "DotNetNuke": {
@ -505,13 +520,13 @@
}, },
"DreamWeaver": { "DreamWeaver": {
"cats": [ 20 ], "cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)" "html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
}, },
"Drupal": { "Drupal": {
"cats": [ 1 ], "cats": [ 1 ],
"script": "drupal\\.js", "script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/", "html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" }, "headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$", "env": "^Drupal$",
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
@ -605,7 +620,7 @@
}, },
"FrontPage": { "FrontPage": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" }, "meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office" "html": "<html[^>]+urn:schemas-microsoft-com:office:office"
}, },
"FWP": { "FWP": {
@ -663,7 +678,7 @@
}, },
"Google Maps": { "Google Maps": {
"cats": [ 5 ], "cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)" "script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
}, },
"Google Sites": { "Google Sites": {
"cats": [ 1 ], "cats": [ 1 ],
@ -739,7 +754,7 @@
}, },
"IIS": { "IIS": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "IIS" }, "headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ] "implies": [ "Windows Server" ]
}, },
"ImpressCMS": { "ImpressCMS": {
@ -777,7 +792,12 @@
}, },
"iWeb": { "iWeb": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "^iWeb" } "meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
}, },
"Jalios": { "Jalios": {
"cats": [ 1 ], "cats": [ 1 ],
@ -792,6 +812,21 @@
"script": "jit.*\\.js", "script": "jit.*\\.js",
"env": "^\\$jit$" "env": "^\\$jit$"
}, },
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": { "Jirafe": {
"cats": [ 10, 32 ], "cats": [ 10, 32 ],
"script": "/jirafe\\.js", "script": "/jirafe\\.js",
@ -828,12 +863,13 @@
}, },
"jQuery": { "jQuery": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "jquery.*\\.js", "script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$" "env": "^jQuery$"
}, },
"jQuery Mobile": { "jQuery Mobile": {
"cats": [ 26 ], "cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js" "script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
}, },
"jQuery Sparklines": { "jQuery Sparklines": {
"cats": [ 25 ], "cats": [ 25 ],
@ -875,6 +911,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Kentico CMS" } "meta": { "generator": "Kentico CMS" }
}, },
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": { "KISSmetrics": {
"cats": [ 10 ], "cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$" "env": "^KM_COOKIE_DOMAIN$"
@ -978,13 +1018,13 @@
"Microsoft ASP.NET": { "Microsoft ASP.NET": {
"cats": [ 18 ], "cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE", "html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" }, "headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ] "implies": [ "IIS", "Windows Server" ]
}, },
"Microsoft SharePoint": { "Microsoft SharePoint": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" }, "meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" } "headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
}, },
"MiniBB": { "MiniBB": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1007,7 +1047,7 @@
}, },
"Modernizr": { "Modernizr": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "modernizr.*\\.js", "script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$" "env": "^Modernizr$"
}, },
"MODx": { "MODx": {
@ -1017,16 +1057,46 @@
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" }, "headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": { "MoinMoin": {
"cats": [ 8 ], "cats": [ 8 ],
"script": "moin.+/common/js/common\\.js", "script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$", "env": "^show_switch2gui$",
"implies": [ "Python" ] "implies": [ "Python" ]
}, },
"Mojolicious": { "Mojolicious": {
"cats": [ 18 ], "cats": [ 18 ],
"headers": { "x-powered-by": "mojolicious" }, "headers": { "x-powered-by": "mojolicious" },
"implies": [ "PERL" ] "implies": [ "Perl" ]
}, },
"Mollom": { "Mollom": {
"cats": [ 16 ], "cats": [ 16 ],
@ -1126,6 +1196,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"html": "<meta[^>]+openEngine" "html": "<meta[^>]+openEngine"
}, },
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": { "OpenGSE": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "GSE" }, "headers": { "Server": "GSE" },
@ -1140,6 +1216,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" } "headers": { "X-Powered-By": "OpenNemas" }
}, },
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": { "OpenText Web Solutions": {
"cats": [ 1 ], "cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions", "html": "<!--[^>]+published by Open Text Web Solutions",
@ -1149,6 +1229,10 @@
"cats": [ 10 ], "cats": [ 10 ],
"env": "^optimizely$" "env": "^optimizely$"
}, },
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": { "Oracle Recommendations On Demand": {
"cats": [ 10 ], "cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js" "script": "atgsvcs.+atgsvcs\\.js"
@ -1156,7 +1240,7 @@
"osCommerce": { "osCommerce": {
"cats": [ 6 ], "cats": [ 6 ],
"html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)", "html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)",
"header": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" } "headers": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
}, },
"osCSS": { "osCSS": {
"cats": [ 6 ], "cats": [ 6 ],
@ -1195,7 +1279,7 @@
}, },
"PHP": { "PHP": {
"cats": [ 27 ], "cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" }, "headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$" "url": "\\.php$"
}, },
"phpAlbum": { "phpAlbum": {
@ -1302,7 +1386,7 @@
}, },
"Prototype": { "Prototype": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js", "script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$" "env": "^Prototype$"
}, },
"Protovis": { "Protovis": {
@ -1316,7 +1400,8 @@
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"Python": { "Python": {
"cats": [ 27 ] "cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
}, },
"Quantcast": { "Quantcast": {
"cats": [ 10 ], "cats": [ 10 ],
@ -1339,8 +1424,8 @@
}, },
"RBS Change": { "RBS Change": {
"cats": [ 1, 6 ], "cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=", "html": "<html[^>]+xmlns:change=",
"meta": { "generator": "^RBS Change" }, "meta": { "generator": "RBS Change" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"RCMS": { "RCMS": {
@ -1355,7 +1440,7 @@
}, },
"Red Hat": { "Red Hat": {
"cats": [ 28 ], "cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" } "headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
}, },
"Reddit": { "Reddit": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1405,6 +1490,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" } "meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
}, },
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": { "script.aculo.us": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js", "script": "(scriptaculous|protoaculous)\\.js",
@ -1427,12 +1518,6 @@
"script": "w\\.sharethis\\.com/", "script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$" "env": "^SHARETHIS$"
}, },
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": { "Shopalize": {
"cats": [ 5, 10 ], "cats": [ 5, 10 ],
"env": "^Shopalize$" "env": "^Shopalize$"
@ -1515,7 +1600,7 @@
}, },
"SPIP": { "SPIP": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "SPIP" }, "meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" } "headers": { "X-Spip-Cache": ".*" }
}, },
"SQL Buddy": { "SQL Buddy": {
@ -1529,7 +1614,8 @@
"Squiz Matrix": { "Squiz Matrix": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Squiz Matrix" }, "meta": { "generator": "Squiz Matrix" },
"html": " Running (MySource|Squiz) Matrix", "X-Powered-By": "Squiz Matrix", "html": " Running (MySource|Squiz) Matrix",
"headers": { "X-Powered-By": "Squiz Matrix" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"StatCounter": { "StatCounter": {
@ -1545,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js", "script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$" "env": "^sublimevideo$"
}, },
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": { "SWFObject": {
"cats": [ 19 ], "cats": [ 19 ],
"script": "swfobject.*\\.js", "script": "swfobject.*\\.js",
@ -1798,7 +1896,7 @@
}, },
"WordPress": { "WordPress": {
"cats": [ 1, 11 ], "cats": [ 1, 11 ],
"meta": { "generator": "WordPress" }, "meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content", "html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$", "env": "^wp_username$",
"implies": [ "PHP" ] "implies": [ "PHP" ]

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns * Parse apps.json patterns
*/ */
var parse = function(patterns) { var parse = function(patterns) {
var parsed = []; var
attrs,
parsed = []
;
// Convert single patterns to an array // Convert single patterns to an array
if ( typeof patterns === 'string' ) { if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
} }
patterns.map(function(pattern) { patterns.map(function(pattern) {
parsed.push({ attrs = {};
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
}); });
parsed.push(attrs);
}); });
return parsed; return parsed;

@ -31,7 +31,8 @@
"29": "search-engines", "29": "search-engines",
"30": "web-mail", "30": "web-mail",
"31": "cdn", "31": "cdn",
"32": "marketing-automation" "32": "marketing-automation",
"33": "web-server-extension"
}, },
"apps": { "apps": {
"1C-Bitrix": { "1C-Bitrix": {
@ -73,7 +74,7 @@
}, },
"Adobe GoLive": { "Adobe GoLive": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" } "meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
}, },
"Advanced Web Stats": { "Advanced Web Stats": {
"cats": [ 10 ], "cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ], "cats": [ 12 ],
"env": "^AUI$" "env": "^AUI$"
}, },
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": { "Ametys": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" }, "meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
}, },
"Apache": { "Apache": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" } "headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
}, },
"Apache JSPWiki": { "Apache JSPWiki": {
"cats": [ 8 ], "cats": [ 8 ],
@ -144,13 +149,17 @@
}, },
"Atlassian Confluence": { "Atlassian Confluence": {
"cats": [ 8 ], "cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence", "html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"Atlassian Jira": { "Atlassian Jira": {
"cats": [ 13 ], "cats": [ 13 ],
"env": "^jira$", "env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira", "script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"AWStats": { "AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" }, "meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": { "CO2Stats": {
"cats": [ 10 ], "cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php" "html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -484,11 +498,12 @@
"meta": { "generator": "Dokeos" }, "meta": { "generator": "Dokeos" },
"html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue", "html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue",
"headers": { "X-Powered-By": "Dokeos" }, "headers": { "X-Powered-By": "Dokeos" },
"implies": [ "PHP", "xajax", "jQuery", "CKEditor" ] "implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ]
}, },
"DokuWiki": { "DokuWiki": {
"cats": [ 8 ], "cats": [ 8 ],
"meta": { "generator": "DokuWiki" }, "meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"DotNetNuke": { "DotNetNuke": {
@ -505,13 +520,13 @@
}, },
"DreamWeaver": { "DreamWeaver": {
"cats": [ 20 ], "cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)" "html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
}, },
"Drupal": { "Drupal": {
"cats": [ 1 ], "cats": [ 1 ],
"script": "drupal\\.js", "script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/", "html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" }, "headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$", "env": "^Drupal$",
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
@ -605,7 +620,7 @@
}, },
"FrontPage": { "FrontPage": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" }, "meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office" "html": "<html[^>]+urn:schemas-microsoft-com:office:office"
}, },
"FWP": { "FWP": {
@ -663,7 +678,7 @@
}, },
"Google Maps": { "Google Maps": {
"cats": [ 5 ], "cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)" "script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
}, },
"Google Sites": { "Google Sites": {
"cats": [ 1 ], "cats": [ 1 ],
@ -739,7 +754,7 @@
}, },
"IIS": { "IIS": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "IIS" }, "headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ] "implies": [ "Windows Server" ]
}, },
"ImpressCMS": { "ImpressCMS": {
@ -777,7 +792,12 @@
}, },
"iWeb": { "iWeb": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "^iWeb" } "meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
}, },
"Jalios": { "Jalios": {
"cats": [ 1 ], "cats": [ 1 ],
@ -792,6 +812,21 @@
"script": "jit.*\\.js", "script": "jit.*\\.js",
"env": "^\\$jit$" "env": "^\\$jit$"
}, },
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": { "Jirafe": {
"cats": [ 10, 32 ], "cats": [ 10, 32 ],
"script": "/jirafe\\.js", "script": "/jirafe\\.js",
@ -828,12 +863,13 @@
}, },
"jQuery": { "jQuery": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "jquery.*\\.js", "script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$" "env": "^jQuery$"
}, },
"jQuery Mobile": { "jQuery Mobile": {
"cats": [ 26 ], "cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js" "script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
}, },
"jQuery Sparklines": { "jQuery Sparklines": {
"cats": [ 25 ], "cats": [ 25 ],
@ -875,6 +911,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Kentico CMS" } "meta": { "generator": "Kentico CMS" }
}, },
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": { "KISSmetrics": {
"cats": [ 10 ], "cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$" "env": "^KM_COOKIE_DOMAIN$"
@ -978,13 +1018,13 @@
"Microsoft ASP.NET": { "Microsoft ASP.NET": {
"cats": [ 18 ], "cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE", "html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" }, "headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ] "implies": [ "IIS", "Windows Server" ]
}, },
"Microsoft SharePoint": { "Microsoft SharePoint": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" }, "meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" } "headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
}, },
"MiniBB": { "MiniBB": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1007,7 +1047,7 @@
}, },
"Modernizr": { "Modernizr": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "modernizr.*\\.js", "script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$" "env": "^Modernizr$"
}, },
"MODx": { "MODx": {
@ -1017,16 +1057,46 @@
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" }, "headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": { "MoinMoin": {
"cats": [ 8 ], "cats": [ 8 ],
"script": "moin.+/common/js/common\\.js", "script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$", "env": "^show_switch2gui$",
"implies": [ "Python" ] "implies": [ "Python" ]
}, },
"Mojolicious": { "Mojolicious": {
"cats": [ 18 ], "cats": [ 18 ],
"headers": { "x-powered-by": "mojolicious" }, "headers": { "x-powered-by": "mojolicious" },
"implies": [ "PERL" ] "implies": [ "Perl" ]
}, },
"Mollom": { "Mollom": {
"cats": [ 16 ], "cats": [ 16 ],
@ -1126,6 +1196,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"html": "<meta[^>]+openEngine" "html": "<meta[^>]+openEngine"
}, },
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": { "OpenGSE": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "GSE" }, "headers": { "Server": "GSE" },
@ -1140,6 +1216,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" } "headers": { "X-Powered-By": "OpenNemas" }
}, },
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": { "OpenText Web Solutions": {
"cats": [ 1 ], "cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions", "html": "<!--[^>]+published by Open Text Web Solutions",
@ -1149,6 +1229,10 @@
"cats": [ 10 ], "cats": [ 10 ],
"env": "^optimizely$" "env": "^optimizely$"
}, },
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": { "Oracle Recommendations On Demand": {
"cats": [ 10 ], "cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js" "script": "atgsvcs.+atgsvcs\\.js"
@ -1156,7 +1240,7 @@
"osCommerce": { "osCommerce": {
"cats": [ 6 ], "cats": [ 6 ],
"html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)", "html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)",
"header": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" } "headers": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
}, },
"osCSS": { "osCSS": {
"cats": [ 6 ], "cats": [ 6 ],
@ -1195,7 +1279,7 @@
}, },
"PHP": { "PHP": {
"cats": [ 27 ], "cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" }, "headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$" "url": "\\.php$"
}, },
"phpAlbum": { "phpAlbum": {
@ -1302,7 +1386,7 @@
}, },
"Prototype": { "Prototype": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js", "script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$" "env": "^Prototype$"
}, },
"Protovis": { "Protovis": {
@ -1316,7 +1400,8 @@
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"Python": { "Python": {
"cats": [ 27 ] "cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
}, },
"Quantcast": { "Quantcast": {
"cats": [ 10 ], "cats": [ 10 ],
@ -1339,8 +1424,8 @@
}, },
"RBS Change": { "RBS Change": {
"cats": [ 1, 6 ], "cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=", "html": "<html[^>]+xmlns:change=",
"meta": { "generator": "^RBS Change" }, "meta": { "generator": "RBS Change" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"RCMS": { "RCMS": {
@ -1355,7 +1440,7 @@
}, },
"Red Hat": { "Red Hat": {
"cats": [ 28 ], "cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" } "headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
}, },
"Reddit": { "Reddit": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1405,6 +1490,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" } "meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
}, },
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": { "script.aculo.us": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js", "script": "(scriptaculous|protoaculous)\\.js",
@ -1427,12 +1518,6 @@
"script": "w\\.sharethis\\.com/", "script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$" "env": "^SHARETHIS$"
}, },
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": { "Shopalize": {
"cats": [ 5, 10 ], "cats": [ 5, 10 ],
"env": "^Shopalize$" "env": "^Shopalize$"
@ -1515,7 +1600,7 @@
}, },
"SPIP": { "SPIP": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "SPIP" }, "meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" } "headers": { "X-Spip-Cache": ".*" }
}, },
"SQL Buddy": { "SQL Buddy": {
@ -1529,7 +1614,8 @@
"Squiz Matrix": { "Squiz Matrix": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Squiz Matrix" }, "meta": { "generator": "Squiz Matrix" },
"html": " Running (MySource|Squiz) Matrix", "X-Powered-By": "Squiz Matrix", "html": " Running (MySource|Squiz) Matrix",
"headers": { "X-Powered-By": "Squiz Matrix" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"StatCounter": { "StatCounter": {
@ -1545,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js", "script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$" "env": "^sublimevideo$"
}, },
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": { "SWFObject": {
"cats": [ 19 ], "cats": [ 19 ],
"script": "swfobject.*\\.js", "script": "swfobject.*\\.js",
@ -1798,7 +1896,7 @@
}, },
"WordPress": { "WordPress": {
"cats": [ 1, 11 ], "cats": [ 1, 11 ],
"meta": { "generator": "WordPress" }, "meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content", "html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$", "env": "^wp_username$",
"implies": [ "PHP" ] "implies": [ "PHP" ]

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns * Parse apps.json patterns
*/ */
var parse = function(patterns) { var parse = function(patterns) {
var parsed = []; var
attrs,
parsed = []
;
// Convert single patterns to an array // Convert single patterns to an array
if ( typeof patterns === 'string' ) { if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
} }
patterns.map(function(pattern) { patterns.map(function(pattern) {
parsed.push({ attrs = {};
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
}); });
parsed.push(attrs);
}); });
return parsed; return parsed;

@ -31,7 +31,8 @@
"29": "search-engines", "29": "search-engines",
"30": "web-mail", "30": "web-mail",
"31": "cdn", "31": "cdn",
"32": "marketing-automation" "32": "marketing-automation",
"33": "web-server-extension"
}, },
"apps": { "apps": {
"1C-Bitrix": { "1C-Bitrix": {
@ -73,7 +74,7 @@
}, },
"Adobe GoLive": { "Adobe GoLive": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" } "meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
}, },
"Advanced Web Stats": { "Advanced Web Stats": {
"cats": [ 10 ], "cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ], "cats": [ 12 ],
"env": "^AUI$" "env": "^AUI$"
}, },
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": { "Ametys": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" }, "meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
}, },
"Apache": { "Apache": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" } "headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
}, },
"Apache JSPWiki": { "Apache JSPWiki": {
"cats": [ 8 ], "cats": [ 8 ],
@ -144,13 +149,17 @@
}, },
"Atlassian Confluence": { "Atlassian Confluence": {
"cats": [ 8 ], "cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence", "html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"Atlassian Jira": { "Atlassian Jira": {
"cats": [ 13 ], "cats": [ 13 ],
"env": "^jira$", "env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira", "script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"AWStats": { "AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" }, "meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": { "CO2Stats": {
"cats": [ 10 ], "cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php" "html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -484,11 +498,12 @@
"meta": { "generator": "Dokeos" }, "meta": { "generator": "Dokeos" },
"html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue", "html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue",
"headers": { "X-Powered-By": "Dokeos" }, "headers": { "X-Powered-By": "Dokeos" },
"implies": [ "PHP", "xajax", "jQuery", "CKEditor" ] "implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ]
}, },
"DokuWiki": { "DokuWiki": {
"cats": [ 8 ], "cats": [ 8 ],
"meta": { "generator": "DokuWiki" }, "meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"DotNetNuke": { "DotNetNuke": {
@ -505,13 +520,13 @@
}, },
"DreamWeaver": { "DreamWeaver": {
"cats": [ 20 ], "cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)" "html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
}, },
"Drupal": { "Drupal": {
"cats": [ 1 ], "cats": [ 1 ],
"script": "drupal\\.js", "script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/", "html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" }, "headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$", "env": "^Drupal$",
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
@ -605,7 +620,7 @@
}, },
"FrontPage": { "FrontPage": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" }, "meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office" "html": "<html[^>]+urn:schemas-microsoft-com:office:office"
}, },
"FWP": { "FWP": {
@ -663,7 +678,7 @@
}, },
"Google Maps": { "Google Maps": {
"cats": [ 5 ], "cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)" "script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
}, },
"Google Sites": { "Google Sites": {
"cats": [ 1 ], "cats": [ 1 ],
@ -739,7 +754,7 @@
}, },
"IIS": { "IIS": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "IIS" }, "headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ] "implies": [ "Windows Server" ]
}, },
"ImpressCMS": { "ImpressCMS": {
@ -777,7 +792,12 @@
}, },
"iWeb": { "iWeb": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "^iWeb" } "meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
}, },
"Jalios": { "Jalios": {
"cats": [ 1 ], "cats": [ 1 ],
@ -792,6 +812,21 @@
"script": "jit.*\\.js", "script": "jit.*\\.js",
"env": "^\\$jit$" "env": "^\\$jit$"
}, },
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": { "Jirafe": {
"cats": [ 10, 32 ], "cats": [ 10, 32 ],
"script": "/jirafe\\.js", "script": "/jirafe\\.js",
@ -828,12 +863,13 @@
}, },
"jQuery": { "jQuery": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "jquery.*\\.js", "script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$" "env": "^jQuery$"
}, },
"jQuery Mobile": { "jQuery Mobile": {
"cats": [ 26 ], "cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js" "script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
}, },
"jQuery Sparklines": { "jQuery Sparklines": {
"cats": [ 25 ], "cats": [ 25 ],
@ -875,6 +911,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Kentico CMS" } "meta": { "generator": "Kentico CMS" }
}, },
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": { "KISSmetrics": {
"cats": [ 10 ], "cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$" "env": "^KM_COOKIE_DOMAIN$"
@ -978,13 +1018,13 @@
"Microsoft ASP.NET": { "Microsoft ASP.NET": {
"cats": [ 18 ], "cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE", "html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" }, "headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ] "implies": [ "IIS", "Windows Server" ]
}, },
"Microsoft SharePoint": { "Microsoft SharePoint": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" }, "meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" } "headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
}, },
"MiniBB": { "MiniBB": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1007,7 +1047,7 @@
}, },
"Modernizr": { "Modernizr": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "modernizr.*\\.js", "script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$" "env": "^Modernizr$"
}, },
"MODx": { "MODx": {
@ -1017,16 +1057,46 @@
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" }, "headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": { "MoinMoin": {
"cats": [ 8 ], "cats": [ 8 ],
"script": "moin.+/common/js/common\\.js", "script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$", "env": "^show_switch2gui$",
"implies": [ "Python" ] "implies": [ "Python" ]
}, },
"Mojolicious": { "Mojolicious": {
"cats": [ 18 ], "cats": [ 18 ],
"headers": { "x-powered-by": "mojolicious" }, "headers": { "x-powered-by": "mojolicious" },
"implies": [ "PERL" ] "implies": [ "Perl" ]
}, },
"Mollom": { "Mollom": {
"cats": [ 16 ], "cats": [ 16 ],
@ -1126,6 +1196,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"html": "<meta[^>]+openEngine" "html": "<meta[^>]+openEngine"
}, },
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": { "OpenGSE": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "GSE" }, "headers": { "Server": "GSE" },
@ -1140,6 +1216,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" } "headers": { "X-Powered-By": "OpenNemas" }
}, },
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": { "OpenText Web Solutions": {
"cats": [ 1 ], "cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions", "html": "<!--[^>]+published by Open Text Web Solutions",
@ -1149,6 +1229,10 @@
"cats": [ 10 ], "cats": [ 10 ],
"env": "^optimizely$" "env": "^optimizely$"
}, },
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": { "Oracle Recommendations On Demand": {
"cats": [ 10 ], "cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js" "script": "atgsvcs.+atgsvcs\\.js"
@ -1156,7 +1240,7 @@
"osCommerce": { "osCommerce": {
"cats": [ 6 ], "cats": [ 6 ],
"html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)", "html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)",
"header": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" } "headers": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
}, },
"osCSS": { "osCSS": {
"cats": [ 6 ], "cats": [ 6 ],
@ -1195,7 +1279,7 @@
}, },
"PHP": { "PHP": {
"cats": [ 27 ], "cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" }, "headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$" "url": "\\.php$"
}, },
"phpAlbum": { "phpAlbum": {
@ -1302,7 +1386,7 @@
}, },
"Prototype": { "Prototype": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js", "script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$" "env": "^Prototype$"
}, },
"Protovis": { "Protovis": {
@ -1316,7 +1400,8 @@
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"Python": { "Python": {
"cats": [ 27 ] "cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
}, },
"Quantcast": { "Quantcast": {
"cats": [ 10 ], "cats": [ 10 ],
@ -1339,8 +1424,8 @@
}, },
"RBS Change": { "RBS Change": {
"cats": [ 1, 6 ], "cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=", "html": "<html[^>]+xmlns:change=",
"meta": { "generator": "^RBS Change" }, "meta": { "generator": "RBS Change" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"RCMS": { "RCMS": {
@ -1355,7 +1440,7 @@
}, },
"Red Hat": { "Red Hat": {
"cats": [ 28 ], "cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" } "headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
}, },
"Reddit": { "Reddit": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1405,6 +1490,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" } "meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
}, },
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": { "script.aculo.us": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js", "script": "(scriptaculous|protoaculous)\\.js",
@ -1427,12 +1518,6 @@
"script": "w\\.sharethis\\.com/", "script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$" "env": "^SHARETHIS$"
}, },
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": { "Shopalize": {
"cats": [ 5, 10 ], "cats": [ 5, 10 ],
"env": "^Shopalize$" "env": "^Shopalize$"
@ -1515,7 +1600,7 @@
}, },
"SPIP": { "SPIP": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "SPIP" }, "meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" } "headers": { "X-Spip-Cache": ".*" }
}, },
"SQL Buddy": { "SQL Buddy": {
@ -1529,7 +1614,8 @@
"Squiz Matrix": { "Squiz Matrix": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Squiz Matrix" }, "meta": { "generator": "Squiz Matrix" },
"html": " Running (MySource|Squiz) Matrix", "X-Powered-By": "Squiz Matrix", "html": " Running (MySource|Squiz) Matrix",
"headers": { "X-Powered-By": "Squiz Matrix" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"StatCounter": { "StatCounter": {
@ -1545,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js", "script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$" "env": "^sublimevideo$"
}, },
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": { "SWFObject": {
"cats": [ 19 ], "cats": [ 19 ],
"script": "swfobject.*\\.js", "script": "swfobject.*\\.js",
@ -1798,7 +1896,7 @@
}, },
"WordPress": { "WordPress": {
"cats": [ 1, 11 ], "cats": [ 1, 11 ],
"meta": { "generator": "WordPress" }, "meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content", "html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$", "env": "^wp_username$",
"implies": [ "PHP" ] "implies": [ "PHP" ]

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns * Parse apps.json patterns
*/ */
var parse = function(patterns) { var parse = function(patterns) {
var parsed = []; var
attrs,
parsed = []
;
// Convert single patterns to an array // Convert single patterns to an array
if ( typeof patterns === 'string' ) { if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
} }
patterns.map(function(pattern) { patterns.map(function(pattern) {
parsed.push({ attrs = {};
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
}); });
parsed.push(attrs);
}); });
return parsed; return parsed;

@ -31,7 +31,8 @@
"29": "search-engines", "29": "search-engines",
"30": "web-mail", "30": "web-mail",
"31": "cdn", "31": "cdn",
"32": "marketing-automation" "32": "marketing-automation",
"33": "web-server-extension"
}, },
"apps": { "apps": {
"1C-Bitrix": { "1C-Bitrix": {
@ -73,7 +74,7 @@
}, },
"Adobe GoLive": { "Adobe GoLive": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" } "meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
}, },
"Advanced Web Stats": { "Advanced Web Stats": {
"cats": [ 10 ], "cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ], "cats": [ 12 ],
"env": "^AUI$" "env": "^AUI$"
}, },
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": { "Ametys": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" }, "meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
}, },
"Apache": { "Apache": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" } "headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
}, },
"Apache JSPWiki": { "Apache JSPWiki": {
"cats": [ 8 ], "cats": [ 8 ],
@ -144,13 +149,17 @@
}, },
"Atlassian Confluence": { "Atlassian Confluence": {
"cats": [ 8 ], "cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence", "html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"Atlassian Jira": { "Atlassian Jira": {
"cats": [ 13 ], "cats": [ 13 ],
"env": "^jira$", "env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira", "script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"AWStats": { "AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" }, "meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": { "CO2Stats": {
"cats": [ 10 ], "cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php" "html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -484,11 +498,12 @@
"meta": { "generator": "Dokeos" }, "meta": { "generator": "Dokeos" },
"html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue", "html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue",
"headers": { "X-Powered-By": "Dokeos" }, "headers": { "X-Powered-By": "Dokeos" },
"implies": [ "PHP", "xajax", "jQuery", "CKEditor" ] "implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ]
}, },
"DokuWiki": { "DokuWiki": {
"cats": [ 8 ], "cats": [ 8 ],
"meta": { "generator": "DokuWiki" }, "meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"DotNetNuke": { "DotNetNuke": {
@ -505,13 +520,13 @@
}, },
"DreamWeaver": { "DreamWeaver": {
"cats": [ 20 ], "cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)" "html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
}, },
"Drupal": { "Drupal": {
"cats": [ 1 ], "cats": [ 1 ],
"script": "drupal\\.js", "script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/", "html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" }, "headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$", "env": "^Drupal$",
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
@ -605,7 +620,7 @@
}, },
"FrontPage": { "FrontPage": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" }, "meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office" "html": "<html[^>]+urn:schemas-microsoft-com:office:office"
}, },
"FWP": { "FWP": {
@ -663,7 +678,7 @@
}, },
"Google Maps": { "Google Maps": {
"cats": [ 5 ], "cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)" "script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
}, },
"Google Sites": { "Google Sites": {
"cats": [ 1 ], "cats": [ 1 ],
@ -739,7 +754,7 @@
}, },
"IIS": { "IIS": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "IIS" }, "headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ] "implies": [ "Windows Server" ]
}, },
"ImpressCMS": { "ImpressCMS": {
@ -777,7 +792,12 @@
}, },
"iWeb": { "iWeb": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "^iWeb" } "meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
}, },
"Jalios": { "Jalios": {
"cats": [ 1 ], "cats": [ 1 ],
@ -792,6 +812,21 @@
"script": "jit.*\\.js", "script": "jit.*\\.js",
"env": "^\\$jit$" "env": "^\\$jit$"
}, },
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": { "Jirafe": {
"cats": [ 10, 32 ], "cats": [ 10, 32 ],
"script": "/jirafe\\.js", "script": "/jirafe\\.js",
@ -828,12 +863,13 @@
}, },
"jQuery": { "jQuery": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "jquery.*\\.js", "script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$" "env": "^jQuery$"
}, },
"jQuery Mobile": { "jQuery Mobile": {
"cats": [ 26 ], "cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js" "script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
}, },
"jQuery Sparklines": { "jQuery Sparklines": {
"cats": [ 25 ], "cats": [ 25 ],
@ -875,6 +911,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Kentico CMS" } "meta": { "generator": "Kentico CMS" }
}, },
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": { "KISSmetrics": {
"cats": [ 10 ], "cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$" "env": "^KM_COOKIE_DOMAIN$"
@ -978,13 +1018,13 @@
"Microsoft ASP.NET": { "Microsoft ASP.NET": {
"cats": [ 18 ], "cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE", "html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" }, "headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ] "implies": [ "IIS", "Windows Server" ]
}, },
"Microsoft SharePoint": { "Microsoft SharePoint": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" }, "meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" } "headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
}, },
"MiniBB": { "MiniBB": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1007,7 +1047,7 @@
}, },
"Modernizr": { "Modernizr": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "modernizr.*\\.js", "script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$" "env": "^Modernizr$"
}, },
"MODx": { "MODx": {
@ -1017,16 +1057,46 @@
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" }, "headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": { "MoinMoin": {
"cats": [ 8 ], "cats": [ 8 ],
"script": "moin.+/common/js/common\\.js", "script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$", "env": "^show_switch2gui$",
"implies": [ "Python" ] "implies": [ "Python" ]
}, },
"Mojolicious": { "Mojolicious": {
"cats": [ 18 ], "cats": [ 18 ],
"headers": { "x-powered-by": "mojolicious" }, "headers": { "x-powered-by": "mojolicious" },
"implies": [ "PERL" ] "implies": [ "Perl" ]
}, },
"Mollom": { "Mollom": {
"cats": [ 16 ], "cats": [ 16 ],
@ -1126,6 +1196,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"html": "<meta[^>]+openEngine" "html": "<meta[^>]+openEngine"
}, },
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": { "OpenGSE": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "GSE" }, "headers": { "Server": "GSE" },
@ -1140,6 +1216,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" } "headers": { "X-Powered-By": "OpenNemas" }
}, },
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": { "OpenText Web Solutions": {
"cats": [ 1 ], "cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions", "html": "<!--[^>]+published by Open Text Web Solutions",
@ -1149,6 +1229,10 @@
"cats": [ 10 ], "cats": [ 10 ],
"env": "^optimizely$" "env": "^optimizely$"
}, },
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": { "Oracle Recommendations On Demand": {
"cats": [ 10 ], "cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js" "script": "atgsvcs.+atgsvcs\\.js"
@ -1156,7 +1240,7 @@
"osCommerce": { "osCommerce": {
"cats": [ 6 ], "cats": [ 6 ],
"html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)", "html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)",
"header": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" } "headers": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
}, },
"osCSS": { "osCSS": {
"cats": [ 6 ], "cats": [ 6 ],
@ -1195,7 +1279,7 @@
}, },
"PHP": { "PHP": {
"cats": [ 27 ], "cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" }, "headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$" "url": "\\.php$"
}, },
"phpAlbum": { "phpAlbum": {
@ -1302,7 +1386,7 @@
}, },
"Prototype": { "Prototype": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js", "script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$" "env": "^Prototype$"
}, },
"Protovis": { "Protovis": {
@ -1316,7 +1400,8 @@
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"Python": { "Python": {
"cats": [ 27 ] "cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
}, },
"Quantcast": { "Quantcast": {
"cats": [ 10 ], "cats": [ 10 ],
@ -1339,8 +1424,8 @@
}, },
"RBS Change": { "RBS Change": {
"cats": [ 1, 6 ], "cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=", "html": "<html[^>]+xmlns:change=",
"meta": { "generator": "^RBS Change" }, "meta": { "generator": "RBS Change" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"RCMS": { "RCMS": {
@ -1355,7 +1440,7 @@
}, },
"Red Hat": { "Red Hat": {
"cats": [ 28 ], "cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" } "headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
}, },
"Reddit": { "Reddit": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1405,6 +1490,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" } "meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
}, },
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": { "script.aculo.us": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js", "script": "(scriptaculous|protoaculous)\\.js",
@ -1427,12 +1518,6 @@
"script": "w\\.sharethis\\.com/", "script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$" "env": "^SHARETHIS$"
}, },
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": { "Shopalize": {
"cats": [ 5, 10 ], "cats": [ 5, 10 ],
"env": "^Shopalize$" "env": "^Shopalize$"
@ -1515,7 +1600,7 @@
}, },
"SPIP": { "SPIP": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "SPIP" }, "meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" } "headers": { "X-Spip-Cache": ".*" }
}, },
"SQL Buddy": { "SQL Buddy": {
@ -1529,7 +1614,8 @@
"Squiz Matrix": { "Squiz Matrix": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Squiz Matrix" }, "meta": { "generator": "Squiz Matrix" },
"html": " Running (MySource|Squiz) Matrix", "X-Powered-By": "Squiz Matrix", "html": " Running (MySource|Squiz) Matrix",
"headers": { "X-Powered-By": "Squiz Matrix" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"StatCounter": { "StatCounter": {
@ -1545,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js", "script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$" "env": "^sublimevideo$"
}, },
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": { "SWFObject": {
"cats": [ 19 ], "cats": [ 19 ],
"script": "swfobject.*\\.js", "script": "swfobject.*\\.js",
@ -1798,7 +1896,7 @@
}, },
"WordPress": { "WordPress": {
"cats": [ 1, 11 ], "cats": [ 1, 11 ],
"meta": { "generator": "WordPress" }, "meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content", "html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$", "env": "^wp_username$",
"implies": [ "PHP" ] "implies": [ "PHP" ]

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns * Parse apps.json patterns
*/ */
var parse = function(patterns) { var parse = function(patterns) {
var parsed = []; var
attrs,
parsed = []
;
// Convert single patterns to an array // Convert single patterns to an array
if ( typeof patterns === 'string' ) { if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
} }
patterns.map(function(pattern) { patterns.map(function(pattern) {
parsed.push({ attrs = {};
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
}); });
parsed.push(attrs);
}); });
return parsed; return parsed;

@ -31,7 +31,8 @@
"29": "search-engines", "29": "search-engines",
"30": "web-mail", "30": "web-mail",
"31": "cdn", "31": "cdn",
"32": "marketing-automation" "32": "marketing-automation",
"33": "web-server-extension"
}, },
"apps": { "apps": {
"1C-Bitrix": { "1C-Bitrix": {
@ -73,7 +74,7 @@
}, },
"Adobe GoLive": { "Adobe GoLive": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" } "meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
}, },
"Advanced Web Stats": { "Advanced Web Stats": {
"cats": [ 10 ], "cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ], "cats": [ 12 ],
"env": "^AUI$" "env": "^AUI$"
}, },
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": { "Ametys": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" }, "meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
}, },
"Apache": { "Apache": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" } "headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
}, },
"Apache JSPWiki": { "Apache JSPWiki": {
"cats": [ 8 ], "cats": [ 8 ],
@ -144,13 +149,17 @@
}, },
"Atlassian Confluence": { "Atlassian Confluence": {
"cats": [ 8 ], "cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence", "html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"Atlassian Jira": { "Atlassian Jira": {
"cats": [ 13 ], "cats": [ 13 ],
"env": "^jira$", "env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira", "script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"AWStats": { "AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" }, "meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": { "CO2Stats": {
"cats": [ 10 ], "cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php" "html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -484,11 +498,12 @@
"meta": { "generator": "Dokeos" }, "meta": { "generator": "Dokeos" },
"html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue", "html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue",
"headers": { "X-Powered-By": "Dokeos" }, "headers": { "X-Powered-By": "Dokeos" },
"implies": [ "PHP", "xajax", "jQuery", "CKEditor" ] "implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ]
}, },
"DokuWiki": { "DokuWiki": {
"cats": [ 8 ], "cats": [ 8 ],
"meta": { "generator": "DokuWiki" }, "meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"DotNetNuke": { "DotNetNuke": {
@ -505,13 +520,13 @@
}, },
"DreamWeaver": { "DreamWeaver": {
"cats": [ 20 ], "cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)" "html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
}, },
"Drupal": { "Drupal": {
"cats": [ 1 ], "cats": [ 1 ],
"script": "drupal\\.js", "script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/", "html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" }, "headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$", "env": "^Drupal$",
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
@ -605,7 +620,7 @@
}, },
"FrontPage": { "FrontPage": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" }, "meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office" "html": "<html[^>]+urn:schemas-microsoft-com:office:office"
}, },
"FWP": { "FWP": {
@ -663,7 +678,7 @@
}, },
"Google Maps": { "Google Maps": {
"cats": [ 5 ], "cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)" "script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
}, },
"Google Sites": { "Google Sites": {
"cats": [ 1 ], "cats": [ 1 ],
@ -739,7 +754,7 @@
}, },
"IIS": { "IIS": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "IIS" }, "headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ] "implies": [ "Windows Server" ]
}, },
"ImpressCMS": { "ImpressCMS": {
@ -777,7 +792,12 @@
}, },
"iWeb": { "iWeb": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "^iWeb" } "meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
}, },
"Jalios": { "Jalios": {
"cats": [ 1 ], "cats": [ 1 ],
@ -792,6 +812,21 @@
"script": "jit.*\\.js", "script": "jit.*\\.js",
"env": "^\\$jit$" "env": "^\\$jit$"
}, },
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": { "Jirafe": {
"cats": [ 10, 32 ], "cats": [ 10, 32 ],
"script": "/jirafe\\.js", "script": "/jirafe\\.js",
@ -828,12 +863,13 @@
}, },
"jQuery": { "jQuery": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "jquery.*\\.js", "script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$" "env": "^jQuery$"
}, },
"jQuery Mobile": { "jQuery Mobile": {
"cats": [ 26 ], "cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js" "script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
}, },
"jQuery Sparklines": { "jQuery Sparklines": {
"cats": [ 25 ], "cats": [ 25 ],
@ -875,6 +911,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Kentico CMS" } "meta": { "generator": "Kentico CMS" }
}, },
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": { "KISSmetrics": {
"cats": [ 10 ], "cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$" "env": "^KM_COOKIE_DOMAIN$"
@ -978,13 +1018,13 @@
"Microsoft ASP.NET": { "Microsoft ASP.NET": {
"cats": [ 18 ], "cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE", "html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" }, "headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ] "implies": [ "IIS", "Windows Server" ]
}, },
"Microsoft SharePoint": { "Microsoft SharePoint": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" }, "meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" } "headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
}, },
"MiniBB": { "MiniBB": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1007,7 +1047,7 @@
}, },
"Modernizr": { "Modernizr": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "modernizr.*\\.js", "script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$" "env": "^Modernizr$"
}, },
"MODx": { "MODx": {
@ -1017,16 +1057,46 @@
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" }, "headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": { "MoinMoin": {
"cats": [ 8 ], "cats": [ 8 ],
"script": "moin.+/common/js/common\\.js", "script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$", "env": "^show_switch2gui$",
"implies": [ "Python" ] "implies": [ "Python" ]
}, },
"Mojolicious": { "Mojolicious": {
"cats": [ 18 ], "cats": [ 18 ],
"headers": { "x-powered-by": "mojolicious" }, "headers": { "x-powered-by": "mojolicious" },
"implies": [ "PERL" ] "implies": [ "Perl" ]
}, },
"Mollom": { "Mollom": {
"cats": [ 16 ], "cats": [ 16 ],
@ -1126,6 +1196,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"html": "<meta[^>]+openEngine" "html": "<meta[^>]+openEngine"
}, },
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": { "OpenGSE": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "GSE" }, "headers": { "Server": "GSE" },
@ -1140,6 +1216,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" } "headers": { "X-Powered-By": "OpenNemas" }
}, },
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": { "OpenText Web Solutions": {
"cats": [ 1 ], "cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions", "html": "<!--[^>]+published by Open Text Web Solutions",
@ -1149,6 +1229,10 @@
"cats": [ 10 ], "cats": [ 10 ],
"env": "^optimizely$" "env": "^optimizely$"
}, },
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": { "Oracle Recommendations On Demand": {
"cats": [ 10 ], "cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js" "script": "atgsvcs.+atgsvcs\\.js"
@ -1156,7 +1240,7 @@
"osCommerce": { "osCommerce": {
"cats": [ 6 ], "cats": [ 6 ],
"html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)", "html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)",
"header": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" } "headers": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
}, },
"osCSS": { "osCSS": {
"cats": [ 6 ], "cats": [ 6 ],
@ -1195,7 +1279,7 @@
}, },
"PHP": { "PHP": {
"cats": [ 27 ], "cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" }, "headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$" "url": "\\.php$"
}, },
"phpAlbum": { "phpAlbum": {
@ -1302,7 +1386,7 @@
}, },
"Prototype": { "Prototype": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js", "script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$" "env": "^Prototype$"
}, },
"Protovis": { "Protovis": {
@ -1316,7 +1400,8 @@
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"Python": { "Python": {
"cats": [ 27 ] "cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
}, },
"Quantcast": { "Quantcast": {
"cats": [ 10 ], "cats": [ 10 ],
@ -1339,8 +1424,8 @@
}, },
"RBS Change": { "RBS Change": {
"cats": [ 1, 6 ], "cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=", "html": "<html[^>]+xmlns:change=",
"meta": { "generator": "^RBS Change" }, "meta": { "generator": "RBS Change" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"RCMS": { "RCMS": {
@ -1355,7 +1440,7 @@
}, },
"Red Hat": { "Red Hat": {
"cats": [ 28 ], "cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" } "headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
}, },
"Reddit": { "Reddit": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1405,6 +1490,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" } "meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
}, },
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": { "script.aculo.us": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js", "script": "(scriptaculous|protoaculous)\\.js",
@ -1427,12 +1518,6 @@
"script": "w\\.sharethis\\.com/", "script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$" "env": "^SHARETHIS$"
}, },
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": { "Shopalize": {
"cats": [ 5, 10 ], "cats": [ 5, 10 ],
"env": "^Shopalize$" "env": "^Shopalize$"
@ -1515,7 +1600,7 @@
}, },
"SPIP": { "SPIP": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "SPIP" }, "meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" } "headers": { "X-Spip-Cache": ".*" }
}, },
"SQL Buddy": { "SQL Buddy": {
@ -1529,7 +1614,8 @@
"Squiz Matrix": { "Squiz Matrix": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Squiz Matrix" }, "meta": { "generator": "Squiz Matrix" },
"html": " Running (MySource|Squiz) Matrix", "X-Powered-By": "Squiz Matrix", "html": " Running (MySource|Squiz) Matrix",
"headers": { "X-Powered-By": "Squiz Matrix" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"StatCounter": { "StatCounter": {
@ -1545,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js", "script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$" "env": "^sublimevideo$"
}, },
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": { "SWFObject": {
"cats": [ 19 ], "cats": [ 19 ],
"script": "swfobject.*\\.js", "script": "swfobject.*\\.js",
@ -1798,7 +1896,7 @@
}, },
"WordPress": { "WordPress": {
"cats": [ 1, 11 ], "cats": [ 1, 11 ],
"meta": { "generator": "WordPress" }, "meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content", "html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$", "env": "^wp_username$",
"implies": [ "PHP" ] "implies": [ "PHP" ]

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns * Parse apps.json patterns
*/ */
var parse = function(patterns) { var parse = function(patterns) {
var parsed = []; var
attrs,
parsed = []
;
// Convert single patterns to an array // Convert single patterns to an array
if ( typeof patterns === 'string' ) { if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
} }
patterns.map(function(pattern) { patterns.map(function(pattern) {
parsed.push({ attrs = {};
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
}); });
parsed.push(attrs);
}); });
return parsed; return parsed;

@ -31,7 +31,8 @@
"29": "search-engines", "29": "search-engines",
"30": "web-mail", "30": "web-mail",
"31": "cdn", "31": "cdn",
"32": "marketing-automation" "32": "marketing-automation",
"33": "web-server-extension"
}, },
"apps": { "apps": {
"1C-Bitrix": { "1C-Bitrix": {
@ -73,7 +74,7 @@
}, },
"Adobe GoLive": { "Adobe GoLive": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" } "meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
}, },
"Advanced Web Stats": { "Advanced Web Stats": {
"cats": [ 10 ], "cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ], "cats": [ 12 ],
"env": "^AUI$" "env": "^AUI$"
}, },
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": { "Ametys": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" }, "meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
}, },
"Apache": { "Apache": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" } "headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
}, },
"Apache JSPWiki": { "Apache JSPWiki": {
"cats": [ 8 ], "cats": [ 8 ],
@ -144,13 +149,17 @@
}, },
"Atlassian Confluence": { "Atlassian Confluence": {
"cats": [ 8 ], "cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence", "html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"Atlassian Jira": { "Atlassian Jira": {
"cats": [ 13 ], "cats": [ 13 ],
"env": "^jira$", "env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira", "script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ] "implies": [ "Java" ]
}, },
"AWStats": { "AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" }, "meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": { "CO2Stats": {
"cats": [ 10 ], "cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php" "html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -331,7 +345,6 @@
"Contao": { "Contao": {
"cats": [ 1 ], "cats": [ 1 ],
"html": "(<!--.+powered by (TYPOlight|Contao)-->|<link[^>]+(typolight|contao)\\.css)", "html": "(<!--.+powered by (TYPOlight|Contao)-->|<link[^>]+(typolight|contao)\\.css)",
"meta": { "generator": "Contao" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"Contenido": { "Contenido": {
@ -489,7 +502,8 @@
}, },
"DokuWiki": { "DokuWiki": {
"cats": [ 8 ], "cats": [ 8 ],
"meta": { "generator": "DokuWiki" }, "meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"DotNetNuke": { "DotNetNuke": {
@ -506,13 +520,13 @@
}, },
"DreamWeaver": { "DreamWeaver": {
"cats": [ 20 ], "cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)" "html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
}, },
"Drupal": { "Drupal": {
"cats": [ 1 ], "cats": [ 1 ],
"script": "drupal\\.js", "script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/", "html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" }, "headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$", "env": "^Drupal$",
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
@ -606,7 +620,7 @@
}, },
"FrontPage": { "FrontPage": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" }, "meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office" "html": "<html[^>]+urn:schemas-microsoft-com:office:office"
}, },
"FWP": { "FWP": {
@ -664,7 +678,7 @@
}, },
"Google Maps": { "Google Maps": {
"cats": [ 5 ], "cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)" "script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
}, },
"Google Sites": { "Google Sites": {
"cats": [ 1 ], "cats": [ 1 ],
@ -740,7 +754,7 @@
}, },
"IIS": { "IIS": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "IIS" }, "headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ] "implies": [ "Windows Server" ]
}, },
"ImpressCMS": { "ImpressCMS": {
@ -778,7 +792,12 @@
}, },
"iWeb": { "iWeb": {
"cats": [ 20 ], "cats": [ 20 ],
"meta": { "generator": "^iWeb" } "meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
}, },
"Jalios": { "Jalios": {
"cats": [ 1 ], "cats": [ 1 ],
@ -793,6 +812,21 @@
"script": "jit.*\\.js", "script": "jit.*\\.js",
"env": "^\\$jit$" "env": "^\\$jit$"
}, },
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": { "Jirafe": {
"cats": [ 10, 32 ], "cats": [ 10, 32 ],
"script": "/jirafe\\.js", "script": "/jirafe\\.js",
@ -829,12 +863,13 @@
}, },
"jQuery": { "jQuery": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "jquery.*\\.js", "script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$" "env": "^jQuery$"
}, },
"jQuery Mobile": { "jQuery Mobile": {
"cats": [ 26 ], "cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js" "script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
}, },
"jQuery Sparklines": { "jQuery Sparklines": {
"cats": [ 25 ], "cats": [ 25 ],
@ -876,6 +911,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Kentico CMS" } "meta": { "generator": "Kentico CMS" }
}, },
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": { "KISSmetrics": {
"cats": [ 10 ], "cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$" "env": "^KM_COOKIE_DOMAIN$"
@ -979,13 +1018,13 @@
"Microsoft ASP.NET": { "Microsoft ASP.NET": {
"cats": [ 18 ], "cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE", "html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" }, "headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ] "implies": [ "IIS", "Windows Server" ]
}, },
"Microsoft SharePoint": { "Microsoft SharePoint": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" }, "meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" } "headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
}, },
"MiniBB": { "MiniBB": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1008,7 +1047,7 @@
}, },
"Modernizr": { "Modernizr": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "modernizr.*\\.js", "script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$" "env": "^Modernizr$"
}, },
"MODx": { "MODx": {
@ -1018,9 +1057,39 @@
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" }, "headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": { "MoinMoin": {
"cats": [ 8 ], "cats": [ 8 ],
"script": "moin.+/common/js/common\\.js", "script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$", "env": "^show_switch2gui$",
"implies": [ "Python" ] "implies": [ "Python" ]
}, },
@ -1127,6 +1196,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"html": "<meta[^>]+openEngine" "html": "<meta[^>]+openEngine"
}, },
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": { "OpenGSE": {
"cats": [ 22 ], "cats": [ 22 ],
"headers": { "Server": "GSE" }, "headers": { "Server": "GSE" },
@ -1141,6 +1216,10 @@
"cats": [ 1 ], "cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" } "headers": { "X-Powered-By": "OpenNemas" }
}, },
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": { "OpenText Web Solutions": {
"cats": [ 1 ], "cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions", "html": "<!--[^>]+published by Open Text Web Solutions",
@ -1150,6 +1229,10 @@
"cats": [ 10 ], "cats": [ 10 ],
"env": "^optimizely$" "env": "^optimizely$"
}, },
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": { "Oracle Recommendations On Demand": {
"cats": [ 10 ], "cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js" "script": "atgsvcs.+atgsvcs\\.js"
@ -1196,7 +1279,7 @@
}, },
"PHP": { "PHP": {
"cats": [ 27 ], "cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" }, "headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$" "url": "\\.php$"
}, },
"phpAlbum": { "phpAlbum": {
@ -1303,7 +1386,7 @@
}, },
"Prototype": { "Prototype": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js", "script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$" "env": "^Prototype$"
}, },
"Protovis": { "Protovis": {
@ -1317,7 +1400,8 @@
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"Python": { "Python": {
"cats": [ 27 ] "cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
}, },
"Quantcast": { "Quantcast": {
"cats": [ 10 ], "cats": [ 10 ],
@ -1340,8 +1424,8 @@
}, },
"RBS Change": { "RBS Change": {
"cats": [ 1, 6 ], "cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=", "html": "<html[^>]+xmlns:change=",
"meta": { "generator": "^RBS Change" }, "meta": { "generator": "RBS Change" },
"implies": [ "PHP" ] "implies": [ "PHP" ]
}, },
"RCMS": { "RCMS": {
@ -1356,7 +1440,7 @@
}, },
"Red Hat": { "Red Hat": {
"cats": [ 28 ], "cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" } "headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
}, },
"Reddit": { "Reddit": {
"cats": [ 2 ], "cats": [ 2 ],
@ -1406,6 +1490,12 @@
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" } "meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
}, },
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": { "script.aculo.us": {
"cats": [ 12 ], "cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js", "script": "(scriptaculous|protoaculous)\\.js",
@ -1428,12 +1518,6 @@
"script": "w\\.sharethis\\.com/", "script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$" "env": "^SHARETHIS$"
}, },
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": { "Shopalize": {
"cats": [ 5, 10 ], "cats": [ 5, 10 ],
"env": "^Shopalize$" "env": "^Shopalize$"
@ -1516,7 +1600,7 @@
}, },
"SPIP": { "SPIP": {
"cats": [ 1 ], "cats": [ 1 ],
"meta": { "generator": "SPIP" }, "meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" } "headers": { "X-Spip-Cache": ".*" }
}, },
"SQL Buddy": { "SQL Buddy": {
@ -1547,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js", "script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$" "env": "^sublimevideo$"
}, },
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": { "SWFObject": {
"cats": [ 19 ], "cats": [ 19 ],
"script": "swfobject.*\\.js", "script": "swfobject.*\\.js",
@ -1800,7 +1896,7 @@
}, },
"WordPress": { "WordPress": {
"cats": [ 1, 11 ], "cats": [ 1, 11 ],
"meta": { "generator": "WordPress" }, "meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content", "html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$", "env": "^wp_username$",
"implies": [ "PHP" ] "implies": [ "PHP" ]

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns * Parse apps.json patterns
*/ */
var parse = function(patterns) { var parse = function(patterns) {
var parsed = []; var
attrs,
parsed = []
;
// Convert single patterns to an array // Convert single patterns to an array
if ( typeof patterns === 'string' ) { if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
} }
patterns.map(function(pattern) { patterns.map(function(pattern) {
parsed.push({ attrs = {};
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
}); });
parsed.push(attrs);
}); });
return parsed; return parsed;

Loading…
Cancel
Save