diff --git a/drivers/bookmarklet/js/wappalyzer.js b/drivers/bookmarklet/js/wappalyzer.js index 2bc0c3165..a80183a9d 100644 --- a/drivers/bookmarklet/js/wappalyzer.js +++ b/drivers/bookmarklet/js/wappalyzer.js @@ -28,7 +28,10 @@ var wappalyzer = (function() { * Parse apps.json patterns */ var parse = function(patterns) { - var parsed = []; + var + attrs, + parsed = [] + ; // Convert single patterns to an array if ( typeof patterns === 'string' ) { @@ -36,9 +39,22 @@ var wappalyzer = (function() { } patterns.map(function(pattern) { - parsed.push({ - regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression - }); + attrs = {}; + + 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; diff --git a/drivers/bookmarklet/json b/drivers/bookmarklet/json index d1f54fbe1..e13b9b763 100644 --- a/drivers/bookmarklet/json +++ b/drivers/bookmarklet/json @@ -31,7 +31,8 @@ "29": "search-engines", "30": "web-mail", "31": "cdn", - "32": "marketing-automation" + "32": "marketing-automation", + "33": "web-server-extension" }, "apps": { "1C-Bitrix": { @@ -73,7 +74,7 @@ }, "Adobe GoLive": { "cats": [ 20 ], - "meta": { "generator": "Adobe GoLive" } + "meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" } }, "Advanced Web Stats": { "cats": [ 10 ], @@ -84,6 +85,10 @@ "cats": [ 12 ], "env": "^AUI$" }, + "Amaya": { + "cats": [ 20 ], + "meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" } + }, "Ametys": { "cats": [ 1 ], "meta": { "generator": "(Ametys|Anyware Technologies)" }, @@ -112,7 +117,7 @@ }, "Apache": { "cats": [ 22 ], - "headers": { "Server": "(Apache($|[^-])|HTTPD)" } + "headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" } }, "Apache JSPWiki": { "cats": [ 8 ], @@ -144,13 +149,17 @@ }, "Atlassian Confluence": { "cats": [ 8 ], - "html": "Powered by ]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence ([\\d\\.]+))?\\;version:\\2", + "headers": { "X-Confluence-Request-Time": ".*" }, + "meta": { "confluence-request-time": ".*" }, "implies": [ "Java" ] }, "Atlassian Jira": { "cats": [ 13 ], "env": "^jira$", - "html": "Powered by ]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4", "implies": [ "Java" ] }, "AWStats": { @@ -297,6 +306,11 @@ "meta": { "generator": "CMS Made Simple" }, "implies": [ "PHP" ] }, + "CMSimple": { + "cats": [ 1 ], + "meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" }, + "implies": [ "PHP" ] + }, "CO2Stats": { "cats": [ 10 ], "html": "src=[^>]+co2stats\\.com/propres\\.php" @@ -484,11 +498,12 @@ "meta": { "generator": "Dokeos" }, "html": "Portal ]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue", "headers": { "X-Powered-By": "Dokeos" }, - "implies": [ "PHP", "xajax", "jQuery", "CKEditor" ] + "implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ] }, "DokuWiki": { "cats": [ 8 ], - "meta": { "generator": "DokuWiki" }, + "meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" }, + "headers": { "Set-Cookie": "DokuWiki=" }, "implies": [ "PHP" ] }, "DotNetNuke": { @@ -505,13 +520,13 @@ }, "DreamWeaver": { "cats": [ 20 ], - "html": "(|]+(typolight|contao)\\.css)", - "meta": { "generator": "Contao" }, "implies": [ "PHP" ] }, "Contenido": { @@ -489,7 +502,8 @@ }, "DokuWiki": { "cats": [ 8 ], - "meta": { "generator": "DokuWiki" }, + "meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" }, + "headers": { "Set-Cookie": "DokuWiki=" }, "implies": [ "PHP" ] }, "DotNetNuke": { @@ -506,13 +520,13 @@ }, "DreamWeaver": { "cats": [ 20 ], - "html": "(