diff --git a/drivers/firefox/install.rdf b/drivers/firefox/install.rdf
index 65be9f26b..3f7cd07c0 100644
--- a/drivers/firefox/install.rdf
+++ b/drivers/firefox/install.rdf
@@ -3,7 +3,7 @@
wappalyzer@crunchlabz.com
- 2.2.1
+ 2.2.2
2
true
@@ -23,7 +23,7 @@
Wappalyzer
Identifies software on the web.
chrome://wappalyzer/icon.png
- Elbert Foo
+ Elbert Alias
http://wappalyzer.com
diff --git a/share/images/icons/dojo.png b/share/images/icons/dojo.png
deleted file mode 100644
index 617adf5e1..000000000
Binary files a/share/images/icons/dojo.png and /dev/null differ
diff --git a/share/js/apps.js b/share/js/apps.js
index fddfbaaed..26f32a4fd 100644
--- a/share/js/apps.js
+++ b/share/js/apps.js
@@ -48,6 +48,7 @@
'Alloy': { cats: [ 12 ], env: /^AUI$/ },
'Ametys': { cats: [ 1 ], meta: { 'generator': /(Ametys|Anyware Technologies)/i }, script: /STools.js/, implies: [ 'Java' ] },
'Amiro.CMS': { cats: [ 1 ], meta: { 'generator': /Amiro/i }, html: /system_js\.php(\?|\-)script=/, implies: [ 'PHP' ] },
+ 'AMPcms': { cats: [ 1 ], headers: { 'X-AMP-Version': /.*/i, 'Set-Cookie': /AMP=/ }, env: /amp_js_init/, implies: [ 'PHP' ] },
'AOLserver': { cats: [ 22 ], headers: { 'Server': /AOLserver/i } },
'Apache': { cats: [ 22 ], headers: { 'Server': /(Apache($|[^-])|HTTPD)/i } },
'Apache Tomcat': { cats: [ 22 ], headers: { 'Server': /Apache-Coyote/i } },
@@ -144,6 +145,7 @@
'Gauges': { cats: [ 10 ], html: /t\.src = '\/\/secure\.gaug\.es\/track\.js/, env: /^_gauges$/ },
'Gentoo' : { cats: [ 28 ], headers: { 'X-Powered-By': /-?gentoo/} },
'Get Satisfaction': { cats: [ 13 ], html: /var feedback_widget = new GSFN\.feedback_widget\(feedback_widget_options\)/ },
+ 'GetSimple CMS': { cats: [ 1 ], meta: {'generator': /GetSimple/ }, implies: [ 'PHP' ] },
'Google Analytics': { cats: [ 10 ], script: /(\.google\-analytics\.com\/ga\.js|google-analytics\.com\/urchin\.js)/, env: /^gaGlobal$/ },
'Google App Engine': { cats: [ 22 ], headers: { 'Server': /Google Frontend/i } },
'Google Font API': { cats: [ 17 ], script: /googleapis.com\/.+webfont/, html: /]* href=("|')http:\/\/fonts\.googleapis\.com/, env: /^WebFont/ },
@@ -158,6 +160,9 @@
'Highcharts': { cats: [ 25 ], script: /highcharts.*\.js/, env: /^Highcharts$/ },
'Hotaru CMS': { cats: [ 1 ], meta: { 'generator': /Hotaru CMS/i } },
'Hybris': { cats: [ 6 ], html: /\/sys_master\/|\/hybr\//, header: { 'Set-Cookie': /_hybris/ }, implies: [ 'Java' ] },
+ 'IBM HTTP Server': { cats: [ 22 ], headers: { 'Server': /IBM_HTTP_Server/i } },
+ 'IBM WebSphere Portal': { cats: [ 1 ], headers: { 'IBM-Web2-Location': /.*/ }, url: /\/wps\//, implies: [ 'Java' ] },
+ 'IBM WebSphere Commerce': { cats: [ 6 ], url: /\/wcs\//, implies: [ 'Java' ] },
'IIS': { cats: [ 22 ], headers: { 'Server': /IIS/i }, implies: [ 'Windows Server' ] },
'ImpressPages': { cats: [ 1 ], meta: { 'generator': /ImpressPages/i }, implies: [ 'PHP' ] },
'Indexhibit': { cats: [ 1 ], html: /<(link|a href) [^>]+ndxz-studio/i, implies: [ 'PHP', 'Apache' ] },
@@ -166,7 +171,7 @@
'IPB': { cats: [ 2 ], script: /jscripts\/ips_/, env: /^IPBoard/, html: /]+ipb_[^>]+\.css/ },
'iWeb': { cats: [ 20 ], meta: { 'generator': /iWeb/i } },
'Jalios': { cats: [ 1 ], meta: { 'generator': /Jalios/i } },
- 'Java': { cats: [ 27 ] },
+ 'Java': { cats: [ 27 ], headers: { 'Set-Cookie': /JSESSIONID/ } },
'Javascript Infovis Toolkit': { cats: [ 25 ], script: /jit.*\.js/, env: /^\$jit$/ },
'Jo': { cats: [ 26, 12 ], env: /^jo(Cache|DOM|Event)$/ },
'JobberBase': { cats: [ 19 ], meta: { 'generator': /Jobberbase/i }, env: /^Jobber$/ },
@@ -288,6 +293,7 @@
'Snoobi': { cats: [ 10 ], script: /snoobi\.com\/snoop\.php/ },
'SOBI 2': { cats: [ 19 ], html: /(]* class=("|')sobi2)/i },
'SoundManager': { cats: [ 12 ], env: /^(SoundManager|BaconPlayer)$/ },
+ 'SPDY': { cats: [ 19 ], headers: { 'X-Firefox-Spdy': /.*/ } },
'SPIP': { cats: [ 1 ], meta: { 'generator': /SPIP/i }, headers: { 'X-Spip-Cache': /.*/ } },
'SQL Buddy': { cats: [ 3 ], html: /(
SQL Buddy<\/title>|<[^>]+onclick=("|')sideMainClick\(("|')home\.php)/i },
'Squarespace': { cats: [ 1 ], html: /Squarespace\.Constants\.CURRENT_MODULE_ID/i },
@@ -298,7 +304,7 @@
'swift.engine': { cats: [ 1 ], headers: { 'X-Powered-By': /swift\.engine/ } },
'Swiftlet': { cats: [ 18 ], meta: { 'generator': /Swiftlet/i }, html: /Powered by ]+Swiftlet/i, headers: { 'X-Swiftlet-Cache': /.*/, 'X-Powered-By': /Swiftlet/, 'X-Generator': /Swiftlet/ }, implies: [ 'PHP' ] },
'Textpattern CMS': { cats: [ 1 ], meta: { 'generator': /Textpattern/i } },
- 'three.js': { cats: [ 25 ], script: /three.js/, env: /^THREE$/ },
+ 'three.js': { cats: [ 25 ], script: /three.js/i, env: /^THREE$/ },
'Tiki Wiki CMS Groupware': { cats: [ 1, 2, 8, 11, 13 ], script: /(\/|_)tiki/, meta: { 'generator': /^Tiki/i } },
'Timeplot': { cats: [ 25 ], script: /timeplot.*\.js/, env: /^Timeplot$/ },
'TinyMCE': { cats: [ 24 ], env: /^tinyMCE$/ },
@@ -341,7 +347,7 @@
'WikkaWiki': { cats: [ 8 ], meta: { 'generator': /WikkaWiki/ }, html: /Powered by ]+WikkaWiki/i },
'Windows Server': { cats: [ 28 ], headers: { 'Server': /Win32/i } },
'Wink': { cats: [ 26, 12 ], script: /(\_base\/js\/base|wink).*\.js/i, env: /^wink$/ },
- 'Wolf CMS': { cats: [ 1 ], html: /]+wolfcms.org.+Wolf CMS.+inside/i },
+ 'Wolf CMS': { cats: [ 1 ], html: /(]+wolfcms.org.+Wolf CMS.+inside|Thank you for using ]+>Wolf CMS)/i },
'Woopra': { cats: [ 10 ], script: /static\.woopra\.com/ },
'WordPress': { cats: [ 1, 11 ], meta: { 'generator': /WordPress/i }, html: /]+wp-content/i, env: /^wp_username$/, implies: [ 'PHP' ] },
'Xajax': { cats: [ 12 ], script: /xajax_core.*\.js/i },
diff --git a/v1/chrome.manifest b/v1/chrome.manifest
deleted file mode 100644
index a8be77a4a..000000000
--- a/v1/chrome.manifest
+++ /dev/null
@@ -1,5 +0,0 @@
-content wappalyzer chrome/content/
-locale wappalyzer en-US chrome/locale/en-US/
-skin wappalyzer classic/1.0 chrome/skin/
-
-overlay chrome://browser/content/browser.xul chrome://wappalyzer/content/wappalyzer.xul
diff --git a/v1/chrome/content/apps.js b/v1/chrome/content/apps.js
deleted file mode 100644
index 892b6deab..000000000
--- a/v1/chrome/content/apps.js
+++ /dev/null
@@ -1,260 +0,0 @@
-if ( typeof wappalyzer != 'undefined' ) {
- wappalyzer.cats = {
- 1: { name: 'CMS', plural: 'CMS' },
- 2: { name: 'Message Board', plural: 'Message Boards' },
- 3: { name: 'Database manager', plural: 'Database managers' },
- 4: { name: 'Documentation tool', plural: 'Documentation tools' },
- 5: { name: 'Widget', plural: 'Widgets' },
- 6: { name: 'Web shop', plural: 'Web shops' },
- 7: { name: 'Photo gallery', plural: 'Photo galleries' },
- 8: { name: 'Wiki', plural: 'Wikis' },
- 9: { name: 'Hosting panel', plural: 'Hosting panels' },
- 10: { name: 'Analytics', plural: 'Analytics' },
- 11: { name: 'Blog', plural: 'Blogs' },
- 12: { name: 'JavaScript framework', plural: 'JavaScript frameworks' },
- 13: { name: 'Issue tracker', plural: 'Issue trackers' },
- 14: { name: 'Video Player', plural: 'Video Players' },
- 15: { name: 'Comment System', plural: 'Comment Systems' },
- 16: { name: 'CAPTCHA', plural: 'CAPTCHAs' },
- 17: { name: 'Font script', plural: 'Font scripts' },
- 18: { name: 'Web framework', plural: 'Web frameworks' },
- 19: { name: 'Miscellaneous', plural: 'Miscellaneous' },
- 20: { name: 'Editor', plural: 'Editors' },
- 21: { name: 'LMS', plural: 'LMS' },
- 22: { name: 'Web server', plural: 'Web servers' },
- 23: { name: 'Cache tool', plural: 'Cache tools' },
- 24: { name: 'Rich text editor', plural: 'Rich text editors' },
- 25: { name: 'Javascript Graphics', plural: 'Javascript Graphics' },
- 26: { name: 'Mobile framework', plural: 'Mobile frameworks' }
- };
-
- wappalyzer.apps = {
- '1C-Bitrix': { cats: { 1: 1 }, html: /]+components\/bitrix/i, script: /1c\-bitrix/i },
- '2z Project': { cats: { 1: 1 }, meta: { 'generator': /2z project/i } },
- 'AddThis': { cats: { 1: 5 }, script: /addthis\.com\/js/ },
- 'Adobe GoLive': { cats: { 1: 20 }, meta: { 'generator': /Adobe GoLive/i } },
- 'Advanced Web Stats': { cats: { 1: 10 }, html: /aws.src = [^<]+caphyon\-analytics/i },
- 'Amiro.CMS': { cats: { 1: 1 }, meta: { 'generator': /Amiro/i } },
- 'Apache': { cats: { 1: 22 }, headers: { 'Server': /Apache/i } },
- 'Apache Tomcat': { cats: { 1: 22 }, headers: { 'Server': /Apache-Coyote/i } },
- 'Atlassian Confluence': { cats: { 1: 8 }, html: /Powered by ]+banshee-php\.org/i },
- 'Backbone.js': { cats: { 1: 12 }, script: /backbone.*\.js/, env: /^Backbone$/ },
- 'BIGACE': { cats: { 1: 1 }, meta: { 'generator': /BIGACE/ }, html: /Powered by ]+BIGACE||]*(osCsid|cPath)/i },
- 'osCSS': { cats: { 1: 6 }, html: /]*\/papaya-themes\//i },
- 'PHP-Fusion': { cats: { 1: 1 }, html: /Powered by ]+php-fusion/i },
- 'PHP-Nuke': { cats: { 1: 2 }, meta: { 'generator': /PHP-Nuke/i }, html: /<[^>]+Powered by PHP\-Nuke/i },
- 'phpBB': { cats: { 1: 2 }, meta: { 'copyright': /phpBB Group/ }, html: /Powered by (]+)?phpBB/i },
- 'phpDocumentor': { cats: { 1: 4 }, html: /
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- &wappalyzer.customBody;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/v1/chrome/content/wappalyzer.js b/v1/chrome/content/wappalyzer.js
deleted file mode 100644
index aa0f7bdc3..000000000
--- a/v1/chrome/content/wappalyzer.js
+++ /dev/null
@@ -1,675 +0,0 @@
-// Wappalyzer by ElbertF 2009 http://elbertf.com
-
-var wappalyzer = (function() {
- var self = {
- apps: {},
- appsDetected: 0,
- browser: false,
- cats: {},
- checkUnique: {},
- currentTab: false,
- customApps: '',
- debug: false,
- enableTracking: true,
- githubUrl: 'https://github.com/ElbertF/Wappalyzer',
- history: {},
- hitCount: 0,
- homeUrl: 'http://wappalyzer.com/',
- hoverTimeout: false,
- newInstall: false,
- popupOnHover: true,
- prevUrl: '',
- prefs: {},
- regexBlacklist: /(dev\.|\/admin|\.local)/,
- regexDomain: /^[a-z0-9._\-]+\.[a-z]+/,
- req: false,
- request: false,
- showApps: 1,
- showCats: [],
- strings: {},
- twitterUrl: 'https://twitter.com/Wappalyzer',
- version: '',
-
- init: function() {
- self.log('init');
-
- self.browser = gBrowser;
-
- self.strings = document.getElementById('wappalyzer-strings');
-
- // Preferences
- self.prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefService).getBranch('wappalyzer.');
-
- self.prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);
- self.prefs.addObserver('', wappalyzer, false);
-
- self.showApps = self.prefs.getIntPref( 'showApps');
- self.customApps = self.prefs.getCharPref('customApps');
- self.debug = self.prefs.getBoolPref('debug');
- self.enableTracking = self.prefs.getBoolPref('enableTracking');
- self.popupOnHover = self.prefs.getBoolPref('popupOnHover');
- self.newInstall = self.prefs.getBoolPref('newInstall');
- self.version = self.prefs.getCharPref('version');
-
- var i = 0;
-
- while ( ++ i ) {
- try {
- self.showCats[i] = self.prefs.getBoolPref('cat' + i);
- } catch (e) {
- break;
- }
- }
-
- var locationPref = self.prefs.getIntPref('location');
-
- self.moveLocation(locationPref);
-
- // Open page after installation
- if ( self.newInstall ) {
- self.prefs.setBoolPref('newInstall', false);
-
- gBrowser.addEventListener('DOMContentLoaded', self.installSuccess, false);
- } else {
- // Open page after upgrade
- try {
- var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
-
- var enabledItems = prefs.getCharPref('extensions.enabledAddons');
- var version = enabledItems.replace(/(^.*wappalyzer[^:]+:)([^,]+),.*$/, '$2');
-
- if ( version && self.version != version ) {
- gBrowser.addEventListener('DOMContentLoaded', self.upgradeSuccess, false);
-
- self.version = version;
-
- self.prefs.setCharPref('version', self.version);
- }
- }
- catch(e) { }
- }
-
- // Listen messages sent from the content process
- if ( typeof messageManager != 'undefined' ) {
- messageManager.addMessageListener('wappalyzer:onPageLoad', self.onContentPageLoad);
-
- messageManager.loadFrameScript('chrome://wappalyzer/content/content.js', true);
- }
-
- // Listen for URL changes
- self.browser.addProgressListener(self.urlChange, Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);
-
- // Listen for page loads
- self.browser.addEventListener('DOMContentLoaded', self.onPageLoad, true);
-
- self.evaluateCustomApps();
- },
-
- // Log messages to console
- log: function(message) {
- if ( self.debug && message ) {
- var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
-
- consoleService.logStringMessage("Wappalyzer: " + message);
- }
- },
-
- // Listen for preference changes
- observe: function(subject, topic, data) {
- if ( topic != 'nsPref:changed' ) {
- return;
- }
-
- switch(true) {
- case data == 'customApps':
- self.customApps = self.prefs.getCharPref('customApps');
-
- break;
- case data == 'debug':
- self.debug = self.prefs.getBoolPref('debug');
-
- break;
- case data == 'enableTracking':
- self.enableTracking = self.prefs.getBoolPref('enableTracking');
-
- break;
- case data == 'popupOnHover':
- self.popupOnHover = self.prefs.getBoolPref('popupOnHover');
-
- self.moveLocation();
-
- break;
- case data == 'showApps':
- self.showApps = self.prefs.getIntPref('showApps');
-
- break;
- case data == 'location':
- var locationPref = self.prefs.getIntPref('location');
-
- self.moveLocation(locationPref);
-
- break;
- case data.test(/^cat[0-9]+$/):
- var cat = data.replace(/^cat([0-9]+)$/, '$1');
-
- self.showCats[cat] = self.prefs.getIntPref('cat' + cat);
-
- break;
- }
- },
-
- openTab: function(url) {
- self.browser.selectedTab = self.browser.addTab(url);
- },
-
- moveLocation: function(locationPref) {
- self.log('moveLocation');
-
- switch ( locationPref ) {
- case 1:
- var containerId = 'wappalyzer-statusbar';
-
- // Show status bar panel
- document.getElementById('wappalyzer-statusbar').style.visibility = '';
- document.getElementById('wappalyzer-statusbar').style.padding = '1px';
-
- break;
- default:
- var containerId = 'urlbar-icons';
-
- // Hide status bar panel
- document.getElementById('wappalyzer-statusbar').style.visibility = 'hidden';
- document.getElementById('wappalyzer-statusbar').style.padding = '0';
- }
-
- var e = document.getElementById(containerId);
- var container = document.getElementById('wappalyzer-container');
-
- if ( self.popupOnHover ) {
- container.addEventListener('mouseover', function() {
- self.hoverTimeout = setTimeout(function() {
- document.getElementById('wappalyzer-apps').openPopup(document.getElementById('wappalyzer-container'), 'after_end');
- }, 200);
- }, false);
-
- container.addEventListener('mouseout', function() { clearTimeout(self.hoverTimeout); }, false);
- }
-
- e.appendChild(container);
- },
-
- onPageLoad: function(event) {
- self.log('onPageLoad');
-
- var target = event.originalTarget;
-
- if ( !target.request ) {
- self.request = false;
- }
-
- self.analyzePage(
- target.documentElement,
- target.location.href,
- target.documentElement.innerHTML,
- [],
- [],
- true
- );
- },
-
- onContentPageLoad: function(message) {
- self.log('onContentPageLoad');
-
- self.analyzePage(
- null,
- message.json.href,
- message.json.html,
- message.json.headers,
- message.json.environmentVars,
- true
- );
- },
-
- onUrlChange: function(request) {
- self.log('onUrlChange');
-
- self.clearDetectedApps();
-
- var doc = self.browser.contentDocument;
-
- self.request = doc.request ? doc.request : request;
-
- self.currentTab = false;
-
- self.analyzePage(
- doc,
- doc.location.href ? doc.location.href : '',
- doc.documentElement ? doc.documentElement.innerHTML : '',
- [],
- [],
- false
- );
- },
-
- urlChange: {
- QueryInterface: function(iid) {
- if ( iid.equals(Components.interfaces.nsIWebProgressListener) ||
- iid.equals(Components.interfaces.nsISupportsWeakReference) ||
- iid.equals(Components.interfaces.nsISupports) ) {
- return this;
- }
-
- throw Components.results.NS_NOINTERFACE;
- },
-
- onLocationChange: function(progress, request, url) {
- self.log('urlChange.onLocationChange');
-
- if ( !url ) {
- self.prevUrl = '';
-
- return;
- }
-
- if ( url.spec != self.prevUrl ) {
- self.prevUrl = url.spec;
-
- self.onUrlChange(request);
- }
- },
-
- onStateChange: function(a, b, c, d) {},
- onProgressChange: function(a, b, c, d, e, f) {},
- onStatusChange: function(a, b, c, d) {},
- onSecurityChange: function(a, b, c) {}
- },
-
- analyzePage: function(doc, href, html, headers, environmentVars, doCount) {
- self.log('analyzePage');
-
- self.currentTab = false;
-
- if ( href == self.browser.contentDocument.location.href ) {
- self.currentTab = true;
-
- if ( !doc ) {
- doc = self.browser.contentDocument;
- }
-
- self.clearDetectedApps();
- }
-
- if ( typeof html == 'undefined' ) {
- html = '';
- }
-
- // Prevent large documents from slowing things down
- if ( html.length > 50000 ) {
- html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length);
- }
-
- // Scan URL, domain and response headers for patterns
- if ( html || self.request ) {
- // Check cached application names
- if ( doc && typeof doc.detectedApps != 'undefined' ) {
- for ( i in doc.detectedApps ) {
- var appName = doc.detectedApps[i];
-
- if ( typeof self.checkUnique[appName] == 'undefined' ) {
- self.log('CACHE'); //
-
- self.showApp(appName, doc, href, doCount);
-
- self.checkUnique[appName] = true;
- }
- }
- }
-
- for ( var appName in self.apps ) {
- // Don't scan for apps that have already been detected
- if ( typeof self.checkUnique[appName] == 'undefined' ) {
- // Scan HTML
- if ( html && typeof self.apps[appName].html != 'undefined' ) {
- if ( self.apps[appName].html.test(html) ) {
- self.showApp(appName, doc, href, doCount);
- }
- }
-
- // Scan script tags
- if ( html && typeof self.apps[appName].script != 'undefined' ) {
- var
- regex = /