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": "(