Merge pull request #2 from AliasIO/master

Sync #2
main
Daniel Zdziebko 8 years ago committed by GitHub
commit c73085b0f2

@ -2,6 +2,7 @@ language: node_js
node_js: node_js:
- "node" - "node"
sudo: false sudo: false
dist: trusty
before_install: before_install:
- export WAPPALYZER_ROOT=$TRAVIS_BUILD_DIR - export WAPPALYZER_ROOT=$TRAVIS_BUILD_DIR
- export WAPPALYZER_NODE_PATH=$TRAVIS_BUILD_DIR - export WAPPALYZER_NODE_PATH=$TRAVIS_BUILD_DIR
@ -27,9 +28,3 @@ cache:
- node_modules - node_modules
env: env:
- CXX=g++-4.8 - CXX=g++-4.8
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-4.8

@ -510,7 +510,7 @@
"12" "12"
], ],
"env": "^angular$", "env": "^angular$",
"icon": "AngularJS.png", "icon": "AngularJS.svg",
"script": [ "script": [
"angular(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "angular(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1",
"/([\\d.]+(?:\\-?rc[.\\d]*)*)/angular(?:\\.min)?\\.js\\;version:\\1", "/([\\d.]+(?:\\-?rc[.\\d]*)*)/angular(?:\\.min)?\\.js\\;version:\\1",
@ -1910,7 +1910,7 @@
"icon": "Dell.png", "icon": "Dell.png",
"website": "http://dell.com" "website": "http://dell.com"
}, },
"Demandware": { "Salesforce Commerce Cloud": {
"cats": [ "cats": [
"6" "6"
], ],
@ -1919,7 +1919,7 @@
"Server": "Demandware eCommerce Server" "Server": "Demandware eCommerce Server"
}, },
"html": "<[^>]+demandware\\.edgesuite", "html": "<[^>]+demandware\\.edgesuite",
"icon": "Demandware.png", "icon": "Salesforce.svg",
"website": "http://demandware.com" "website": "http://demandware.com"
}, },
"Deployd": { "Deployd": {
@ -2358,7 +2358,7 @@
], ],
"env": "^enyo$", "env": "^enyo$",
"icon": "Enyo.png", "icon": "Enyo.png",
"script": "\benyo\\.js", "script": "enyo\\.js",
"website": "http://enyojs.com" "website": "http://enyojs.com"
}, },
"Epoch": { "Epoch": {
@ -2516,6 +2516,16 @@
"script": "jquery\\.fancybox\\.pack\\.js(?:\\?v=([\\d.]+))?$\\;version:\\1", "script": "jquery\\.fancybox\\.pack\\.js(?:\\?v=([\\d.]+))?$\\;version:\\1",
"website": "http://fancyapps.com/fancybox" "website": "http://fancyapps.com/fancybox"
}, },
"Fastly": {
"cats": [
"31"
],
"headers": {
"Fastly-Debug-Digest": ""
},
"icon": "Fastly.svg",
"website": "https://www.fastly.com"
},
"Fat-Free Framework": { "Fat-Free Framework": {
"cats": [ "cats": [
"18" "18"
@ -2699,9 +2709,11 @@
"cats": [ "cats": [
"24" "24"
], ],
"html": "<[^>]+class=\"[^\"]*(?:fr-view|fr-box)",
"icon": "Froala.svg", "icon": "Froala.svg",
"implies": [ "implies": [
"jQuery" "jQuery",
"Font Awesome"
], ],
"website": "http://froala.com/wysiwyg-editor" "website": "http://froala.com/wysiwyg-editor"
}, },
@ -3066,6 +3078,17 @@
"script": "apis\\.google\\.com/js/[a-z]*\\.js", "script": "apis\\.google\\.com/js/[a-z]*\\.js",
"website": "http://plus.google.com" "website": "http://plus.google.com"
}, },
"Google Search Appliance": {
"cats": [
"22",
"29"
],
"headers": {
"Server": "^Google\\sSearch\\sAppliance$"
},
"icon": "Google Search Appliance.png",
"website": "https://enterprise.google.com/search"
},
"Google Sites": { "Google Sites": {
"cats": [ "cats": [
"1" "1"
@ -3119,6 +3142,19 @@
}, },
"website": "http://developers.google.com/web-toolkit" "website": "http://developers.google.com/web-toolkit"
}, },
"govCMS": {
"cats": [
"1"
],
"meta": {
"generator": "Drupal ([\\d]+) \\(http:\\/\\/drupal\\.org\\) \\+ govCMS\\;version:\\1"
},
"icon": "govCMS.svg",
"implies": [
"Drupal"
],
"website": "https://www.govcms.gov.au"
},
"Graffiti CMS": { "Graffiti CMS": {
"cats": [ "cats": [
"1" "1"
@ -4286,6 +4322,16 @@
"icon": "LabVIEW.png", "icon": "LabVIEW.png",
"website": "http://ni.com/labview" "website": "http://ni.com/labview"
}, },
"Shapecss": {
"cats":[
"18"
],
"env": "^Shapecss$",
"html":"<link[^>]* href=\"[^\"]*shapecss(?:\\.min)?\\.css",
"script":"shapecss(?:\\.min)?\\.js",
"icon":"Shapecss.svg",
"website":"https://shapecss.com"
},
"Laravel": { "Laravel": {
"cats": [ "cats": [
"18" "18"
@ -4342,6 +4388,17 @@
"implies": "Scala", "implies": "Scala",
"website": "http://liftweb.net" "website": "http://liftweb.net"
}, },
"Play": {
"cats": [
"18"
],
"headers": {
"Set-Cookie": "PLAY_SESSION"
},
"icon": "Play.svg",
"implies": "Scala",
"website": "https://www.playframework.com"
},
"LightMon Engine": { "LightMon Engine": {
"cats": [ "cats": [
"1" "1"
@ -5482,7 +5539,7 @@
"icon": "OWL Carousel.png", "icon": "OWL Carousel.png",
"implies": "jQuery", "implies": "jQuery",
"script": "owl.carousel.*\\.js", "script": "owl.carousel.*\\.js",
"website": "http://owlgraphic.com/owlcarousel" "website": "https://owlcarousel2.github.io/OwlCarousel2/"
}, },
"OXID eShop": { "OXID eShop": {
"cats": [ "cats": [
@ -6547,6 +6604,17 @@
}, },
"website": "http://example.com" "website": "http://example.com"
}, },
"Raspbian": {
"cats": [
"28"
],
"headers": {
"Server": "Raspbian",
"X-Powered-By": "Raspbian"
},
"icon": "Raspbian.svg",
"website": "https://www.raspbian.org/"
},
"React": { "React": {
"cats": [ "cats": [
"12" "12"
@ -7020,6 +7088,7 @@
], ],
"implies": "jQuery", "implies": "jQuery",
"script": "select2.*\\.js", "script": "select2.*\\.js",
"icon": "Select2.png",
"website": "http://select2.github.io" "website": "http://select2.github.io"
}, },
"Semantic-ui": { "Semantic-ui": {
@ -7433,6 +7502,23 @@
"script": "^https?://api\\.solvemedia\\.com/", "script": "^https?://api\\.solvemedia\\.com/",
"website": "http://solvemedia.com" "website": "http://solvemedia.com"
}, },
"SonarQubes": {
"cats": [
"47"
],
"env": "^Sonar(?:Measures|Request)$",
"html": [
"<link href=\"/css/sonar\\.css?v=([\\d.]+)\\;version:\\1",
"<title>SonarQube</title>"
],
"script": "^/js/bundles/sonar\\.js?v=([\\d.]+)$\\;version:\\1",
"icon": "sonar.png",
"implies": "Java",
"meta": {
"application-name": "^SonarQubes$"
},
"website": "https://www.sonarqube.org/"
},
"SoundManager": { "SoundManager": {
"cats": [ "cats": [
"12" "12"
@ -7594,6 +7680,16 @@
"icon": "Store Systems.png", "icon": "Store Systems.png",
"website": "http://store-systems.de" "website": "http://store-systems.de"
}, },
"Storyblok": {
"cats": [
"1"
],
"icon": "storyblok.png",
"meta": {
"generator": "storyblok"
},
"website": "https://www.storyblok.com"
},
"Strapdown.js": { "Strapdown.js": {
"cats": [ "cats": [
"12" "12"
@ -7696,6 +7792,15 @@
"script": "sweet-alert(?:\\.min)?\\.js", "script": "sweet-alert(?:\\.min)?\\.js",
"website": "http://t4t5.github.io/sweetalert/" "website": "http://t4t5.github.io/sweetalert/"
}, },
"SweetAlert2": {
"cats": [
"12"
],
"html": "<link[^>]+?href=\"[^\"]+sweetalert2(?:\\.min)?\\.css",
"icon": "SweetAlert2.png",
"script": "sweetalert2(?:\\.min)?\\.js",
"website": "https://limonte.github.io/sweetalert2"
},
"Swiftlet": { "Swiftlet": {
"cats": [ "cats": [
"18" "18"
@ -8400,7 +8505,6 @@
"icon": "Vimeo.png", "icon": "Vimeo.png",
"website": "http://vimeo.com" "website": "http://vimeo.com"
}, },
"Vinala": { "Vinala": {
"cats": [ "cats": [
"18" "18"
@ -9996,6 +10100,15 @@
"icon": "swift.engine.png", "icon": "swift.engine.png",
"website": "http://mittec.ru/default" "website": "http://mittec.ru/default"
}, },
"WEBXPAY": {
"cats": [
"6"
],
"env": "^WEBXPAY$",
"html": "Powered by <a href=\"https://www.webxpay.com\">WEBXPAY<",
"icon": "WEBXPAY.png",
"website": "https://webxpay.com"
},
"three.js": { "three.js": {
"cats": [ "cats": [
"25" "25"
@ -10157,6 +10270,14 @@
"icon": "xui.png", "icon": "xui.png",
"script": "[^a-z]xui.*\\.js", "script": "[^a-z]xui.*\\.js",
"website": "http://xuijs.com" "website": "http://xuijs.com"
},
"Moon": {
"cats": [
"12"
],
"icon": "moon.png",
"script": "/moon(?:\\.min)?\\.js$",
"website": "http://moonjs.ga/"
} }
}, },
"categories": { "categories": {

@ -4,6 +4,10 @@
"categoryName3" : { "message" : "Менеджер БД" }, "categoryName3" : { "message" : "Менеджер БД" },
"categoryName4" : { "message" : "Документация" }, "categoryName4" : { "message" : "Документация" },
"categoryName5" : { "message" : "Виджет" }, "categoryName5" : { "message" : "Виджет" },
"categoryName6" : { "message" : "Электронная коммерция" },
"categoryName7" : { "message" : "Фотогалерея" },
"categoryName8" : { "message" : "Вики" },
"categoryName9" : { "message" : "Панель управления хостингом" },
"categoryName10" : { "message" : "Аналитика" }, "categoryName10" : { "message" : "Аналитика" },
"categoryName11" : { "message" : "Блог" }, "categoryName11" : { "message" : "Блог" },
"categoryName12" : { "message" : "JS фреймворк" }, "categoryName12" : { "message" : "JS фреймворк" },
@ -35,7 +39,7 @@
"categoryName38" : { "message" : "Медиа сервер" }, "categoryName38" : { "message" : "Медиа сервер" },
"categoryName39" : { "message" : "Вебкамера" }, "categoryName39" : { "message" : "Вебкамера" },
"categoryName40" : { "message" : "Принтер" }, "categoryName40" : { "message" : "Принтер" },
"categoryName41" : { "message" : ровайдер платежей" }, "categoryName41" : { "message" : латёжная система" },
"categoryName42" : { "message" : "Менеджер тэгов" }, "categoryName42" : { "message" : "Менеджер тэгов" },
"categoryName43" : { "message" : "Paywall" }, "categoryName43" : { "message" : "Paywall" },
"categoryName44" : { "message" : "Система непрерывной интеграции" }, "categoryName44" : { "message" : "Система непрерывной интеграции" },
@ -51,8 +55,9 @@
"github" : { "message" : "Форкнуть на GitHub!" }, "github" : { "message" : "Форкнуть на GitHub!" },
"noAppsDetected" : { "message" : "Нет данных о сайте" }, "noAppsDetected" : { "message" : "Нет данных о сайте" },
"nothingToDo" : { "message" : "Тут нечего искать" }, "nothingToDo" : { "message" : "Тут нечего искать" },
"optionTracking" : { "message" : "Анонимно отправлять статистику распознанных данных на сервер (для улучшения расширения)" }, "optionTracking" : { "message" : "Анонимно отправлять статистику распознанных данных на сервер (для исследований)" },
"optionUpgradeMessage" : { "message" : "Оповещать меня о новых обновлениях" }, "optionDynamicIcon" : { "message": "Использовать значок приложения вместо логотипа Wappalyzer" },
"optionUpgradeMessage" : { "message" : "Оповещать меня об обновлениях" },
"options" : { "message" : "Настройки" }, "options" : { "message" : "Настройки" },
"optionsSave" : { "message" : "Сохранить" }, "optionsSave" : { "message" : "Сохранить" },
"optionsSaved" : { "message" : "Успешно сохранено!" }, "optionsSaved" : { "message" : "Успешно сохранено!" },

@ -6,7 +6,6 @@
<script src="js/browser-polyfill.js"></script> <script src="js/browser-polyfill.js"></script>
<script src="js/wappalyzer.js"></script> <script src="js/wappalyzer.js"></script>
<script src="js/defaults.js"></script>
<script src="js/driver.js"></script> <script src="js/driver.js"></script>
<script src="js/network.js"></script> <script src="js/network.js"></script>
</head> </head>

@ -5,25 +5,25 @@
init: function() { init: function() {
var html = document.documentElement.outerHTML; var html = document.documentElement.outerHTML;
c.log('init'); c.log('Function call: init()');
if ( html.length > 50000 ) { if ( html.length > 50000 ) {
html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length); html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length);
} }
browser.runtime.sendMessage({ id: 'analyze', subject: { html: html } }); browser.runtime.sendMessage({ id: 'analyze', subject: { html: html }, source: 'content.js' });
c.getEnvironmentVars(); c.getEnvironmentVars();
}, },
log: function(message) { log: function(message) {
browser.runtime.sendMessage({ id: 'log', message: '[ content.js ] ' + message }); browser.runtime.sendMessage({ id: 'log', message: message, source: 'content.js' });
}, },
getEnvironmentVars: function() { getEnvironmentVars: function() {
var container, script; var container, script;
c.log('getEnvironmentVars'); c.log('Function call: getEnvironmentVars()');
if ( typeof document.documentElement.innerHTML === 'undefined' ) { if ( typeof document.documentElement.innerHTML === 'undefined' ) {
return; return;
@ -48,7 +48,7 @@
environmentVars = environmentVars.split(' ').slice(0, 500); environmentVars = environmentVars.split(' ').slice(0, 500);
browser.runtime.sendMessage({ id: 'analyze', subject: { env: environmentVars } }); browser.runtime.sendMessage({ id: 'analyze', subject: { env: environmentVars }, source: 'content.js' });
}), true); }), true);
document.documentElement.appendChild(container); document.documentElement.appendChild(container);

@ -26,7 +26,7 @@
* Log messages to console * Log messages to console
*/ */
log: function(args) { log: function(args) {
console.log('[wappalyzer ' + args.type + '] ' + args.message); console.log('[wappalyzer ' + args.type + ']', '[' + args.source + ']', JSON.parse(args.message));
}, },
/** /**
@ -53,7 +53,7 @@
* Initialize * Initialize
*/ */
init: function() { init: function() {
w.log('init'); w.log('Function call: w.driver.init()', 'driver');
// Load apps.json // Load apps.json
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
@ -122,8 +122,6 @@
} }
browser.tabs.onRemoved.addListener(function(tabId) { browser.tabs.onRemoved.addListener(function(tabId) {
w.log('remove tab');
tabCache[tabId] = null; tabCache[tabId] = null;
}); });
@ -153,8 +151,6 @@
} }
} }
} }
w.log(JSON.stringify({ uri: uri, headers: responseHeaders }));
} }
}, { urls: [ 'http://*/*', 'https://*/*' ], types: [ 'main_frame' ] }, [ 'responseHeaders' ]); }, { urls: [ 'http://*/*', 'https://*/*' ], types: [ 'main_frame' ] }, [ 'responseHeaders' ]);
@ -178,11 +174,13 @@
a = document.createElement('a'); a = document.createElement('a');
if ( typeof message.id != 'undefined' ) { if ( typeof message.id != 'undefined' ) {
w.log('message: ' + message.id); if ( message.id !== 'log' ) {
w.log('Message received from ' + message.source + ': ' + message.id, 'driver');
}
switch ( message.id ) { switch ( message.id ) {
case 'log': case 'log':
w.log(message.message); w.log(message.message, message.source);
break; break;
case 'analyze': case 'analyze':
@ -295,8 +293,6 @@
if ( Object.keys(w.ping.hostnames).length && tracking ) { if ( Object.keys(w.ping.hostnames).length && tracking ) {
w.driver.post('http://ping.wappalyzer.com/v2/', w.ping); w.driver.post('http://ping.wappalyzer.com/v2/', w.ping);
w.log('w.driver.ping: ' + JSON.stringify(w.ping));
w.ping = { hostnames: {} }; w.ping = { hostnames: {} };
w.driver.post('https://ad.wappalyzer.com/log/wp/', w.adCache); w.driver.post('https://ad.wappalyzer.com/log/wp/', w.adCache);
@ -318,7 +314,7 @@
xhr.onreadystatechange = function() { xhr.onreadystatechange = function() {
if ( xhr.readyState == 4 ) { if ( xhr.readyState == 4 ) {
w.log('w.driver.post: status ' + xhr.status + ' (' + url + ')'); w.log({ 'POST request': { url: url, status: xhr.status, data: data } }, 'driver');
} }
}; };

@ -1,6 +1,6 @@
(function() { (function() {
try { try {
var i, environmentVars, e = document.createEvent('Events'); var i, environmentVars = '', e = document.createEvent('Events');
e.initEvent('wappalyzerEvent', true, false); e.initEvent('wappalyzerEvent', true, false);

@ -1,24 +1,17 @@
/** global: chrome */ /** global: chrome */
/** global: browser */ /** global: browser */
document.addEventListener('DOMContentLoaded', function() { (function() {
var var popup = {
slugify, popup,
d = document,
detectedApps = d.getElementById('detected-apps');
slugify = function(string) {
return string.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/--+/g, '-').replace(/(?:^-|-$)/, '');
};
popup = {
init: function() { init: function() {
var callback = function(tabs) { var callback = function(tabs) {
if ( tabs[0].url.match(/https?:\/\//) ) { ( chrome || browser ).runtime.sendMessage({ id: 'get_apps', tab: tabs[0], source: 'popup.js' }, function(response) {
detectedApps.innerHTML = '<div class="empty">' + browser.i18n.getMessage('noAppsDetected') + '</div>'; if ( /complete|interacrive|loaded/.test(document.readyState) ) {
popup.displayApps(response)
} else { } else {
detectedApps.innerHTML = '<div class="empty">' + browser.i18n.getMessage('nothingToDo') + '</div>'; document.addEventListener('DOMContentLoaded', function() { popup.displayApps(response) });
} }
});
}; };
try { try {
@ -28,34 +21,32 @@ document.addEventListener('DOMContentLoaded', function() {
// Edge // Edge
browser.tabs.query({ active: true, currentWindow: true }, callback); browser.tabs.query({ active: true, currentWindow: true }, callback);
} }
popup.displayApps();
}, },
displayApps: function() { displayApps: function(response) {
var appName, confidence, version; var
appName, confidence, version,
var callback = function(tabs) { detectedApps = document.querySelector('#detected-apps');
function sendGetApps(response) { html = '';
var html;
if ( response.tabCache && response.tabCache.count > 0 ) { if ( response.tabCache && response.tabCache.count > 0 ) {
detectedApps.innerHTML = '';
for ( appName in response.tabCache.appsDetected ) { for ( appName in response.tabCache.appsDetected ) {
confidence = response.tabCache.appsDetected[appName].confidenceTotal; confidence = response.tabCache.appsDetected[appName].confidenceTotal;
version = response.tabCache.appsDetected[appName].version; version = response.tabCache.appsDetected[appName].version;
html = html +=
'<div class="detected-app">' + '<div class="detected-app">' +
'<a target="_blank" href="https://wappalyzer.com/applications/' + slugify(appName) + '">' + '<a target="_blank" href="https://wappalyzer.com/applications/' + popup.slugify(appName) + '">' +
'<img src="images/icons/' + ( response.apps[appName].icon || 'default.svg' ) + '"/>' + '<img src="images/icons/' + ( response.apps[appName].icon || 'default.svg' ) + '"/>' +
'<span class="label"><span class="name">' + appName + '</span>' + ( version ? ' ' + version : '' ) + ( confidence < 100 ? ' (' + confidence + '% sure)' : '' ) + '</span>' + '<span class="label">' +
'<span class="name">' + appName + '</span>' +
( version ? ' ' + version : '' ) + ( confidence < 100 ? ' (' + confidence + '% sure)' : '' ) +
'</span>' +
'</a>'; '</a>';
response.apps[appName].cats.forEach(function(cat) { response.apps[appName].cats.forEach(function(cat) {
html += html +=
'<a target="_blank" href="https://wappalyzer.com/categories/' + slugify(response.categories[cat].name) + '">' + '<a target="_blank" href="https://wappalyzer.com/categories/' + popup.slugify(response.categories[cat].name) + '">' +
'<span class="category"><span class="name">' + browser.i18n.getMessage('categoryName' + cat) + '</span></span>' + '<span class="category"><span class="name">' + browser.i18n.getMessage('categoryName' + cat) + '</span></span>' +
'</a>'; '</a>';
}); });
@ -63,27 +54,23 @@ document.addEventListener('DOMContentLoaded', function() {
html += html +=
'</a>' + '</a>' +
'</div>'; '</div>';
detectedApps.innerHTML = detectedApps.innerHTML + html;
}
} }
}
if (typeof chrome === "undefined") {
browser.runtime.sendMessage({ id: 'get_apps', tab: tabs[0] }, sendGetApps);
} else { } else {
chrome.runtime.sendMessage({ id: 'get_apps', tab: tabs[0] }, sendGetApps); html = '<div class="empty">' + browser.i18n.getMessage('noAppsDetected') + '</div>';
} }
};
try { detectedApps.innerHTML = html;
// Chrome, Firefox
browser.tabs.query({ active: true, currentWindow: true }).then(callback); // Force redraw after popup animation on Mac OS
} catch ( e ) { setTimeout(function() {
// Edge document.body.innerHTML += '<span style="line-height: 1px;"> </span>';
browser.tabs.query({ active: true, currentWindow: true }, callback); }, 600);
} },
slugify: function(string) {
return string.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/--+/g, '-').replace(/(?:^-|-$)/, '');
} }
}; };
popup.init(); popup.init();
}); }());

@ -4,7 +4,6 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="css/widgets.css">
<link rel="stylesheet" href="css/popup.css"> <link rel="stylesheet" href="css/popup.css">
<script src="js/browser-polyfill.js"></script> <script src="js/browser-polyfill.js"></script>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
width="355.80875"
height="355.80875"
xml:space="preserve"
sodipodi:docname="AngularJS-Shield.svg"
inkscape:export-filename="/usr/local/google/home/stephenfluin/AngularJS-Shield.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs6" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1393"
inkscape:window-height="697"
id="namedview4"
showgrid="false"
inkscape:zoom="0.25757162"
inkscape:cx="171.15375"
inkscape:cy="177.21499"
inkscape:window-x="2290"
inkscape:window-y="312"
inkscape:window-maximized="0"
inkscape:current-layer="g10"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" /><g
id="g10"
inkscape:groupmode="layer"
inkscape:label="ink_ext_XXXXXX"
transform="translate(9.963744999999989) matrix(1.25,0,0,-1.25,-188.84625,636.71875) "><g
id="g12"
transform="scale(0.1,0.1)"><path
d="M 2850,5093.75 1510.77,4622.45 1722.39,2867.82 2851.42,2247.28 3986.27,2876.23 4197.82,4630.79 2850,5093.75 z"
style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path14"
inkscape:connector-curvature="0" /><path
d="m 4064.25,4529.39 -1217.38,415.13 0,-2548.98 1020.22,564.62 197.16,1569.23 z"
style="fill:#af2b2d;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path16"
inkscape:connector-curvature="0" /><path
d="m 1661.05,4521.89 181.34,-1569.22 1004.47,-557.13 0,2549.03 -1185.81,-422.68 z"
style="fill:#df2e31;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path18"
inkscape:connector-curvature="0" /><path
d="m 3129.05,3676.7 -279.96,584.64 -246.46,-584.64 526.42,0 z m 106.74,-245.83 -742.11,0 -166.02,-415.26 -308.82,-5.71 828.04,1842.06 856.9,-1842.06 -286.23,0 -181.76,420.97 z"
style="fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path20"
inkscape:connector-curvature="0" /><path
d="m 2846.87,4851.96 2.21,-590.62 279.67,-585.09 -281.25,0 -0.63,-245 388.9,-0.38 181.77,-421.04 295.49,-5.48 -866.16,1847.61 z"
style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path22"
inkscape:connector-curvature="0" /></g></g></svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 B

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1709 768" enable-background="new 0 0 1709 768" xml:space="preserve">
<g>
<polygon fill="#E82C2A" points="1154.2,134.3 1154.2,555.4 1280.6,555.4 1280.6,491.1 1238.8,491.1 1238.8,70.2 1154.1,70.2 "/>
<path fill="#E82C2A" d="M55.9,491.1h43V287.9h-43v-55.9l43-7.1v-56.6c0-68.5,14.9-98.2,102.3-98.2c18.9,0,41.2,2.8,60.8,6.3
l-11.6,68.9c-13.3-2.1-19.8-2.5-28.2-2.5c-30.8,0-38.6,3.1-38.6,33.1V225h63.9v62.9h-63.9v203.1h42.5v64.3l-170.2,0V491.1z"/>
<path fill="#E82C2A" d="M1111.1,470.7c-13.2,2.8-24.8,2.5-33.2,2.7c-34.8,0.9-31.8-10.6-31.8-43.5v-142h66.3V225H1046V70.2h-84.7
v377.3c0,74.1,18.3,107.9,98,107.9c18.9,0,44.8-4.9,64.4-9L1111.1,470.7z"/>
<path fill="#E82C2A" d="M1637.2,491.4c17.8,0,32.2,14.1,32.2,32c0,17.8-14.4,31.9-32.2,31.9c-17.8,0-32.1-14.1-32.1-31.9
C1605.1,505.6,1619.4,491.4,1637.2,491.4 M1637.2,550.3c14.8,0,26.8-12.1,26.8-26.9c0-14.8-12-26.6-26.8-26.6
c-14.8,0-26.7,11.8-26.7,26.6C1610.5,538.2,1622.4,550.3,1637.2,550.3 M1643.1,539.1l-6.5-9.5h-4.5v9.5h-7.2v-31.4h13.1
c7.8,0,12.6,3.9,12.6,10.9c0,5.1-2.6,8.6-6.6,9.8l7.8,10.8H1643.1z M1632.2,523.3h5.7c3.3,0,5.5-1.3,5.5-4.7c0-3.3-2.2-4.6-5.3-4.6
h-5.9V523.3z"/>
<path fill="#E82C2A" d="M855.6,287.8v-11.3c-25.6-4.7-51.1-4.7-64.9-4.7c-39.4,0-44.2,20.9-44.2,32.2c0,16,5.5,24.7,48.2,34
c62.4,14,125.1,28.6,125.1,106c0,73.4-37.8,111.3-117.3,111.3c-53.2,0-104.8-11.4-144.2-21.4v-63.2h64.1l0,11.2
c27.6,5.3,56.5,4.8,71.6,4.8c42,0,48.8-22.6,48.8-34.6c0-16.7-12.1-24.7-51.5-32.7c-74.2-12.7-133.2-38-133.2-113.5
c0-71.4,47.7-99.4,127.3-99.4c53.9,0,94.8,8.4,134.2,18.4v62.8H855.6z"/>
<path fill="#E82C2A" d="M465.9,343.4l-6.4-6.4l-32.7,28.5c-1.7-0.6-3.4-0.9-5.3-0.9c-8.8,0-16,7.4-16,16.4c0,9.1,7.2,16.4,16,16.4
c8.8,0,16-7.4,16-16.4c0-1.7-0.3-3.4-0.7-4.9L465.9,343.4z"/>
<path fill="#E82C2A" d="M595.6,470.7l-0.1-263.6h-84.7v24.7c-17.4-10.5-36.9-17.9-57.6-21.8h0.5v-29.2h10.3v-21.5h-85.3v21.5h10.3
v29.2h0.6c-81,14.9-142.4,85.8-142.4,171.2c0,96.2,77.9,174.1,174.1,174.1c32.8,0,63.5-9.1,89.7-24.9l15.3,24.9h89.5v-84.7H595.6z
M426.5,470.6v-10h-10.1v9.9c-45.5-2.6-81.8-39.2-84.2-84.7h10.1v-10.1h-10c2.7-45.2,38.9-81.4,84.1-84v10h10.1v-10
c44.6,2.4,80.5,37.4,84.4,81.5v2.9h-10.2v10.1h10.2l0,2.8C507.1,433.2,471.1,468.2,426.5,470.6z"/>
<path fill="#E82C2A" d="M1495,225h174.7v62.9h-41.8l-107.1,263.6c-30.7,74-81.1,143.7-157.9,143.7c-18.9,0-44-2.1-61.5-6.3
l7.7-76.9c11.2,2.1,25.8,3.5,33.5,3.5c35.6,0,75.8-22.1,88.4-60.5l-108.6-267.1h-41.8V225h174.8v62.9h-41.7l61.5,151.3l0,0
l61.5-151.3H1495V225z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="400"><path fill="#465283" d="M63.3 84.34h118.644c34.825.294 60.06 10.28 75.7 29.956 15.643 19.677 20.808 46.55 15.496 80.617-2.066 15.566-6.64 30.837-13.724 45.815-6.788 14.978-16.233 28.488-28.332 40.53-14.757 15.27-30.547 24.962-47.37 29.074-16.822 4.112-34.235 6.167-52.238 6.167H78.353L61.53 400.2H-.005L63.3 84.34m51.797 50.22L88.535 266.72c1.77.293 3.54.44 5.312.44h6.198c28.332.293 51.943-2.496 70.832-8.37 18.888-6.167 31.578-27.606 38.072-64.318 5.31-30.837-.002-48.604-15.94-53.304-15.64-4.7-35.267-6.9-58.877-6.608-3.542.294-6.936.44-10.182.44h-9.296l.443-.44M343.253.223h61.093L387.08 84.365h54.895c30.104.587 52.533 6.755 67.29 18.502 15.052 11.748 19.48 34.068 13.28 66.96l-29.66 146.697h-61.977l28.332-140.088c2.95-14.684 2.066-25.11-2.656-31.278-4.722-6.167-14.905-9.25-30.546-9.25l-49.14-.442-36.3 181.058h-61.093L343.253.224M588.157 84.34H706.8c34.826.294 60.06 10.28 75.702 29.956 15.64 19.677 20.807 46.55 15.494 80.617-2.066 15.566-6.64 30.837-13.723 45.815-6.79 14.978-16.233 28.488-28.333 40.53-14.757 15.27-30.546 24.962-47.37 29.074-16.82 4.112-34.234 6.167-52.237 6.167H603.21l-16.823 83.7H524.85l63.307-315.86m51.796 50.22L613.39 266.72c1.772.293 3.543.44 5.314.44h6.197c28.334.293 51.944-2.496 70.833-8.37 18.888-6.167 31.58-27.606 38.072-64.318 5.312-30.837 0-48.604-15.937-53.304-15.642-4.7-35.27-6.9-58.88-6.608-3.54.294-6.935.44-10.18.44h-9.298l.443-.44"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 400 400"><path fill="#465283" d="M32.8052237 143.08916093h58.99287786c17.31589437.14618444 29.8633917 5.11148297 37.64000586 14.89490113 7.77810583 9.7839154 10.34627796 23.14586886 7.70501362 40.08486595-1.02726886 7.73981947-3.30158044 15.33295724-6.8239292 22.7804078-3.37516988 7.44745057-8.07146916 14.1649734-14.08740616 20.15256853-7.33756362 7.59264056-15.18876168 12.41175465-23.55359415 14.45634783-8.36433526 2.0445932-17.02253105 3.06639256-25.97409018 3.06639256H40.2899662l-8.36483248 41.61831083h-30.5968l31.47688997-157.0537946m25.7548135 24.97068818L45.352721 233.7732332c.88008997.1456872 1.76017994.21877943 2.64126435.21877943h3.08180656c14.08740618.1456872 25.8274085-1.241076 35.21950986-4.16178135 9.3916041-3.06639255 15.70140165-13.7264201 18.9303871-31.98057988 2.6402699-15.3329572-.00099446-24.167171-7.92578195-26.50413306-7.77661414-2.33696204-17.53566823-3.43085917-29.27517336-3.2856692-1.76117438.14618444-3.44875932.21877944-5.06275482.21877944h-4.6222126l.2202711-.21877943m113.4450882-66.795845h30.37702614l-8.58510358 41.8375875h27.29521957c14.96849058.29187164 26.12077184 3.3587614 33.45833546 9.19967487 7.4842453 5.8414107 9.68596188 16.93949432 6.60316087 33.2942509l-14.74772224 72.94155797h-30.81657388l14.08740616-69.65539156c1.4668166-7.30126614 1.02726886-12.4853441-1.32063216-15.55223387-2.34790102-3.06639255-7.41115306-4.5993402-15.18826445-4.5993402l-24.43368413-.2197739-18.04930267 90.0267395h-30.37702614l31.69716108-157.272574m121.77262873 41.8246596h58.99238065c17.3163916.14618445 29.8633917 5.11148298 37.6410003 14.89490114 7.77661417 9.7839154 10.34578075 23.14586887 7.70401918 40.08486596-1.02726886 7.73981945-3.30158044 15.33295722-6.82343198 22.78040778-3.37616433 7.44745057-8.07146915 14.1649734-14.08790338 20.15256853-7.33756363 7.59264056-15.18826445 12.41175465-23.55359415 14.45634783-8.3633408 2.0445932-17.02203385 3.06639256-25.97359297 3.06639256H301.2624967l-8.3648325 41.6178136h-30.5977945l31.47788443-157.0537946m25.7543163 24.97068817L306.324257 233.7732332c.88108444.1456872 1.76167163.21877942 2.6422588.21877942h3.08130935c14.0884006.1456872 25.82790574-1.24107602 35.22000707-4.16178136 9.3916041-3.06639255 15.7023961-13.7264201 18.9303871-31.98057988 2.64126435-15.3329572 0-24.167171-7.92429027-26.50413306-7.7776086-2.33696205-17.53715993-3.43085918-29.27666506-3.2856692-1.76017995.14618443-3.4482621.21877943-5.06176038.21877943h-4.62320705l.2202711-.21877943"/></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 265" enable-background="new 0 0 160 265"><g><path fill="#92D13D" d="M17.8 23.9l6.2-6.2c9.5-9.4 25-8.8 33.7 1.3l85.8 100c7.5 8.7 7.4 21.6-.2 30.2l-85.5 96.9c-8.8 9.9-24.1 10.4-33.5 1l-6.3-6.1c-8.4-8.4-9-21.8-1.4-31l51.2-61.4c7-8.4 7.1-20.5.3-29.1l-52-65c-7.4-9.1-6.6-22.3 1.7-30.6z"/><path fill="#49691F" d="M67.8 148.6l-51.2 61.4c-7.6 9.1-7 22.6 1.4 31l6.2 6.2c9.4 9.4 24.7 8.9 33.5-1l18.5-21c7-13.8 10.9-29.4 10.9-45.9 0-20.4-6-39.3-16.2-55.2 3.8 7.8 2.7 17.5-3.1 24.5z"/></g></svg>

After

Width:  |  Height:  |  Size: 540 B

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 570 720">
<path fill="#000" d="m158.38,1.6562c-3.6193,0.11232-7.5172,1.4493-11.938,4.9375-10.83-4.1763-21.33-5.6271-30.72,2.8751-14.5-1.8808-19.212,2.0002-22.782,6.5312-3.183-0.066-23.819-3.272-33.282,10.844-23.781-2.814-31.297,13.988-22.781,29.656-4.8569,7.519-9.8895,14.947,1.4688,29.281-4.018,7.9835-1.5274,16.644,7.9375,27.125-2.4979,11.223,2.4121,19.141,11.219,25.312-1.6471,15.358,14.084,24.287,18.781,27.469,1.8037,8.9487,5.5629,17.393,23.531,22.062,2.9632,13.336,13.762,15.639,24.219,18.438-34.562,20.09-64.201,46.523-64,111.38l-5.0625,9.0312c-39.63,24.1-75.285,101.56-19.53,164.52,3.6419,19.708,9.7496,33.864,15.188,49.531,8.1338,63.131,61.218,92.692,75.219,96.188,20.517,15.628,42.368,30.457,71.938,40.844,27.875,28.749,58.074,39.706,88.438,39.688,0.44515-0.00028,0.89853,0.005,1.3438,0,30.364,0.0189,60.562-10.938,88.438-39.688,29.569-10.387,51.421-25.216,71.938-40.844,14.001-3.4959,67.085-33.057,75.219-96.188,5.4379-15.667,11.546-29.823,15.188-49.531,55.754-62.965,20.1-140.43-19.531-164.53l-5.07-9.03c0.20067-64.852-29.438-91.285-64-111.38,10.457-2.7984,21.256-5.1014,24.219-18.438,17.968-4.6698,21.728-13.114,23.531-22.062,4.6978-3.1813,20.428-12.111,18.781-27.469,8.8067-6.1716,13.717-14.09,11.219-25.312,9.4649-10.481,11.956-19.141,7.9375-27.125,11.36-14.328,6.32-21.756,1.47-29.275,8.51-15.668,1-32.47-22.79-29.656-9.46-14.116-30.09-10.91-33.28-10.844-3.57-4.531-8.28-8.412-22.78-6.5312-9.39-8.5022-19.89-7.0514-30.72-2.875-12.86-10.148-21.37-2.0133-31.09,1.0624-15.57-5.0877-19.13,1.881-26.78,4.7188-16.98-3.5881-22.14,4.224-30.28,12.469l-9.4688-0.1875c-25.611,15.093-38.334,45.826-42.844,61.625-4.5121-15.802-17.206-46.535-42.812-61.625l-9.4688,0.1875c-8.15-8.245-13.31-16.057-30.29-12.469-7.65-2.8378-11.2-9.8065-26.78-4.7188-6.3797-2.0185-12.247-6.2144-19.156-6z"/>
<path fill="#75a928" d="m107.39,68.056c67.948,35.031,107.45,63.369,129.09,87.504-11.082,44.418-68.896,46.445-90.036,45.199,4.3284-2.0147,7.9399-4.4278,9.2205-8.1357-5.3045-3.7698-24.113-0.39719-37.244-7.7742,5.0441-1.045,7.4035-2.063,9.7629-5.7854-12.406-3.9567-25.769-7.3664-33.628-13.921,4.2413,0.0524,8.2012,0.9488,13.74-2.8927-11.112-5.9882-22.969-10.734-32.181-19.887,5.7452-0.14063,11.939-0.0568,13.74-2.1695-10.17-6.3007-18.751-13.308-25.854-20.972,8.04,0.97052,11.435,0.13478,13.379-1.2656-7.6878-7.8742-17.418-14.523-22.057-24.226,5.9696,2.0575,11.431,2.8451,15.368-0.1808-2.6124-5.8935-13.805-9.3696-20.249-23.142,6.2844,0.60938,12.95,1.3711,14.283,0-2.917-11.884-7.922-18.565-12.831-25.487,13.45-0.2,33.828,0.052,32.905-1.085l-8.3165-8.4973c13.138-3.5372,26.581,0.56816,36.34,3.6159,4.3819-3.4577-0.0776-7.83-5.4238-12.294,11.165,1.4906,21.254,4.0574,30.373,7.5934,4.8724-4.3993-3.1639-8.7987-7.051-13.198,17.249,3.2726,24.557,7.8707,31.82,12.475,5.2694-5.0508,0.30166-9.3433-3.2543-13.74,13.006,4.817,19.705,11.036,26.758,17.175,2.3912-3.2271,6.0749-5.5924,1.6272-13.379,9.2342,5.3227,16.189,11.595,21.334,18.622,5.7134-3.6379,3.4039-8.613,3.4351-13.198,9.5966,7.8065,15.687,16.114,23.142,24.226,1.5017-1.0934,2.8166-4.8017,3.9775-10.667,22.895,22.212,55.246,78.158,8.3165,100.34-39.94-32.94-87.64-56.883-140.5-74.844z"/>
<path fill="#75a928" d="M467.92,68.056c-67.94,35.034-107.44,63.364-129.08,87.504,11.082,44.418,68.896,46.445,90.036,45.199-4.3284-2.0147-7.9399-4.4278-9.2205-8.1357,5.3045-3.7698,24.113-0.39719,37.244-7.7742-5.0441-1.045-7.4035-2.063-9.7629-5.7854,12.406-3.9567,25.769-7.3664,33.628-13.921-4.2413,0.0524-8.2012,0.9488-13.74-2.8927,11.112-5.9882,22.969-10.734,32.181-19.887-5.7452-0.14063-11.939-0.0568-13.74-2.1695,10.17-6.3007,18.751-13.308,25.854-20.972-8.04,0.97052-11.435,0.13478-13.379-1.2656,7.6878-7.8742,17.418-14.523,22.057-24.226-5.9696,2.0575-11.431,2.8451-15.368-0.1808,2.6124-5.8935,13.805-9.3696,20.249-23.142-6.2844,0.60938-12.95,1.3711-14.283,0,2.9223-11.889,7.9275-18.57,12.836-25.492-13.45-0.19973-33.828,0.05235-32.905-1.0848l8.3165-8.4973c-13.138-3.5372-26.581,0.56816-36.34,3.6159-4.3819-3.4577,0.0776-7.83,5.4238-12.294-11.165,1.4906-21.254,4.0574-30.373,7.5934-4.8724-4.3993,3.1639-8.7987,7.051-13.198-17.249,3.2726-24.557,7.8707-31.82,12.475-5.2694-5.0508-0.30166-9.3433,3.2543-13.74-13.006,4.817-19.705,11.036-26.758,17.175-2.3912-3.2271-6.0749-5.5924-1.6272-13.379-9.2342,5.3227-16.189,11.595-21.334,18.622-5.7134-3.6379-3.4039-8.613-3.4351-13.198-9.5966,7.8065-15.687,16.114-23.142,24.226-1.5017-1.0934-2.8166-4.8017-3.9775-10.667-22.895,22.212-55.246,78.158-8.3165,100.34,39.919-32.947,87.616-56.888,140.48-74.849z"/>
<path fill="#bc1142" d="m365.2,521.85a71.956,66.532,0,1,1,-143.91,0,71.956,66.532,0,1,1,143.91,0z" transform="matrix(1.131107,0,0,1.1280497,-43.139135,-68.310983)"/>
<path fill="#bc1142" d="m262.84,276.65a61.875,28.125,0,1,1,-123.75,0,61.875,28.125,0,1,1,123.75,0z" transform="matrix(0.76741684,-1.1613112,2.171115,1.4224368,-560.88858,217.68859)"/>
<path fill="#bc1142" d="m262.84,276.65a61.875,28.125,0,1,1,-123.75,0,61.875,28.125,0,1,1,123.75,0z" transform="matrix(-0.76741684,-1.1613112,-2.171115,1.4224368,1134.8288,213.68859)"/>
<path fill="#bc1142" d="M72.91,342.09c36.41-9.76,12.292,150.63-17.333,137.47-32.587-26.21-43.083-102.97,17.333-137.47z"/>
<path fill="#bc1142" d="m493.68,340.09c-36.414-9.7569-12.292,150.64,17.333,137.48,32.587-26.213,43.083-102.98-17.333-137.48z"/>
<path fill="#bc1142" d="m369.97,220.65c62.835-10.61,115.12,26.722,113.01,94.858-2.0669,26.121-136.16-90.969-113.01-94.858z"/>
<path fill="#bc1142" d="M196.36,218.65c-62.84-10.61-115.12,26.73-113.01,94.86,2.067,26.12,136.16-90.97,113.01-94.86z"/>
<path fill="#bc1142" d="m286.62,202.76c-37.503-0.97548-73.495,27.834-73.582,44.544-0.10462,20.304,29.651,41.093,73.837,41.62,45.123,0.32321,73.916-16.64,74.061-37.594,0.16484-23.74-41.039-48.937-74.317-48.571z"/>
<path fill="#bc1142" d="m288.91,619.12c32.697-1.4271,76.571,10.532,76.657,26.396,0.5427,15.405-39.79,50.211-78.826,49.538-40.427,1.7439-80.069-33.116-79.55-45.199-0.60506-17.716,49.226-31.548,81.719-30.735z"/>
<path fill="#bc1142" d="m168.14,525.1c23.279,28.046,33.891,77.319,14.464,91.844-18.379,11.088-63.012,6.5216-94.736-39.052-21.395-38.242-18.638-77.157-3.6159-88.589,22.464-13.684,57.173,4.799,83.889,35.797z"/>
<path fill="#bc1142" d="m405.02,516.21c-25.187,29.502-39.212,83.31-20.838,100.64,17.568,13.464,64.729,11.582,99.566-36.756,25.296-32.465,16.82-86.682,2.3708-101.08-21.464-16.602-52.277,4.6449-81.099,37.188z"/>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 58 58.7" style="enable-background:new 0 0 58 58.7;" xml:space="preserve">
<style type="text/css">
.st0{fill:#337AB7;stroke:#FFFFFF;stroke-miterlimit:10;}
.st1{fill:#5BC0DE;}
.st2{fill:#5BC0DE;stroke:#FFFFFF;stroke-miterlimit:10;}
.st3{fill:#337AB7;}
</style>
<polygon class="st0" points="57.3,1.1 0.7,57.6 0.6,1.2 "/>
<g>
<path class="st1" d="M21.9,32.3c-4.4-4.4-4.4-11.5,0.1-15.9c4.5-4.4,11.7-4.4,16.2,0.1c0.2,0.2,0.3,0.3,0.5,0.5l7.2-7
c-0.3-0.4-0.7-0.8-1.1-1.1c-8.4-8.3-22-8.4-30.5-0.1s-8.5,21.7-0.1,30c0.4,0.4,0.8,0.7,1.2,1.1l7.2-7
C22.3,32.6,22.1,32.5,21.9,32.3z"/>
<path class="st1" d="M23.2,30.5c-3.6-3.6-3.6-9.4,0.1-13s9.6-3.5,13.2,0.1c0.1,0.1,0.3,0.3,0.4,0.4L23.7,30.9
C23.5,30.7,23.4,30.6,23.2,30.5z"/>
</g>
<polygon class="st2" points="57.5,1.4 1,57.9 57.5,57.9 "/>
<g>
<path class="st3" d="M35.6,26.8c4.5,4.4,4.4,11.5,0,15.9c-4.5,4.4-11.7,4.4-16.2,0c-0.2-0.2-0.3-0.3-0.5-0.5l-7.2,7
c0.3,0.4,0.7,0.8,1.1,1.1c8.4,8.3,22.1,8.3,30.5,0.1c8.4-8.3,8.5-21.7,0.1-30c-0.4-0.4-0.8-0.7-1.2-1.1l-7.2,7
C35.3,26.5,35.4,26.6,35.6,26.8z"/>
<path class="st3" d="M34.3,28.6c3.6,3.6,3.6,9.4,0,13c-3.7,3.6-9.6,3.6-13.2,0c-0.1-0.1-0.3-0.3-0.4-0.4l13.2-12.9
C34,28.4,34.1,28.5,34.3,28.6z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200"><path fill="#36424A" d="M56.2 196C27.9 196 5 173 5 144.8V4h138.9C172.1 4 195 27 195 55.2V196H56.2z"/><path fill="#6CC39D" d="M143.8 6.5c26.9 0 48.7 21.9 48.7 48.7v138.2H56.2c-26.9 0-48.7-21.9-48.7-48.7V6.5h136.3m0-5H2.5v143.2c0 29.7 24.1 53.7 53.7 53.7h141.4V55.2c-.1-29.6-24.1-53.7-53.8-53.7z"/><path d="M74.2 88.1c0 7-2 12.3-5.9 15.7-3.9 3.5-9.6 5.2-17 5.2-2.3 0-4.7-.2-7.1-.7-2.4-.5-4.5-1.3-6.5-2.4-2-1.1-3.6-2.6-4.9-4.5-1.3-1.9-2.1-4.1-2.3-6.9h10.3c.3 1.4.8 2.6 1.5 3.5.7.9 1.6 1.6 2.6 2.1s2.1.8 3.3 1c1.2.1 2.5.2 3.8.2 4.1 0 7.2-1 9.1-3.1 1.9-2 2.9-5 2.9-8.8v-7.1h-.2c-1.4 2.6-3.4 4.6-5.9 6-2.5 1.4-5.2 2.2-8.1 2.2-3.7 0-6.9-.6-9.5-1.9-2.6-1.3-4.8-3.1-6.5-5.3-1.7-2.3-3-4.9-3.7-7.8-.8-2.9-1.2-6.1-1.2-9.5 0-3.1.5-6.1 1.4-8.9 1-2.8 2.3-5.3 4.1-7.4 1.8-2.1 4-3.8 6.6-5.1 2.6-1.3 5.6-1.9 8.9-1.9 2.9 0 5.7.6 8.1 1.8 2.5 1.2 4.4 3.2 5.7 5.8h.2v-6.4h10.3v44.2zm-22.8-5.7c2.3 0 4.2-.5 5.8-1.4 1.6-.9 2.9-2.2 3.9-3.7s1.7-3.3 2.2-5.2c.5-2 .7-3.9.7-5.9s-.2-3.9-.7-5.8c-.5-1.9-1.2-3.5-2.2-5-1-1.4-2.3-2.6-3.9-3.4-1.6-.8-3.5-1.3-5.7-1.3-2.3 0-4.2.5-5.8 1.4-1.6 1-2.8 2.2-3.8 3.7s-1.7 3.3-2.1 5.2c-.4 2-.6 3.9-.6 5.8s.2 3.8.7 5.6c.5 1.8 1.2 3.5 2.2 4.9s2.3 2.6 3.8 3.5c1.5 1.1 3.3 1.6 5.5 1.6zm51.2 9.4c-3.7 0-7.1-.6-10-1.8-2.9-1.2-5.4-2.9-7.4-5.1-2-2.2-3.5-4.7-4.6-7.8-1.1-3-1.6-6.3-1.6-9.9 0-3.5.5-6.8 1.6-9.8 1.1-3 2.6-5.6 4.6-7.8 2-2.2 4.5-3.9 7.4-5.1 2.9-1.2 6.2-1.8 10-1.8s7.1.6 10 1.8c2.9 1.2 5.4 2.9 7.4 5.1 2 2.2 3.5 4.8 4.6 7.8 1.1 3 1.6 6.3 1.6 9.8 0 3.6-.5 6.9-1.6 9.9s-2.6 5.6-4.6 7.8c-2 2.2-4.5 3.9-7.4 5.1-2.9 1.1-6.3 1.8-10 1.8zm0-8.2c2.3 0 4.3-.5 6-1.4 1.7-1 3.1-2.2 4.2-3.8 1.1-1.6 1.9-3.3 2.4-5.3s.8-4 .8-6-.3-4-.8-6-1.3-3.7-2.4-5.3c-1.1-1.5-2.5-2.8-4.2-3.7-1.7-1-3.7-1.4-6-1.4s-4.3.5-6 1.4c-1.7 1-3.1 2.2-4.1 3.7-1.1 1.5-1.9 3.3-2.4 5.3s-.8 4-.8 6 .3 4 .8 6 1.3 3.7 2.4 5.3c1.1 1.6 2.5 2.8 4.1 3.8 1.7 1 3.7 1.4 6 1.4zm24.2-39.7H138l11.8 35.8h.2l11.4-35.8H172l-16.7 46.6h-11.5l-17-46.6zm-97.7 96.5c0-3.6.5-7 1.6-10.1 1.1-3.1 2.6-5.9 4.6-8.2 2-2.3 4.5-4.1 7.4-5.5 2.9-1.3 6.2-2 9.9-2 2.9 0 5.4.4 7.5 1.1 2.1.8 3.9 1.7 5.3 2.8 1.4 1.1 2.6 2.4 3.6 3.7.9 1.3 1.6 2.6 2.1 3.8.5 1.2.8 2.2 1 3 .2.9.3 1.3.3 1.4h-3c-.3-2.1-1-3.9-2-5.6-1-1.6-2.3-3-3.8-4.2-1.5-1.1-3.2-2-5.1-2.6-1.9-.6-3.8-.9-5.9-.9-3.2 0-6.1.6-8.6 1.9-2.5 1.2-4.7 2.9-6.4 5-1.7 2.1-3.1 4.5-4 7.3-.9 2.8-1.4 5.8-1.4 9s.5 6.2 1.4 9c.9 2.8 2.3 5.3 4 7.3 1.7 2.1 3.9 3.8 6.4 5 2.5 1.2 5.4 1.9 8.6 1.9 2.4 0 4.6-.5 6.7-1.5 2.1-1 3.9-2.3 5.5-3.9s2.8-3.5 3.8-5.7c.9-2.1 1.5-4.4 1.6-6.7h3c-.3 2.9-1 5.7-2.2 8.1-1.2 2.5-2.7 4.6-4.5 6.4-1.8 1.8-3.9 3.2-6.3 4.2s-4.9 1.5-7.7 1.5c-3.7 0-7-.7-9.9-2-2.9-1.3-5.4-3.2-7.4-5.5s-3.5-5.1-4.6-8.2c-1-2.8-1.5-6.2-1.5-9.8zm50.4-24.6h4.3l19.2 45.9h.1l19-45.9h4.3V165h-3v-45.5h-.1L104.6 165h-3l-19-45.5h-.1V165h-3v-49.2zm87.9 14.1c-.1-2.1-.5-4-1.3-5.5-.8-1.6-1.9-2.9-3.3-3.9-1.4-1.1-3-1.8-4.9-2.4-1.9-.5-4-.8-6.2-.8-1.4 0-2.9.2-4.4.5s-3.1.9-4.4 1.7c-1.4.8-2.5 1.9-3.3 3.2-.9 1.4-1.3 3-1.3 5.1 0 2 .5 3.6 1.4 4.8 1 1.2 2.2 2.2 3.8 3 1.6.8 3.4 1.4 5.4 1.8 2 .5 4.1.9 6.1 1.3 2.1.4 4.2.9 6.2 1.5s3.8 1.4 5.4 2.3c1.6 1 2.9 2.3 3.8 3.9 1 1.6 1.4 3.6 1.4 6 0 2.6-.6 4.7-1.7 6.5-1.1 1.7-2.5 3.2-4.2 4.3-1.7 1.1-3.5 1.9-5.6 2.4-2 .5-4 .7-5.9.7-2.9 0-5.6-.3-8.1-.9-2.5-.6-4.7-1.6-6.6-3-1.9-1.4-3.4-3.2-4.4-5.4s-1.6-4.9-1.6-8.1h3c-.1 2.7.3 5 1.2 6.9.9 1.9 2.2 3.4 3.8 4.6 1.6 1.2 3.6 2.1 5.8 2.6 2.2.5 4.5.8 7 .8 1.5 0 3-.2 4.7-.6 1.7-.4 3.2-1 4.6-1.9 1.4-.9 2.6-2 3.5-3.4.9-1.4 1.4-3.2 1.4-5.4 0-2.1-.5-3.8-1.4-5.1-1-1.3-2.2-2.4-3.8-3.2-1.6-.8-3.4-1.4-5.4-1.9-2-.5-4.1-.9-6.2-1.3-2.1-.4-4.1-.9-6.1-1.4-2-.6-3.8-1.3-5.4-2.2-1.6-.9-2.8-2.2-3.8-3.7s-1.4-3.4-1.4-5.8c0-2.3.5-4.4 1.5-6 1-1.7 2.3-3 3.9-4.1s3.4-1.8 5.3-2.3c2-.5 3.9-.7 5.9-.7 2.6 0 5 .3 7.2.9 2.2.6 4.2 1.5 5.9 2.7s3 2.8 4 4.7c1 1.9 1.6 4.3 1.7 7h-3.2z" fill="#FFF"/></svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -27,7 +27,9 @@ var wappalyzer = (function() {
* Calculate confidence total * Calculate confidence total
*/ */
getConfidence: function() { getConfidence: function() {
var total = 0, id; var
id,
total = 0;
for ( id in this.confidence ) { for ( id in this.confidence ) {
total += this.confidence[id]; total += this.confidence[id];
@ -67,7 +69,7 @@ var wappalyzer = (function() {
this.detected = true; this.detected = true;
// Set confidence level // Set confidence level
this.confidence[type + ' ' + ( key ? key + ' ' : '' ) + pattern.regex] = pattern.confidence ? pattern.confidence : 100; this.confidence[type + ' ' + ( key ? key + ' ' : '' ) + pattern.regex] = pattern.confidence || 100;
// Detect version number // Detect version number
if ( pattern.version ) { if ( pattern.version ) {
@ -81,15 +83,11 @@ var wappalyzer = (function() {
var ternary = new RegExp('\\\\' + i + '\\?([^:]+):(.*)$').exec(version); var ternary = new RegExp('\\\\' + i + '\\?([^:]+):(.*)$').exec(version);
if ( ternary && ternary.length === 3 ) { if ( ternary && ternary.length === 3 ) {
w.log({ match: match, i: i, ternary: ternary });
version = version.replace(ternary[0], match ? ternary[1] : ternary[2]); version = version.replace(ternary[0], match ? ternary[1] : ternary[2]);
w.log({ version: version });
} }
// Replace back references // Replace back references
version = version.replace(new RegExp('\\\\' + i, 'g'), match ? match : ''); version = version.replace(new RegExp('\\\\' + i, 'g'), match || '');
}); });
if ( version && this.versions.indexOf(version) < 0 ) { if ( version && this.versions.indexOf(version) < 0 ) {
@ -102,20 +100,20 @@ var wappalyzer = (function() {
} }
}; };
var asArray = function(value) {
return typeof value === 'string' ? [ value ] : value;
};
/** /**
* Call driver functions * Call driver functions
*/ */
var driver = function(func, args) { var driver = function(func, args) {
if ( typeof w.driver[func] !== 'function' ) { if ( typeof w.driver[func] !== 'function' ) {
w.log('not implemented: w.driver.' + func, 'warn'); w.log('not implemented: w.driver.' + func, 'core', 'warn');
return; return;
} }
if ( func !== 'log' ) {
w.log('w.driver.' + func);
}
return w.driver[func](args); return w.driver[func](args);
}; };
@ -127,25 +125,17 @@ var wappalyzer = (function() {
key, key,
parsed = {}; parsed = {};
// Convert array to object containing array
if ( patterns instanceof Array ) {
patterns = { main: patterns }
}
// Convert string to object containing array containing string // Convert string to object containing array containing string
if ( typeof patterns === 'string' ) { if ( typeof patterns === 'string' || patterns instanceof Array ) {
patterns = { main: [ patterns ] }; patterns = {
main: asArray(patterns)
};
} }
for ( key in patterns ) { for ( key in patterns ) {
parsed[key] = []; parsed[key] = [];
// Convert string to array containing string asArray(patterns[key]).forEach(function(pattern) {
if ( typeof patterns[key] === 'string' ) {
patterns[key] = [ patterns[key] ];
}
patterns[key].forEach(function(pattern) {
var attrs = {}; var attrs = {};
pattern.split('\\;').forEach(function(attr, i) { pattern.split('\\;').forEach(function(attr, i) {
@ -164,7 +154,7 @@ var wappalyzer = (function() {
} catch (e) { } catch (e) {
attrs.regex = new RegExp(); attrs.regex = new RegExp();
w.log(e + ': ' + attr, 'error'); w.log(e + ': ' + attr, 'error', 'core');
} }
} }
}); });
@ -187,7 +177,9 @@ var wappalyzer = (function() {
var w = { var w = {
apps: {}, apps: {},
cats: null, cats: null,
ping: { hostnames: {} }, ping: {
hostnames: { }
},
adCache: [], adCache: [],
detected: {}, detected: {},
@ -197,36 +189,34 @@ var wappalyzer = (function() {
githubURL: 'https://github.com/AliasIO/Wappalyzer', githubURL: 'https://github.com/AliasIO/Wappalyzer',
}, },
validation: {
hostname: /(www.)?((.+?)\.(([a-z]{2,3}\.)?[a-z]{2,6}))$/,
hostnameBlacklist: /((local|dev(elopment)?|stag(e|ing)?|test(ing)?|demo(shop)?|admin|google|cache)\.|\/admin|\.local)/
},
/** /**
* Log messages to console * Log messages to console
*/ */
log: function(message, type) { log: function(message, source, type) {
if ( type === undefined ) { driver('log', {
type = 'debug'; source: source || '',
} message: JSON.stringify(message),
type: type || 'debug'
if ( typeof message === 'object' ) { });
message = JSON.stringify(message);
}
driver('log', { message: message, type: type });
}, },
/** /**
* Initialize * Initialize
*/ */
init: function() { init: function() {
w.log('w.init'); w.log('Function call: w.init()', 'core');
// Checks
if ( w.driver === undefined ) {
w.log('no driver, exiting');
return;
}
// Initialize driver // Initialize driver
if ( w.driver !== undefined ) {
driver('init'); driver('init');
} else {
w.log('No driver, exiting', 'core');
}
}, },
/** /**
@ -237,10 +227,10 @@ var wappalyzer = (function() {
app, app,
apps = {}; apps = {};
w.log('w.analyze'); w.log('Function call: w.analyze()', 'core');
if ( w.apps === undefined || w.categories === undefined ) { if ( w.apps === undefined || w.categories === undefined ) {
w.log('apps.json not loaded, check for syntax errors'); w.log('apps.json not loaded, check for syntax errors', 'core');
return; return;
} }
@ -290,7 +280,9 @@ var wappalyzer = (function() {
w.cacheDetectedApps(apps, url); w.cacheDetectedApps(apps, url);
w.trackDetectedApps(apps, url, hostname, data.html); w.trackDetectedApps(apps, url, hostname, data.html);
w.log(Object.keys(apps).length + ' apps detected: ' + Object.keys(apps).join(', ') + ' on ' + url); if ( Object.keys(apps).length ) {
w.log(Object.keys(apps).length + ' apps detected: ' + Object.keys(apps).join(', ') + ' on ' + url, 'core');
}
driver('displayApps'); driver('displayApps');
}, },
@ -303,11 +295,7 @@ var wappalyzer = (function() {
// Exclude app in detected apps only // Exclude app in detected apps only
for ( app in apps ) { for ( app in apps ) {
if ( w.apps[app].excludes ) { if ( w.apps[app].excludes ) {
if ( typeof w.apps[app].excludes === 'string' ) { asArray(w.apps[app].excludes).forEach(function(excluded) {
w.apps[app].excludes = [ w.apps[app].excludes ];
}
w.apps[app].excludes.forEach(function(excluded) {
excludes.push(excluded); excludes.push(excluded);
}); });
} }
@ -336,16 +324,11 @@ var wappalyzer = (function() {
confidence = apps[app].confidence; confidence = apps[app].confidence;
if ( w.apps[app] && w.apps[app].implies ) { if ( w.apps[app] && w.apps[app].implies ) {
// Cast strings to an array asArray(w.apps[app].implies).forEach(function(implied) {
if ( typeof w.apps[app].implies === 'string' ) {
w.apps[app].implies = [ w.apps[app].implies ];
}
w.apps[app].implies.forEach(function(implied) {
implied = parsePatterns(implied)[0]; implied = parsePatterns(implied)[0];
if ( !w.apps[implied.string] ) { if ( !w.apps[implied.string] ) {
w.log('Implied application ' + implied.string + ' does not exist', 'warn'); w.log('Implied application ' + implied.string + ' does not exist', 'core', 'warn');
return; return;
} }
@ -391,8 +374,7 @@ var wappalyzer = (function() {
var app, match; var app, match;
for ( app in apps ) { for ( app in apps ) {
if ( w.detected[url][app].getConfidence() >= 100 ) { if ( w.detected[url][app].getConfidence() >= 100 && w.validation.hostname.test(hostname) && !w.validation.hostnameBlacklist.test(url) ) {
if ( /(www.)?((.+?)\.(([a-z]{2,3}\.)?[a-z]{2,6}))$/.test(hostname) && !/((local|dev(elopment)?|stag(e|ing)?|test(ing)?|demo(shop)?|admin|google|cache)\.|\/admin|\.local)/.test(url) ) {
if ( !w.ping.hostnames.hasOwnProperty(hostname) ) { if ( !w.ping.hostnames.hasOwnProperty(hostname) ) {
w.ping.hostnames[hostname] = { w.ping.hostnames[hostname] = {
applications: {}, applications: {},
@ -411,9 +393,6 @@ var wappalyzer = (function() {
if ( apps[app].version ) { if ( apps[app].version ) {
w.ping.hostnames[hostname].applications[app].version = apps[app].version; w.ping.hostnames[hostname].applications[app].version = apps[app].version;
} }
} else {
w.log('Ignoring hostname "' + hostname + '"');
}
} }
} }
@ -516,7 +495,7 @@ var wappalyzer = (function() {
header, header,
patterns = parsePatterns(w.apps[app.app].headers); patterns = parsePatterns(w.apps[app.app].headers);
if ( patterns.length && headers ) { if ( headers ) {
for ( header in patterns ) { for ( header in patterns ) {
patterns[header].forEach(function(pattern) { patterns[header].forEach(function(pattern) {
header = header.toLowerCase(); header = header.toLowerCase();

Loading…
Cancel
Save