From fd9c20c700f10796a7aaf429095991c19b25d51c Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Sat, 3 Feb 2018 09:05:36 +1100 Subject: [PATCH 001/175] Escape meta characters --- src/apps.json | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/apps.json b/src/apps.json index 2dcff4fba..201cbddc3 100644 --- a/src/apps.json +++ b/src/apps.json @@ -657,7 +657,7 @@ 22 ], "headers": { - "Server": "(?:Apache(?:$|/([\\d.]+)|[^/-])|(?:^|\b)HTTPD)\\;version:\\1" + "Server": "(?:Apache(?:$|/([\\d.]+)|[^/-])|(?:^|\\b)HTTPD)\\;version:\\1" }, "icon": "Apache.svg", "website": "http://apache.org" @@ -696,7 +696,7 @@ ], "headers": { "Server": "^Apache-Coyote(/1\\.1)?$\\;version:\\1?4.1+:", - "X-Powered-By": "\bTomcat\b(?:-([\\d.]+))?\\;version:\\1" + "X-Powered-By": "\\bTomcat\\b(?:-([\\d.]+))?\\;version:\\1" }, "icon": "Apache Tomcat.svg", "implies": "Java", @@ -1245,7 +1245,7 @@ ], "html": [ "(?: - -image/svg+xml \ No newline at end of file + \ No newline at end of file From 49c19869cb836d5575e01e7a86c83ea73c2d0979 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 9 Feb 2018 02:38:59 +0100 Subject: [PATCH 009/175] Add a way to get modernizr version via "js" (#2074) This can be verified [here](https://www.spip.net/en_rubrique25.html) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 6e6c20c65..005e775b4 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6003,7 +6003,7 @@ 12 ], "js": { - "Modernizr": "" + "Modernizr._version": "(.*)\\;version:\\1" }, "icon": "Modernizr.svg", "script": [ From 484d2e3ce77921eca9b165c4124d204131a62aca Mon Sep 17 00:00:00 2001 From: Camille Barneaud <1693643+gadcam@users.noreply.github.com> Date: Fri, 9 Feb 2018 02:39:55 +0100 Subject: [PATCH 010/175] Update js patterns & add version detection - MediaElement.js --> Plesk + Some removed apps (#2070) --- src/apps.json | 182 ++++++++++++++------------------------- src/icons/Nedstat.png | Bin 331 -> 0 bytes src/icons/Neonclear.png | Bin 4372 -> 0 bytes src/icons/Penguin.svg | 1 - src/icons/Petrojs.png | Bin 480 -> 0 bytes src/icons/Piano Solo.png | Bin 1626 -> 0 bytes 6 files changed, 67 insertions(+), 116 deletions(-) delete mode 100644 src/icons/Nedstat.png delete mode 100644 src/icons/Neonclear.png delete mode 100644 src/icons/Penguin.svg delete mode 100644 src/icons/Petrojs.png delete mode 100644 src/icons/Piano Solo.png diff --git a/src/apps.json b/src/apps.json index 005e775b4..7f10550db 100644 --- a/src/apps.json +++ b/src/apps.json @@ -5787,7 +5787,7 @@ ], "js": { "Meteor": "", - "METEOR_VERSION": "" + "Meteor.release": "^METEOR@([\\d.]+)\\;version:\\1" }, "html": "]+__meteor-css__", "icon": "Meteor.png", @@ -5795,15 +5795,12 @@ "MongoDB", "Node.js" ], - "website": "http://meteor.com" + "website": "https://www.meteor.com" }, "Methode": { "cats": [ 1 ], - "js": { - "eidosBase": "" - }, "html": "", "icon": "Methode.png", "meta": { @@ -5813,7 +5810,7 @@ "eomportal-loid": "[\\d.]+", "eomportal-uuid": "[a-f\\d]+" }, - "website": "http://www.eidosmedia.com/solutions" + "website": "https://www.eidosmedia.com/" }, "Microsoft ASP.NET": { "cats": [ @@ -5881,7 +5878,8 @@ 1 ], "js": { - "_spBodyOnLoadCalled": "" + "_spBodyOnLoadCalled": "", + "SPDesignerProgID": "" }, "headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", @@ -5893,7 +5891,7 @@ "meta": { "generator": "Microsoft SharePoint" }, - "website": "http://sharepoint.microsoft.com" + "website": "https://sharepoint.microsoft.com" }, "Microsoft Word": { "cats": [ @@ -5954,18 +5952,18 @@ }, "icon": "Mint.png", "script": "mint/\\?js", - "website": "http://haveamint.com" + "website": "https://haveamint.com" }, "Mixpanel": { "cats": [ 10 ], "js": { - "Mixpanel": "" + "mixpanel": "" }, "icon": "Mixpanel.png", "script": "api\\.mixpanel\\.com/track", - "website": "http://mixpanel.com" + "website": "https://mixpanel.com" }, "Mobify": { "cats": [ @@ -5975,19 +5973,20 @@ "Mobify": "" }, "icon": "Mobify.png", - "script": "mobify\\.com", - "website": "http://www.mobify.com" + "script": "//cdn\\.mobify\\.com/", + "website": "https://www.mobify.com" }, "MochiKit": { "cats": [ 12 ], "js": { - "MochiKit": "" + "MochiKit": "", + "MochiKit.MochiKit.VERSION": "(.*)\\;version:\\1" }, "icon": "MochiKit.png", "script": "MochiKit(?:\\.min)?\\.js", - "website": "http://mochikit.com" + "website": "https://mochi.github.io/mochikit/" }, "MochiWeb": { "cats": [ @@ -6010,7 +6009,7 @@ "modernizr(?:-([\\d.]*[\\d]))?.*\\.js\\;version:\\1", "/([\\d.]+)/modernizr(?:\\.min)?\\.js\\;version:\\1" ], - "website": "http://www.modernizr.com" + "website": "https://modernizr.com" }, "Modified": { "cats": [ @@ -6042,7 +6041,7 @@ "icon": "MoinMoin.png", "implies": "Python", "script": "moin(?:_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\1.\\2.\\3", - "website": "http://moinmo.in" + "website": "https://moinmo.in" }, "Mojolicious": { "cats": [ @@ -6079,11 +6078,12 @@ 12 ], "js": { - "moment": "" + "moment": "", + "moment.version": "(.*)\\;version:\\1" }, "icon": "Moment.js.svg", "script": "moment(?:\\.min)?\\.js", - "website": "http://momentjs.com" + "website": "https://momentjs.com" }, "Mondo Media": { "cats": [ @@ -6151,25 +6151,27 @@ "icon": "Mono.net.png", "implies": "Piwik", "script": "monotracker(?:\\.min)?\\.js", - "website": "http://www.mono.net" + "website": "https://www.mono.net/en" }, "MooTools": { "cats": [ 12 ], "js": { - "MooTools": "" + "MooTools": "", + "MooTools.version": "(.*)\\;version:\\1" }, "icon": "MooTools.png", "script": "mootools.*\\.js", - "website": "http://mootools.net" + "website": "https://mootools.net" }, "Moodle": { "cats": [ 21 ], "js": { - "moodle": "" + "Y.Moodle": "", + "M.core": "" }, "headers": { "Set-Cookie": "(?:MoodleSession|MOODLEID_)" @@ -6262,11 +6264,12 @@ 12 ], "js": { - "Mustache": "" + "Mustache": "", + "Mustache.version": "(.*)\\;version:\\1" }, "icon": "Mustache.png", "script": "mustache(?:\\.min)?\\.js", - "website": "http://mustache.github.com" + "website": "https://mustache.github.io" }, "MyBB": { "cats": [ @@ -6281,7 +6284,7 @@ "PHP", "MySQL" ], - "website": "http://www.mybb.com" + "website": "https://mybb.com" }, "MyBlogLog": { "cats": [ @@ -6321,7 +6324,8 @@ 25 ], "js": { - "nv": "\\;confidence:20" + "nv.addGraph": "", + "nv.version": "(.*)\\;confidence:0\\;version:\\1" }, "html": "]* href=[^>]+nv\\.d3(?:\\.min)?\\.css", "icon": "NVD3.png", @@ -6337,16 +6341,6 @@ "script": "tag\\.navdmp\\.com", "website": "https://www.navegg.com/" }, - "Nedstat": { - "cats": [ - 10 - ], - "js": { - "sitestat": "" - }, - "icon": "Nedstat.png", - "website": "http://www.nedstat.com" - }, "NEO - Omnichannel Commerce Platform": { "cats": [ 6 @@ -6357,17 +6351,6 @@ "icon": "Plataforma NEO.svg", "website": "http://www.jetecommerce.com.br/" }, - "Neonclear": { - "cats": [ - 12 - ], - "icon": "Neonclear.png", - "js": { - "neon": "" - }, - "script": "/neonclear(?:\\.min|\\.dev)?\\.js", - "website": "http://neon.atm.re" - }, "Neos CMS": { "cats": [ 1 @@ -6434,7 +6417,7 @@ }, "icon": "Neto.svg", "script": "jquery\\.neto.*\\.js", - "website": "http://www.neto.com.au" + "website": "https://www.neto.com.au" }, "Netsuite": { "cats": [ @@ -6451,7 +6434,8 @@ 18 ], "js": { - "Nette": "" + "Nette": "", + "Nette.version": "(.*)\\;version:\\1" }, "headers": { "Set-Cookie": "nette-browser=", @@ -6464,17 +6448,18 @@ ], "icon": "Nette Framework.png", "implies": "PHP", - "website": "http://nette.org" + "website": "https://nette.org" }, "New Relic": { "cats": [ 10 ], "js": { - "NREUM": "" + "NREUM": "", + "newrelic": "" }, "icon": "New Relic.png", - "website": "http://newrelic.com" + "website": "https://newrelic.com" }, "NextGEN Gallery": { "cats": [ @@ -6507,7 +6492,7 @@ "webpack", "Node.js" ], - "website": "https://zeit.co/next" + "website": "https://github.com/zeit/next.js" }, "Nginx": { "cats": [ @@ -6566,11 +6551,12 @@ "oxTopMenu": "", "oxModalPopup": "", "oxLoginBox": "", - "oxInputValidator": "" + "oxInputValidator": "", + "oxCookieNote": "" }, "html": "", "icon": "Open Web Analytics.png", - "website": "http://openwebanalytics.com" + "website": "http://www.openwebanalytics.com" }, "Open eShop": { "cats": [ @@ -6761,11 +6748,12 @@ 35 ], "js": { - "OpenLayers": "" + "ol.CanvasMap": "", + "OpenLayers.VERSION_NUMBER": "([\\d.]+)\\;version:\\1" }, "icon": "OpenLayers.png", "script": "openlayers", - "website": "http://openlayers.org" + "website": "https://openlayers.org" }, "OpenNemas": { "cats": [ @@ -6890,7 +6878,7 @@ }, "icon": "Optimizely.png", "script": "optimizely\\.com.*\\.js", - "website": "http://optimizely.com" + "website": "https://www.optimizely.com" }, "Oracle Application Server": { "cats": [ @@ -6979,11 +6967,11 @@ ], "js": { "OutbrainPermaLink": "", - "OB_releaseVer": "" + "OB_releaseVer": "(.*)\\;version:\\1" }, "icon": "Outbrain.png", "script": "widgets\\.outbrain\\.com/outbrain\\.js", - "website": "http://outbrain.com" + "website": "https://www.outbrain.com" }, "Outlook Web App": { "cats": [ @@ -7013,12 +7001,13 @@ 19 ], "js": { - "PDFJS": "" + "PDFJS": "", + "PDFJS.version": "(.*)\\;version:\\1" }, "html": "<\\/div>\\s*\\s*<\\/div>", "icon": "PDF.js.svg", "url": "/web/viewer\\.html?file=[^&]\\.pdf", - "website": "http://mozilla.github.io/pdf.js/" + "website": "https://mozilla.github.io/pdf.js/" }, "PHP": { "cats": [ @@ -7081,7 +7070,7 @@ "X-Pardot-Rsp": "" }, "icon": "Pardot.png", - "website": "http://pardot.com" + "website": "https://www.pardot.com" }, "Parse.ly": { "cats": [ @@ -7091,21 +7080,22 @@ "PARSELY": "" }, "icon": "Parse.ly.png", - "website": "http://parse.ly" + "website": "https://www.parse.ly" }, "Paths.js": { "cats": [ 25 ], "script": "paths(?:\\.min)?\\.js", - "website": "http://github.com/andreaferretti/paths-js" + "website": "https://github.com/andreaferretti/paths-js" }, "Braintree": { "cats": [ 41 ], "js": { - "braintree": "" + "Braintree": "", + "Braintree.version": "(.*)\\;version:\\1" }, "icon": "Braintree.svg", "website": "https://www.braintreepayments.com" @@ -7115,7 +7105,7 @@ 41 ], "js": { - "adyen.encrypt.version": "(.*)\\;version:\\1\\;confidence:50" + "adyen.encrypt.version": "(.*)\\;version:\\1" }, "icon": "Adyen.svg", "website": "https://www.adyen.com" @@ -7130,7 +7120,7 @@ "html": "]+_s-xclick", "icon": "PayPal.svg", "script": "paypalobjects\\.com/js", - "website": "http://paypal.com" + "website": "https://paypal.com" }, "PencilBlue": { "cats": [ @@ -7144,18 +7134,6 @@ "implies": "Node.js", "website": "http://pencilblue.org" }, - "Penguin": { - "cats": [ - 18 - ], - "js": { - "penguin": "" - }, - "html": "]+?href=\"[^\"]+penguin(?:\\.min)?\\.css", - "icon": "Penguin.svg", - "script": "penguin(?:\\.min)?\\.js", - "website": "http://penguin.docs.bqws.io" - }, "Percussion": { "cats": [ 1 @@ -7187,20 +7165,6 @@ "icon": "Perl.png", "website": "http://perl.org" }, - "Petrojs": { - "cats": [ - 12 - ], - "js": { - "petrojs": "" - }, - "icon": "Petrojs.png", - "script": [ - "petrojs(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", - "(?:/([\\d.]+)/)?petrojs(?:\\.min)?\\.js\\;version:\\1" - ], - "website": "http://petrojs.thepetronics.com" - }, "Phabricator": { "cats": [ 13, @@ -7222,10 +7186,11 @@ 12 ], "js": { - "Phaser": "" + "Phaser": "", + "Phaser.VERSION": "(.*)\\;version:\\1" }, "icon": "Phaser.png", - "website": "http://phaser.io" + "website": "https://phaser.io" }, "Phenomic": { "cats": [ @@ -7264,19 +7229,6 @@ "icon": "Phusion Passenger.png", "website": "http://phusionpassenger.com" }, - "Piano Solo": { - "cats": [ - 43 - ], - "js": { - "PianoMedia": "" - }, - "headers": { - "Set-Cookie": "pianovisitkey" - }, - "icon": "Piano Solo.png", - "website": "http://www.pianomedia.com/products" - }, "Pimcore": { "cats": [ 1, diff --git a/src/icons/Nedstat.png b/src/icons/Nedstat.png deleted file mode 100644 index 2ffb430b5445f88f5894318e261d484fc1ada30b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331 zcmV-R0kr;!P)ueqh>tvD>N5l zMA^Ffdf$@u{s4i+15-nvd<+mDIJ?nntl`RWeRnCr zF_vt~Cjp41M9)T~bozR_Q3LXsV-3wCl*|&5zU(|@6Ny(-!W8Am?|!UO-6@xQV1agE z)|)@OCg;oh4XGc=Oqbwu`+etTwo`J1e-TZ0y1k)1r{;G%x(K0`%27fuo#UjJbUz0d dSpEmD7AO9lLuQRP?^pl;002ovPDHLkV1j6ZlP>@O diff --git a/src/icons/Neonclear.png b/src/icons/Neonclear.png deleted file mode 100644 index 0e0dcc59c4933292d8afb1564c8e7250c0cc1691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4372 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 diff --git a/src/icons/Penguin.svg b/src/icons/Penguin.svg deleted file mode 100644 index edf330b32..000000000 --- a/src/icons/Penguin.svg +++ /dev/null @@ -1 +0,0 @@ -penguin 2 \ No newline at end of file diff --git a/src/icons/Petrojs.png b/src/icons/Petrojs.png deleted file mode 100644 index a44eaa35c08f864e125ba0e4d6626cc3eb967b9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyivoN?T%DGi{r~?TNKy+qFE@u6 z<-7vQKsDLiX@wb3jmruP|FzE1n*(Du2bJv0X*^QdcdBjHg(=IgE!=!({eee&Zoa+# z>E|b)+vcq0)C0O!r6kBNn1O+li&sL@+SM;8udus!!lY^Q<}X;ZYW1c)drx1wa^>oq z51+n>@BY#ZRDaUb#WBR<^wi7Og_;ZmSTA(!HFr7Kq$=RbD*EGp{AAW<)ySrDHaWBO zvLH`a!9{FKmffDTCVX~kH^YiP&1tdB4$m8yZZR7;u*tf;zglV^Cx2 zaE>z)5csY2VM0^LotLIR-I)sR%FJ2V$}y>5wA5kR!N$+rOs?%GwAn7UK2qRedS5Gd zsrJX2`3kd{INVuhaLKqHI8`#?$d6q`kr8(8$2MtS*MG5qIpcld1=a<;7eD6O)>hp* lvBk%8jqBtoReQQ@7>zELl`Z|Z^E}W~44$rjF6*2Ung9WH%U%Eg diff --git a/src/icons/Piano Solo.png b/src/icons/Piano Solo.png deleted file mode 100644 index 1d4be842cde8d77a0c49d91804b574ff91e6e92f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1626 zcmV-g2BrClP)onUmy>if{B6*pxJbJwCM*`D;db!V6g|So_?Pm5bhgH)-Z^ zPqi6vNUD(=ZU#6=t4*U(VowsHj)Z84Al%5@uLMHOj1YA=QB|iJaUz&~FxD%{V3$$q z`rLz>p(-R6)JzrQ%KSw@xQIX3EpsIKb*Ir^nS?DV`rfY%o zd5We*5JBYnP*8(tN`gi#MpOg?qDBU#!B;;~=FxlaAjy)>YwtMoZj~oqo92(x5RxM9 zBL=aIBq}7T5seY&gk~PNv(#eW?vF7#Q08y%EHH7g$zm(Awl`(#a4$c8XcJGrewH5{ zt`gGHM{_QnoH`tchN)5y#*l0B{rlE&OS!<$U!7q8sRd5g!Fx~MZZlGLe0%#Sk8B;` z^g^9qoobP0=?BPr4Yju}m!c;zRWt@dE9WztGPaNP^TR(+a(rfiAAI&U*7PKR;hg8i z6Bl^$&?J3D&)2t&@|)x1%r*Nky*AM>gMxQtzS9M!N@6h*^2q8`*)mk%&o*q^dxxQ_$l)1151VAt)d`PBN@ zsq0k|cy;!xiV062ndR*hO=6OvF_LK1P8Y;TJ1BXGm_|Zw1XXsA3WY+8Rl@~#ZLILi z!*f(yfjmYEiI64!eTN1jh7*Vet{a6eBakMfVpxnoL{&Q+FpJb$frjKSO zh^BmV=X#t7QI!{tO!LBI=je5D^qear|ZeR@NQc%v-HNra}wB$ng}*AkGm( zj&^-ojL7GnI+P!sX(UbraYDVBGgel%uP?EAw8Dm=GN~78&A^GNDsP;r@%J+=qA%j) zYL%nIX`!SOAAY+X@;tD*Sb>Z4k85si%?7)rx%Uc@g-h) zyG|)Fyn}XxYFn6Z7(Pw$8qxpJ?>#HI_-Js74UM z%sNndA(-dflA>zwFO^>Ki9;+B^}{D$VOjY^ND9S{*oAJ%%+R>phB0E7EhNiB#RL9w z#Z$%f+V>{=Ki^1K3p#V4GZ3zNbR!qC<>91p83Dy^;zqbUnoX4iGfbCDU^i Date: Fri, 9 Feb 2018 02:41:56 +0100 Subject: [PATCH 011/175] Add a way to get mustachejs version (#2072) This can be tested [here](https://en.wikipedia.org/wiki/Token_bucket). --- src/apps.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/apps.json b/src/apps.json index 7f10550db..fdd5bf26b 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6269,6 +6269,9 @@ }, "icon": "Mustache.png", "script": "mustache(?:\\.min)?\\.js", + "js": { + "Mustache.version": "(.*)\\;version:\\1" + }, "website": "https://mustache.github.io" }, "MyBB": { From ffc7538116a62eb8504cc24e712033a3a1545397 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 9 Feb 2018 02:42:13 +0100 Subject: [PATCH 012/175] Simplify mediawiki version detection (#2071) Mediawiki versions can contain a lot of different letters, like [`1.31.0-wmf.17`](view-source:https://en.wikipedia.org/wiki/Token_bucket), so there is no need to check for numbers specifically. --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index fdd5bf26b..1736f26d4 100644 --- a/src/apps.json +++ b/src/apps.json @@ -5745,7 +5745,7 @@ "icon": "MediaWiki.png", "implies": "PHP", "meta": { - "generator": "^MediaWiki ?([\\d.]+)$\\;version:\\1" + "generator": "^MediaWiki ?(.+)$\\;version:\\1" }, "website": "http://www.mediawiki.org" }, From 0a63ef2ddd3efbf2fee4d3cf6f980792f065dd57 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Fri, 9 Feb 2018 12:48:57 +1100 Subject: [PATCH 013/175] Build v5.4.7 --- src/apps.json | 46 ++++++++++++-------------- src/drivers/npm/package.json | 2 +- src/drivers/webextension/js/driver.js | 10 +++--- src/drivers/webextension/manifest.json | 2 +- 4 files changed, 28 insertions(+), 32 deletions(-) diff --git a/src/apps.json b/src/apps.json index 1736f26d4..bb76aa837 100644 --- a/src/apps.json +++ b/src/apps.json @@ -656,7 +656,7 @@ 22 ], "headers": { - "Server": "(?:Apache(?:$|/([\\d.]+)|[^/-])|(?:^|\\b)HTTPD)\\;version:\\1" + "Server": "(?:Apache(?:$|/([\\d.]+)|[^/-])|(?:^|\b)HTTPD)\\;version:\\1" }, "icon": "Apache.svg", "website": "http://apache.org" @@ -695,7 +695,7 @@ ], "headers": { "Server": "^Apache-Coyote(/1\\.1)?$\\;version:\\1?4.1+:", - "X-Powered-By": "\\bTomcat\\b(?:-([\\d.]+))?\\;version:\\1" + "X-Powered-By": "\bTomcat\b(?:-([\\d.]+))?\\;version:\\1" }, "icon": "Apache Tomcat.svg", "implies": "Java", @@ -1244,7 +1244,7 @@ ], "html": [ "(?:", + " Date: Thu, 15 Feb 2018 23:09:34 +0100 Subject: [PATCH 027/175] Add Koha (#2093) * Add Koha This should close #2048 * Add a js patterns potted by @gadcam --- src/apps.json | 18 ++++++++++++++++++ src/icons/koha.png | Bin 0 -> 1744 bytes 2 files changed, 18 insertions(+) create mode 100644 src/icons/koha.png diff --git a/src/apps.json b/src/apps.json index decf33854..307bdad32 100644 --- a/src/apps.json +++ b/src/apps.json @@ -5005,6 +5005,24 @@ }, "website": "https://www.kobimaster.com.tr" }, + "Koha": { + "cats": [ + 21 + ], + "meta": { + "generator": "^Koha ([\\d.]+)$\\;version:\\1" + }, + "js": { + "KOHA": "" + }, + "html": [ + "", + "1~2)EP)#0LmJXm{JvZMTnobc@kMCD9*7B@r-cFfkF0n&1NzNQ6*Z$1^*-bi2HEckWDQ z2sb&|+1Z^t_xtXdbI&>V3`N~-ciV)vWo4<+r;;0n*v$Gtc9GSC3+w@Qk!1k0aDLJq z1w1P+g|hi^_^YPI$yfpGX^>HnkGhfFCZW!aUfAiu9|AZo z9;x@U=is`QC8aZy`F?h|u=2rfY7%CvwvE_obfH!*3cEW}(F44Eqt7Qj&f_o_VX?6qnz{G(M$vJ*3 z%b!n`mxP@@<{1Tm=VjE~i;FqVD1(EuTX1k{9L!>cfDekLA3OMQE!`}W7Qi$Ahmr{3 zZII-kjhzfNIX!8T&4<5K6!?%pfc2zg;LBSC)wlGb8YO}cdWSyjl2ikBbfSey1uwYA z?DsItB;vqVl%-OJb~*)a@U4;w06A;-vonZ--?&Rq{kk4hK9SB&jCq5L)vYult^oy) zPo1XlnGegbZ3sU=6#PpE848#^tP%ovS-7esg%&3st`PH0MF#F znVOt1@TH-h+npZ#nHmWI`JBY#uTdrVp`a7AM>KkCKU<;F+2;)HNW2#a9et!$0z`w~ zx;H}$&d*P31aBR{9|)T@3EIFpIVqIUg=iq)f{20q7ZTYCFm@rmsM%jzcOUQiX2+WK z0Y_=r=Ep;D<3@-X%D@Oc1?Sg-Ji#A>L8`FyV`qH;%MnTso4u%D!z&r$9)XItb3F%`k3X$#ryskn_$gvrs<0w0+OMbpVt`v^sU*m09>r@f+=*8vpTM$gEB$LB1;R5+K0HB(5%|NiJ3 zn7Wy5{BOs&d@3_nD>A?mGR*W`jn+np1n^q@!OE0Z36#*8y3zaNRLg_k3T}yYk*mlG z*A(cF=;np$0mTvE!zJCv=M&od>q5sOI{#DZy+*x*DHTb;MY4sAJ?OpgbEQ8_=Sm6Q zJb=TAm#-483~}gI5*?JK5Bov{oC5XN%+AwFtpq>-+n8AL1D`zj-GZcNcN44!fVH}n z?;O_ceUuEX7{YI}8?Q-(0COKIBVY6oVE2U9)kozjvw{2NBryBm2)>Aw>|nOJbX9zH zCmc?ek$}87D?x@$E|e8a;FM1%JDAG-x|QLua>Igb$-x(aCkckPB)+s4cJtS=`5H-P zV}5vPA^rLKkkacdfZmgf{(^4Co#`f#>j2E~(=|?}u)0-OX!Ek` zOkVT`oEwQ_pYL>)1I-a0Ev>Q%FuR$luzLJ@gJi`>JfI`Oa9?c)3Zl-;nM|po8N1OV zeA&9F>`nk*s`sEuN^Omg8Xf27Q5E|$rhz7$N~GK!EPa5wQyRFpD`4F|Z1dv3$0b3d zjx7V|Yf$$_QxCpY*0OBNz3L}`<65pAuP8}j8;;K2YILDph7QyWj+Uv~Nso&*i^`@` mcVx3WZe6QzgBPhKZ~p_Nkuu>Kj|QLs0000 Date: Thu, 15 Feb 2018 23:09:43 +0100 Subject: [PATCH 028/175] Change webpack's category (#2094) This should close #1586 --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 307bdad32..23317dce8 100644 --- a/src/apps.json +++ b/src/apps.json @@ -12077,7 +12077,7 @@ }, "webpack": { "cats": [ - 44 + 19 ], "js": { "webpackJsonp": "" From c5bb9bc12c6edc10c0560886b6389b809db3ba1b Mon Sep 17 00:00:00 2001 From: TotPeRo Date: Fri, 16 Feb 2018 00:10:02 +0200 Subject: [PATCH 029/175] fix analyzeMeta duplicate line (#2096) in analyzeMeta function the r const is declared but never used and in next if is the same code. --- src/wappalyzer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wappalyzer.js b/src/wappalyzer.js index df7e3bd1e..7efe8cc7e 100644 --- a/src/wappalyzer.js +++ b/src/wappalyzer.js @@ -450,7 +450,7 @@ class Wappalyzer { const r = new RegExp('(?:name|property)=["\']' + meta + '["\']', 'i'); - if ( new RegExp('(?:name|property)=["\']' + meta + '["\']', 'i').test(matches[0]) ) { + if (r.test(matches[0]) ) { content = matches[0].match(/content=("|')([^"']+)("|')/i); patterns[meta].forEach(pattern => { From ccdb6949f7210db64cbd4053c0cf1fb3e8befec5 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Thu, 15 Feb 2018 23:10:17 +0100 Subject: [PATCH 030/175] Add mkdocs detection (#2097) This can be verified [here](http://archerysec.info). It's a [pretty popular]( https://github.com/mkdocs/mkdocs ) software. --- src/apps.json | 10 ++++++++++ src/icons/mkdocs.png | Bin 0 -> 271 bytes 2 files changed, 10 insertions(+) create mode 100644 src/icons/mkdocs.png diff --git a/src/apps.json b/src/apps.json index 23317dce8..9b34e7ee3 100644 --- a/src/apps.json +++ b/src/apps.json @@ -5525,6 +5525,16 @@ "icon": "mhonarc.png", "website": "http://www.mhonarc.at" }, + "MkDocs": { + "cats": [ + 4 + ], + "meta": { + "generator": "^mkdocs-([\\d.]+)\\;version:\\1" + }, + "icon": "mkdocs.png", + "website": "http://www.mkdocs.org/" + }, "MOBOTIX": { "cats": [ 39 diff --git a/src/icons/mkdocs.png b/src/icons/mkdocs.png new file mode 100644 index 0000000000000000000000000000000000000000..279d831ff9ac7510f12dd7229dcaa48d83698b1d GIT binary patch literal 271 zcmV+q0r38bP)tAi~qK~0e~=~AMBXv=%> zxV+b0y>R&8p6{IR@Lew3c=}jklY?LM{u8&cDiEi*&kA+}gA0^!hn)cDNzW5b^QQ0N zB{F@D1B_BpIb(2!7QU0Fd4{Xt6;m8ymS@mSY7IXHJG#L&9zvpwMI` Date: Fri, 16 Feb 2018 14:33:00 +1100 Subject: [PATCH 031/175] Asynchronous regex execution --- src/drivers/npm/driver.js | 17 +-- src/drivers/webextension/js/content.js | 9 +- src/drivers/webextension/js/driver.js | 8 +- src/drivers/webextension/js/inject.js | 2 +- src/wappalyzer.js | 172 +++++++++++++------------ 5 files changed, 112 insertions(+), 96 deletions(-) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 651b6d9c7..7b66838a1 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -131,15 +131,16 @@ class Driver { html, scripts, js - }); - - const links = Array.from(browser.document.getElementsByTagName('a')) - .filter(link => link.protocol === 'http:' || link.protocol === 'https:') - .filter(link => link.hostname === this.origPageUrl.hostname) - .filter(link => extensions.test(link.pathname)) - .map(link => { link.hash = ''; return url.parse(link.href) }); + }) + .then(() => { + const links = Array.from(browser.document.getElementsByTagName('a')) + .filter(link => link.protocol === 'http:' || link.protocol === 'https:') + .filter(link => link.hostname === this.origPageUrl.hostname) + .filter(link => extensions.test(link.pathname)) + .map(link => { link.hash = ''; return url.parse(link.href) }); - return resolve(links); + return resolve(links); + }); }); } diff --git a/src/drivers/webextension/js/content.js b/src/drivers/webextension/js/content.js index e60df6894..36d920175 100644 --- a/src/drivers/webextension/js/content.js +++ b/src/drivers/webextension/js/content.js @@ -3,11 +3,12 @@ if ( typeof browser !== 'undefined' && typeof document.body !== 'undefined' ) { try { - var html = new XMLSerializer().serializeToString(document); + var html = new XMLSerializer().serializeToString(document).split('\n'); - if ( html.length > 100 * 1024 ) { - html = html.substring(0, 50 * 1024) + html.substring(html.length - 50 * 1024, html.length); - } + html = html + .slice(0, 1000).concat(html.slice(html.length - 1000)) + .map(line => line.substring(0, 1000)) + .join('\n'); const scripts = Array.prototype.slice .apply(document.scripts) diff --git a/src/drivers/webextension/js/driver.js b/src/drivers/webextension/js/driver.js index bce13cb97..c81f154c5 100644 --- a/src/drivers/webextension/js/driver.js +++ b/src/drivers/webextension/js/driver.js @@ -103,10 +103,10 @@ getOption('version') getOption('upgradeMessage', true) .then(upgradeMessage => { if ( upgradeMessage ) { - // openTab({ - // url: wappalyzer.config.websiteURL + 'upgraded?v' + version, - // background: true - // }); + openTab({ + url: wappalyzer.config.websiteURL + 'upgraded?v' + version, + background: true + }); } }); } diff --git a/src/drivers/webextension/js/inject.js b/src/drivers/webextension/js/inject.js index 26fc00de6..55ac2be4d 100644 --- a/src/drivers/webextension/js/inject.js +++ b/src/drivers/webextension/js/inject.js @@ -20,7 +20,7 @@ for ( let index in patterns[appName][chain] ) { const value = detectJs(chain); - if ( value ) { + if ( value && patterns[appName][chain].hasOwnProperty(index) ) { js[appName][chain][index] = value; } } diff --git a/src/wappalyzer.js b/src/wappalyzer.js index df7e3bd1e..54e2afcb3 100644 --- a/src/wappalyzer.js +++ b/src/wappalyzer.js @@ -38,7 +38,13 @@ class Wappalyzer { this.driver.log(message, source || '', type || 'debug'); } + asyncForEach(iterable, iterator) { + return Promise.all(iterable.map(item => new Promise(resolve => setTimeout(() => resolve(iterator(item)), 1)))); + } + analyze(url, data, context) { + const promises = []; + var apps = {}; if ( typeof data.html !== 'string' ) { @@ -62,52 +68,55 @@ class Wappalyzer { this.analyzeUrl(app, url); if ( data.html ) { - this.analyzeHtml(app, data.html); - this.analyzeMeta(app, data.html); + promises.push(this.analyzeHtml(app, data.html)); + promises.push(this.analyzeMeta(app, data.html)); } if ( data.scripts ) { - this.analyzeScripts(app, data.scripts); + promises.push(this.analyzeScripts(app, data.scripts)); } if ( data.headers ) { - this.analyzeHeaders(app, data.headers); + promises.push(this.analyzeHeaders(app, data.headers)); } if ( data.env ) { - this.analyzeEnv(app, data.env); - } - - if ( data.robotsTxt ) { - this.analyzeRobotsTxt(app, data.robotsTxt); + promises.push(this.analyzeEnv(app, data.env)); } }) if ( data.js ) { Object.keys(data.js).forEach(appName => { - this.analyzeJs(apps[appName], data.js[appName]); + promises.push(this.analyzeJs(apps[appName], data.js[appName])); }); } - Object.keys(apps).forEach(appName => { - var app = apps[appName]; + return new Promise(resolve => { + Promise.all(promises) + .then(() => { + Object.keys(apps).forEach(appName => { + var app = apps[appName]; - if ( !app.detected || !app.getConfidence() ) { - delete apps[app.name]; - } - }); + if ( !app.detected || !app.getConfidence() ) { + delete apps[app.name]; + } + }); - this.resolveExcludes(apps); - this.resolveImplies(apps, url.canonical); + this.resolveExcludes(apps); + this.resolveImplies(apps, url.canonical); - this.cacheDetectedApps(apps, url.canonical); - this.trackDetectedApps(apps, url, language); + this.cacheDetectedApps(apps, url.canonical); + this.trackDetectedApps(apps, url, language); - if ( Object.keys(apps).length ) { - this.log(Object.keys(apps).length + ' apps detected: ' + Object.keys(apps).join(', ') + ' on ' + url.canonical, 'core'); - } + if ( Object.keys(apps).length ) { + this.log(Object.keys(apps).length + ' apps detected: ' + Object.keys(apps).join(', ') + ' on ' + url.canonical, 'core'); + } + + this.driver.displayApps(this.detected[url.canonical], { language }, context); - this.driver.displayApps(this.detected[url.canonical], { language }, context); + resolve(); + }); + }); } /** @@ -393,13 +402,15 @@ class Wappalyzer { analyzeUrl(app, url) { var patterns = this.parsePatterns(app.props.url); - if ( patterns.length ) { - patterns.forEach(pattern => { - if ( pattern.regex.test(url.canonical) ) { - this.addDetected(app, pattern, 'url', url.canonical); - } - }); + if ( !patterns.length ) { + return Promise.resolve(); } + + return this.asyncForEach(patterns, pattern => { + if ( pattern.regex.test(url.canonical) ) { + this.addDetected(app, pattern, 'url', url.canonical); + } + }); } /** @@ -408,13 +419,15 @@ class Wappalyzer { analyzeHtml(app, html) { var patterns = this.parsePatterns(app.props.html); - if ( patterns.length ) { - patterns.forEach(pattern => { - if ( pattern.regex.test(html) ) { - this.addDetected(app, pattern, 'html', html); - } - }); + if ( !patterns.length ) { + return Promise.resolve(); } + + return this.asyncForEach(patterns, pattern => { + if ( pattern.regex.test(html) ) { + this.addDetected(app, pattern, 'html', html); + } + }); } /** @@ -423,67 +436,75 @@ class Wappalyzer { analyzeScripts(app, scripts) { var patterns = this.parsePatterns(app.props.script); - if ( patterns.length ) { - patterns.forEach(pattern => { - var match; + if ( !patterns.length ) { + return Promise.resolve(); + } - scripts.forEach(uri => { - if ( pattern.regex.test(uri) ) { - this.addDetected(app, pattern, 'script', uri); - } - }); + return this.asyncForEach(patterns, pattern => { + var match; + + scripts.forEach(uri => { + if ( pattern.regex.test(uri) ) { + this.addDetected(app, pattern, 'script', uri); + } }); - } + }); } /** * Analyze meta tag */ analyzeMeta(app, html) { - var regex = /]+>/ig; - var patterns = this.parsePatterns(app.props.meta); + const regex = /]+>/ig; + const patterns = this.parsePatterns(app.props.meta); + const promises = []; + var content = ''; var matches = []; while ( patterns && ( matches = regex.exec(html) ) ) { for ( var meta in patterns ) { - const r = new RegExp('(?:name|property)=["\']' + meta + '["\']', 'i'); - if ( new RegExp('(?:name|property)=["\']' + meta + '["\']', 'i').test(matches[0]) ) { + if ( r.test(matches[0]) ) { content = matches[0].match(/content=("|')([^"']+)("|')/i); - patterns[meta].forEach(pattern => { + promises.push(this.asyncForEach(patterns[meta], pattern => { if ( content && content.length === 4 && pattern.regex.test(content[2]) ) { this.addDetected(app, pattern, 'meta', content[2], meta); } - }); + })); } } } + + return promises ? Promise.all(promises) : Promise.resolve(); } /** * analyze response headers */ analyzeHeaders(app, headers) { - var patterns = this.parsePatterns(app.props.headers); + const patterns = this.parsePatterns(app.props.headers); + const promises = []; if ( headers ) { Object.keys(patterns).forEach(headerName => { - patterns[headerName].forEach(pattern => { + this.asyncForEach(patterns[headerName], pattern => { headerName = headerName.toLowerCase(); if ( headerName in headers ) { - headers[headerName].forEach(headerValue => { + promises.push(headers[headerName].forEach(headerValue => { if ( pattern.regex.test(headerValue) ) { this.addDetected(app, pattern, 'headers', headerValue, headerName); } - }); + })); } }); }); } + + return promises ? Promise.all(promises) : Promise.resolve(); } /** @@ -493,45 +514,36 @@ class Wappalyzer { var patterns = this.parsePatterns(app.props.env); if ( patterns.length ) { - patterns.forEach(pattern => { - Object.keys(envs).forEach(env => { - if ( pattern.regex.test(envs[env]) ) { - this.addDetected(app, pattern, 'env', envs[env]); - } - }) - }); + return Promise.resolve(); } + + return this.asyncForEach(patterns, pattern => { + Object.keys(envs).forEach(env => { + if ( pattern.regex.test(envs[env]) ) { + this.addDetected(app, pattern, 'env', envs[env]); + } + }) + }); } /** * Analyze JavaScript variables */ analyzeJs(app, results) { + const promises = []; + Object.keys(results).forEach(string => { - Object.keys(results[string]).forEach(index => { + promises.push(this.asyncForEach(Object.keys(results[string]), index => { const pattern = this.jsPatterns[app.name][string][index]; const value = results[string][index]; - if ( pattern.regex.test(value) ) { + if ( pattern && pattern.regex.test(value) ) { this.addDetected(app, pattern, 'js', value); } - }); + })); }); - } - - /** - * Analyze robots.txt - */ - analyzeRobotsTxt(app, robotsTxt) { - var patterns = this.parsePatterns(app.props.robotsTxt); - if ( patterns.length ) { - patterns.forEach(pattern => { - if ( pattern.regex.test(robotsTxt) ) { - this.addDetected(app, pattern, 'robotsTxt', robotsTxt); - } - }); - } + return promises ? Promise.all(promises) : Promise.resolve(); } /** @@ -540,6 +552,8 @@ class Wappalyzer { addDetected(app, pattern, type, value, key) { app.detected = true; + console.log(app); + // Set confidence level app.confidence[type + ' ' + ( key ? key + ' ' : '' ) + pattern.regex] = pattern.confidence || 100; From f35c7ff3e721c445e66f61b74b046ba506024cb4 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Fri, 23 Feb 2018 14:34:45 +1100 Subject: [PATCH 032/175] Add robots.txt queuing --- src/drivers/npm/package.json | 2 +- src/drivers/webextension/js/driver.js | 56 ++++++++++++++------------ src/drivers/webextension/js/iframe.js | 2 +- src/drivers/webextension/manifest.json | 2 +- src/wappalyzer.js | 9 ++--- 5 files changed, 37 insertions(+), 34 deletions(-) diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index f6b5cf37c..473839445 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -2,7 +2,7 @@ "name": "wappalyzer", "description": "Uncovers the technologies used on websites", "homepage": "https://github.com/AliasIO/Wappalyzer", - "version": "5.4.7", + "version": "5.4.8", "author": "Elbert Alias", "license": "GPL-3.0", "repository": { diff --git a/src/drivers/webextension/js/driver.js b/src/drivers/webextension/js/driver.js index 198d67074..c7d550537 100644 --- a/src/drivers/webextension/js/driver.js +++ b/src/drivers/webextension/js/driver.js @@ -11,6 +11,7 @@ var tabCache = {}; var headersCache = {}; var categoryOrder = []; var options = {}; +var robotsTxtQueue = {}; browser.tabs.onRemoved.addListener(tabId => { tabCache[tabId] = null; @@ -287,7 +288,13 @@ wappalyzer.driver.displayApps = (detected, meta, context) => { * Fetch and cache robots.txt for host */ wappalyzer.driver.getRobotsTxt = (host, secure = false) => { - return new Promise((resolve, reject) => { + if ( robotsTxtQueue.hasOwnProperty(host) ) { + wappalyzer.log('robotTxt fetch already in queue'); + + return robotsTxtQueue[host]; + } + + robotsTxtQueue[host] = new Promise((resolve, reject) => { getOption('tracking', true) .then(tracking => { if ( !tracking ) { @@ -299,34 +306,31 @@ wappalyzer.driver.getRobotsTxt = (host, secure = false) => { robotsTxtCache = robotsTxtCache || {}; if ( host in robotsTxtCache ) { - resolve(robotsTxtCache[host]); - } else { - const url = 'http' + ( secure ? 's' : '' ) + '://' + host + '/robots.txt'; - - fetch('http' + ( secure ? 's' : '' ) + '://' + host + '/robots.txt') - .then(response => { - if ( !response.ok ) { - if ( response.status === 404 ) { - return ''; - } else { - throw 'GET ' + response.url + ' was not ok'; - } - } - - return response.text(); - }) - .then(robotsTxt => { - robotsTxtCache[host] = wappalyzer.parseRobotsTxt(robotsTxt); - - setOption('robotsTxtCache', robotsTxtCache); - - resolve(robotsTxtCache[host]); - }) - .catch(reject); + return resolve(robotsTxtCache[host]); } + + const timeout = setTimeout(() => resolve([]), 3000); + + fetch('http' + ( secure ? 's' : '' ) + '://' + host + '/robots.txt', { redirect: 'follow' }) + .then(response => { + clearTimeout(timeout); + + return response.ok ? response.text() : ''; + }) + .then(robotsTxt => { + robotsTxtCache[host] = wappalyzer.parseRobotsTxt(robotsTxt); + + setOption('robotsTxtCache', robotsTxtCache); + + resolve(robotsTxtCache[host]); + }) + .catch(err => resolve([])); }); }); - }); + }) + .finally(() => delete robotsTxtQueue[host]); + + return robotsTxtQueue[host]; }; /** diff --git a/src/drivers/webextension/js/iframe.js b/src/drivers/webextension/js/iframe.js index 2370a3eda..883ebea71 100644 --- a/src/drivers/webextension/js/iframe.js +++ b/src/drivers/webextension/js/iframe.js @@ -890,7 +890,7 @@ var exports = {}; var _pageTags; var INIT_MS_BW_SEARCHES = 2000; var PAGE_TAG_RE = new RegExp('gpt|oascentral'); - var POST_MSG_ID = '1511804838-25881-9878-26947-14879'; + var POST_MSG_ID = '1519242200-10756-12873-1462-13403'; var AD_SERVER_RE = new RegExp('^(google_ads_iframe|oas_frame|atwAdFrame)'); function getPageTags(doc) { diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index de6e15489..6accf3520 100644 --- a/src/drivers/webextension/manifest.json +++ b/src/drivers/webextension/manifest.json @@ -4,7 +4,7 @@ "author": "Elbert Alias", "homepage_url": "https://www.wappalyzer.com", "description": "Identify web technologies", - "version": "5.4.7", + "version": "5.4.8", "default_locale": "en", "manifest_version": 2, "icons": { diff --git a/src/wappalyzer.js b/src/wappalyzer.js index d2937d212..d95f90154 100644 --- a/src/wappalyzer.js +++ b/src/wappalyzer.js @@ -19,7 +19,6 @@ class Wappalyzer { this.categories = {}; this.driver = {}; this.jsPatterns = {}; - this.detected = {}; this.hostnameCache = {}; this.adCache = []; @@ -139,12 +138,12 @@ class Wappalyzer { this.driver.getRobotsTxt(parsed.host, parsed.protocol === 'https:') .then(robotsTxt => { - if (robotsTxt.some(disallowedPath => parsed.pathname.indexOf(disallowedPath) === 0)) { + if ( robotsTxt.some(disallowedPath => parsed.pathname.indexOf(disallowedPath) === 0) ) { return reject(); - } else { - return resolve(); } - }); + + return resolve(); + }, () => resolve()); }); }; From 8e1bfb4e453a4a5a37265e6cbf5719f2eef9036b Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:03:22 +0100 Subject: [PATCH 033/175] Add a category for static site generators (#2092) --- src/apps.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/apps.json b/src/apps.json index 9b34e7ee3..4a83bc73b 100644 --- a/src/apps.json +++ b/src/apps.json @@ -4037,7 +4037,7 @@ }, "Hexo": { "cats": [ - 11 + 57 ], "icon": "Hexo.png", "html": [ @@ -4163,8 +4163,7 @@ }, "Hugo": { "cats": [ - 1, - 11 + 57 ], "icon": "Hugo.png", "meta": { @@ -4660,8 +4659,7 @@ }, "Jekyll": { "cats": [ - 1, - 11 + 57 ], "icon": "Jekyll.png", "html": [ @@ -7247,8 +7245,7 @@ }, "Phenomic": { "cats": [ - 1, - 11 + 57 ], "html": [ "<[^>]+id=\"phenomic(?:root)?\"" @@ -7262,8 +7259,7 @@ }, "PHPoole": { "cats": [ - 1, - 11 + 57 ], "icon": "PHPoole.png", "meta": { @@ -12511,6 +12507,10 @@ "56": { "name": "Cryptominer", "priority": 8 + }, + "57": { + "name": "Static Site Generator", + "priority": 1 } } } From 32b5408aa5319203c9886b665d79310f35490706 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:03:32 +0100 Subject: [PATCH 034/175] Add a way to get polymer's version (#2101) This can be tested [here](https://www.youtube.com/watch?v=-8cOWt7lvUQ) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 4a83bc73b..a64350ee1 100644 --- a/src/apps.json +++ b/src/apps.json @@ -7434,7 +7434,7 @@ 12 ], "js": { - "Polymer": "" + "Polymer.version": "(.*)\\;version:\\1" }, "html": "(?:]+|]+rel=\"import\"[^>]+/polymer\\.html\")", "icon": "Polymer.png", From 89ed918bc0b039c10d1f76b393d0dbc12ad56edd Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:03:41 +0100 Subject: [PATCH 035/175] Tighten a bit the ExpressionEngine regexp (#2102) This can be tested [here](http://shamelessmag.com/blog/entry/adversary-making-a-statement-in-the-industrial-mu/) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index a64350ee1..c151205b0 100644 --- a/src/apps.json +++ b/src/apps.json @@ -2911,7 +2911,7 @@ 1 ], "headers": { - "Set-Cookie": "(?:exp_last_activity|exp_tracker)" + "Set-Cookie": "^exp_(?:last_activity|tracker|csrf_token)" }, "icon": "ExpressionEngine.png", "implies": "PHP", From 687dedce1be661f3950870fa7a8366b1b1a031af Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:03:49 +0100 Subject: [PATCH 036/175] Add a way to get algolia's version (#2103) This can be tested [here](https://blog.heroku.com/ruby-2-4-features-hashes-integers-rounding#better-hashes). Please note that `algoliasearch` and `AlgoliaSearch` are both present on the webpage --- src/apps.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index c151205b0..7b6182483 100644 --- a/src/apps.json +++ b/src/apps.json @@ -519,7 +519,8 @@ 29 ], "js": { - "AlgoliaSearch": "" + "AlgoliaSearch": "", + "algoliasearch.version": "(.*)\\;version:\\1" }, "icon": "Algolia Realtime Search.svg", "website": "http://www.algolia.com" From ed81e2a634c9eae6bd7a96d3339386ca99ff6ece Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:04:03 +0100 Subject: [PATCH 037/175] Add awesomplete (#2105) This can be tested [here](https://leaverou.github.io/awesomplete/) or [here](https://links.imirhil.fr/) The library is [pretty popular](https://github.com/LeaVerou/awesomplete), with almost 6000 stars --- src/apps.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/apps.json b/src/apps.json index 7b6182483..6c145e8a2 100644 --- a/src/apps.json +++ b/src/apps.json @@ -952,6 +952,17 @@ "script": "^https?://edge\\.avangate\\.net/", "website": "http://avangate.com" }, + "Awesomplete": { + "cats": [ + 29 + ], + "js": { + "awesomplete": "" + }, + "html": "]+href=\"[^>]*awesomplete(?:\\.min)?\\.css", + "script": "/awesomplete\\.js(?:$|\\?)", + "website": "https://leaverou.github.io/awesomplete/" + }, "BEM": { "cats": [ 12 From 8936227e6008b95b6b6a25a3d18a17e85dab637b Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:05:17 +0100 Subject: [PATCH 039/175] Add a way to get socket.io's version (#2111) This can be tested [here](https://cloud.scaleway.com/#/) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 6c145e8a2..ef5ad0a3f 100644 --- a/src/apps.json +++ b/src/apps.json @@ -8880,7 +8880,7 @@ 12 ], "js": { - "io": "\\;confidence:20" + "io.version": "(.*)\\;version:\\1\\;confidence:20" }, "icon": "Socket.io.png", "implies": "Node.js", From 0e1dd2986a97ad05309aab8acce334ca605401b0 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:05:24 +0100 Subject: [PATCH 040/175] Add the next stable release of debian (#2112) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index ef5ad0a3f..a6189cbc9 100644 --- a/src/apps.json +++ b/src/apps.json @@ -2297,7 +2297,7 @@ ], "headers": { "Server": "Debian", - "X-Powered-By": "(?:Debian|dotdeb|(potato|woody|sarge|etch|lenny|squeeze|wheezy|jessie|stretch|sid))\\;version:\\1" + "X-Powered-By": "(?:Debian|dotdeb|(potato|woody|sarge|etch|lenny|squeeze|wheezy|jessie|stretch|buster|sid))\\;version:\\1" }, "icon": "Debian.png", "website": "http://debian.org" From 7ac29fac536f347cb1fa1b37c8da2cdd22403dd6 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:12:37 +0100 Subject: [PATCH 041/175] Add a way to get requirejs version (#2114) This can be tested [here](https://rougie.fr/) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index a6189cbc9..0c67cb636 100644 --- a/src/apps.json +++ b/src/apps.json @@ -7954,7 +7954,7 @@ 12 ], "js": { - "requirejs": "" + "requirejs.version": "(.*)\\;version:\\1" }, "icon": "RequireJS.png", "script": "require.*\\.js", From a921a1b8781324ee3b8a9891cf5a70e69af8605a Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:12:49 +0100 Subject: [PATCH 042/175] Add a way to get tweenmax's version (#2115) This can be tested [here](https://www.kravmagaparis12.com/) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 0c67cb636..3bfc2aaab 100644 --- a/src/apps.json +++ b/src/apps.json @@ -9721,7 +9721,7 @@ 12 ], "js": { - "TweenMax": "" + "TweenMax.version": "(.*)\\;version:\\1" }, "icon": "TweenMax.png", "script": "TweenMax(?:\\.min)?\\.js", From 93d23283e59f19192e1ee96c055584ff561157fe Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Sat, 10 Mar 2018 05:13:02 +0100 Subject: [PATCH 043/175] React: Fixed version detection (#2117) * React: Fixed version detection Example sites which are using React: - Slack - Dropbox - Imgur On all it works fine with PascalCase "React". * React: Readded old version detection * React: Removed unnecessary js check --- src/apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps.json b/src/apps.json index 3bfc2aaab..31a18772c 100644 --- a/src/apps.json +++ b/src/apps.json @@ -7888,8 +7888,8 @@ 12 ], "js": { - "React": "", - "react.version": "(.*)\\;version:\\1" + "react.version": "(.*)\\;version:\\1", + "React.version": "(.*)\\;version:\\1" }, "html": "<[^>]+data-react", "icon": "React.png", From d2260af0f2b525c26bca7db9a8a6e1da8b87d125 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:13:37 +0100 Subject: [PATCH 044/175] Add a way to get XRegExp's version (#2120) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 31a18772c..b8f79af7a 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10724,7 +10724,7 @@ 12 ], "js": { - "XRegExp": "" + "XRegExp.version": "(.*)\\;version:\\1" }, "icon": "XRegExp.png", "script": [ From 3a19eeeb0d948fd181e77adf307531c14cab19e2 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:13:50 +0100 Subject: [PATCH 045/175] Improve Concerte5 handling (#2121) - Better version detection (the `ab` thingy looks like a bug to me) - Tighten the regexp for the generator - Tighten the `script` thingy - The website is using https --- src/apps.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/apps.json b/src/apps.json index b8f79af7a..101783c49 100644 --- a/src/apps.json +++ b/src/apps.json @@ -1908,10 +1908,10 @@ "icon": "Concrete5.png", "implies": "PHP", "meta": { - "generator": "concrete5 - ([\\d.ab]+)\\;version:\\1" + "generator": "^concrete5 - ([\\d.]+)$\\;version:\\1" }, - "script": "concrete/js/", - "website": "http://concrete5.org" + "script": "/concrete/js/", + "website": "https://concrete5.org" }, "Connect": { "cats": [ From 46b6b2975530e2de9f3dcaa265f473ec55be2458 Mon Sep 17 00:00:00 2001 From: toastal Date: Sat, 10 Mar 2018 11:14:55 +0700 Subject: [PATCH 046/175] Using `reduce` to remove extra iterations (#2122) * Using `reduce` to not iterate so much * Remove the Array.from as well --- src/drivers/npm/driver.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 7b66838a1..d0a593bc0 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -133,11 +133,17 @@ class Driver { js }) .then(() => { - const links = Array.from(browser.document.getElementsByTagName('a')) - .filter(link => link.protocol === 'http:' || link.protocol === 'https:') - .filter(link => link.hostname === this.origPageUrl.hostname) - .filter(link => extensions.test(link.pathname)) - .map(link => { link.hash = ''; return url.parse(link.href) }); + const links = Array.prototype.reduce.call( + browser.document.getElementsByTagName('a'), + (acc, link) => { + if (link.protocol.match(/https?:/) || link.hostname === this.origPageUrl.hostname || extensions.test(link.pathname)) { + link.hash = ''; + acc.push(url.parse(link.href)); + } + return acc; + }, + [] + ); return resolve(links); }); From 323bd145bd737f3c26f907fa72a52fdbd4631b64 Mon Sep 17 00:00:00 2001 From: Camille Barneaud <1693643+gadcam@users.noreply.github.com> Date: Sat, 10 Mar 2018 05:15:29 +0100 Subject: [PATCH 047/175] Add guidelines when opening an issue (#2123) Based on an idea of @Yoginth. --- issue_template.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 issue_template.md diff --git a/issue_template.md b/issue_template.md new file mode 100644 index 000000000..4e55ba0c4 --- /dev/null +++ b/issue_template.md @@ -0,0 +1,16 @@ + + +**Do you want to request a *feature*, a *new application detection* or report a *bug*?** + +**Is your issue about WebExtension driver (Chrome & Firefox), the website, the NPM driver or the bookmarklet ?** + +**What is the current behavior ?** + +**If the current behavior is a bug, please provide the steps to reproduce and if possible a demo of the problem.** + +**What is the expected behavior ?** + +**Which versions of Wappalyzer, and which browser / OS are affected by this issue ? Did this work in previous versions ?** From fb6f1f566527bd3074777f70d78a687268ddad96 Mon Sep 17 00:00:00 2001 From: Gonzalo Rizzo Date: Sat, 10 Mar 2018 01:16:03 -0300 Subject: [PATCH 048/175] Add Genexus detection (#2124) * Add Genexus detection * Fix genexus image size * Add Miscellaneous category to Genexus * Use /gxp\\.js as script regexp * Remove gx js global to detect Genexus --- src/apps.json | 12 ++++++++++++ src/icons/genexus.png | Bin 0 -> 4522 bytes 2 files changed, 12 insertions(+) create mode 100644 src/icons/genexus.png diff --git a/src/apps.json b/src/apps.json index 101783c49..488f77d95 100644 --- a/src/apps.json +++ b/src/apps.json @@ -12293,6 +12293,18 @@ }, "icon": "Woosa.png", "website": "https://woosa.nl" + }, + "Genexus": { + "cats": [ + 18, 19 + ], + "icon": "genexus.png", + "website": "https://www.genexus.com", + "js": { + "gx.evt": "" + }, + "html": "<[^>]+class=\"gxp-page\"", + "script": "/gxp\\.js" } }, "categories": { diff --git a/src/icons/genexus.png b/src/icons/genexus.png new file mode 100644 index 0000000000000000000000000000000000000000..b4525d4cfd322a565e8a660d455e6303eed99755 GIT binary patch literal 4522 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 IM6N<$f@ZZ{2LJ#7 literal 0 HcmV?d00001 From af9af7d1c83d2ceac6f606321eef1cd040da0abb Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:18:03 +0100 Subject: [PATCH 049/175] Add a way to get Stripe's version (#2125) This can be tested [here](https://stripe.com/atlas/guides/business-of-saas) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 488f77d95..893b10e31 100644 --- a/src/apps.json +++ b/src/apps.json @@ -9183,7 +9183,7 @@ 41 ], "js": { - "Stripe": "" + "Stripe.version": "(.*)\\;version:\\1" }, "html": "]+data-stripe", "icon": "Stripe.png", From f38673952246214c0d850d7d04001c59c7a0a2b9 Mon Sep 17 00:00:00 2001 From: wpCache Date: Sat, 10 Mar 2018 06:20:14 +0200 Subject: [PATCH 050/175] update wpCache (#2110) * update wpCache New version 2.0 Fix error browser chrome - firefox * change implies "implies": [ "WordPress", "PHP" ], --- src/apps.json | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/apps.json b/src/apps.json index 893b10e31..c3be3c89d 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10317,6 +10317,26 @@ "icon": "WHMCS.png", "website": "http://www.whmcs.com" }, + "wpCache": { + "cats": [ + 23 + ], + "headers": { + "X-Powered-By": "wpCache(?:/([\\d.]+))?\\;version:\\1" + }, + "html": " + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + From 3a3a2a38d5020da88df4f5da8569bdd0828e9fd4 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:35:09 +0100 Subject: [PATCH 068/175] Add a way to get leaflet's version (#2133) This can be tested [here](http://umap.openstreetmap.fr/en/) --- src/apps.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/apps.json b/src/apps.json index e2efe05c2..5b224dee1 100644 --- a/src/apps.json +++ b/src/apps.json @@ -5230,6 +5230,11 @@ "cats": [ 35 ], + "js": { + "L.version": "(.*)\\;version:\\1\\;confidence:0", + "L.PosAnimation": "", + "L.DistanceGrid": "" + }, "icon": "Leaflet.png", "script": "leaflet.*\\.js", "website": "http://leafletjs.com" From 4c6df64a4cd5f2d131c1f068d2264503d8bc7e42 Mon Sep 17 00:00:00 2001 From: Cameron Tod Date: Sat, 10 Mar 2018 17:35:27 +1300 Subject: [PATCH 069/175] Add Acquia Cloud PaaS hosting platform. (#2131) --- src/apps.json | 11 +++++++++++ src/icons/acquia-cloud.png | Bin 0 -> 2862 bytes 2 files changed, 11 insertions(+) create mode 100644 src/icons/acquia-cloud.png diff --git a/src/apps.json b/src/apps.json index 5b224dee1..766789c3e 100644 --- a/src/apps.json +++ b/src/apps.json @@ -120,6 +120,17 @@ "icon": "Accelerated-Mobile-Pages.svg", "website": "https://www.ampproject.org" }, + "Acquia Cloud": { + "cats": [ + "22" + ], + "headers": { + "X-AH-Environment": "^\\w+$" + }, + "icon": "acquia-cloud.png", + "implies": "Drupal\\;confidence:95", + "website": "https://www.acquia.com/" + }, "Amber": { "cats": [ 18, diff --git a/src/icons/acquia-cloud.png b/src/icons/acquia-cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..d85843e9af6419f0b03c600f0ed8abda7ad3f230 GIT binary patch literal 2862 zcmZ`)30Mb5LLs8K><5+F)zT}aq*)EJ& zW{-EqV=x%|P(hFgJOhw>iZvKZ>a(7J2UaCo7Ko|7=F$rSTZLe?3WKqmh1^)ofnrAt z#=2A*Emn)e!#MGB87($J9w(t`WD0=BV7M9%aAgv8EKws%N>*_+{v;H^0X~wZlZYrp zy}_R(4i^&na;1dGrY)o~NIX1|NaQLL5;>xvkTE)l{7LK7Y6XW*PfJUqrLkyo<+pU7 z#fuly8B98p=?xIxs!hr2SdDkG%H1OJUMEPRidRY%YNUNaeFMiAMSv8d9;)(9N*SkqdT|6E07X zCT6r>N+n=>kxk_JaOwY-n~3MjWeTN4r9$xRG5q-4M7&6%k|(7g@+*_2 zY94cpG9f*YwfbY7=lh;BJ~@#f{uE(+avT9U1`fJU;vlI^l8mlp(Lyf$lZA;yzC1~; zT%m}KmmvFvQpTkwqR}?1Ki6hlVT{P7BX9D!H{0^rpjq(U@bKV7-+zNV{F?pc-(fIT zhlOF$!RQAH1~bNN#$=)+3}ayPN*II}1AtuwW@Z(&vWm>CR+TZ|>4_Kh zE^wFgiHEc!H@x7-)RMbjoHTmDU1a!?d$rEJy2q`w)2+6b2RKnKj^eFiiI6bdq$EUQ36BLE;e z01T=~Q{W>oq!HpEKI)(VKu4C3_8P0A7-Vi1Fd_(ifI)kK&;kG>$d7}4z+1Q|3lTva zv=?wJT#FR4V-{Idd8`Bk$AeKHog_E{aAcIqZm8-3RP_+52KEU08CVbWb1ziW1J!`> zF;x4QidY}@IIt(w6Hlop`l%;@4Ny-3dq%B$J|D5c`SpVy7e@%h0|&wDd0s7wSb@P} zu~t^r*48+1O`0^x#%A)ADYkgKsrC*t33KMmo$Ki2?BYg(sPjD+c+=<%Hrv;CG1q^| z(!ikLWy_XFibSI5RpK?@#Ky%-rRz5&$rOr>Ds@U~YTBlMWMpRNe4m?}w`=#m4je50 z@$iwO$4bk}wAzZQ>YAF`lc(zH&z-w);o{|An_F71UAunc=FK~8?f35KIy&`wgR#4( zr}uH+lcxjE24B8>H8k}4&6_uG-@Y9l9)1U|k&%(nQMO|i8~i3KLxYw^J35tI8p^nx z;4=AH{=OHYblclot*M?3zn)*JOV2#gAoTLgOE6cGc>~;YS2p+t$`319so( zAuD`hK-=|(<_D#P=N+`$7zDr4(+O*T_{((qOQaVo9z_ku~E=2AI!axvAN|j?eClC9477AZ&Up0p17^1H$&Hw)`4pc z#BFpM)>ozP4J{Z;cK&t#H_J)H5`=%fGu+w6H|hu;iO* zWZ~8YT@8s#WC~BO)2#ZL!l(kPzv|X7&y>%6sM%l=MrB#)4qWLi_Ut>}+}>|Tkaz?X z9_&Btxw$2-i#}jYkX+7M$t#N9a<%yoc6ONi)2y?3++g_B z9!yrdlI%P~c)h!*nAEk(IBouvqW0rn!B%&Bep5N5zKqd9*hLR${JT58aL4-pG#p7x z7;ScOcT4K7aG%kzuHnBVx73)2-{F#n!Xn~0JN`36ql?@_Y>L^{xOP)Ww%BNoyD;yh zK$!MQg}dhxk^Q=H`jnGj72}@sT(eTQ6%zY<&~Rg!eb&IOMYhMkUo+#iAu=R;|NWhf zCnzO2r_uGeReQzs?Y#?V!G@dqE09}VSMip{+N#xsIgUpUwFb9T1aHY9k8GP!$2EIV zv3pq!jR{?OH|3#4yNaT+;R zRgZCoMOn)`T~mPc?6?$1C;G^{&;Tp;ZEIC^2cswdMUm^nX}n8`A?q8xYxm8;ZggUY zIy1g~-V~F-%~;qK=BOO`W%p43SFV|P0+VMZpDuphbN^tyOh0cGEc{|`xe)|dbQ literal 0 HcmV?d00001 From 77621bd48b52c08ccf87b759bdcbd8787928cc3d Mon Sep 17 00:00:00 2001 From: Nacim Goura Date: Sat, 10 Mar 2018 05:35:56 +0100 Subject: [PATCH 070/175] Add Pelican (#2130) * Add Pelican python cms * change http by https and simplify detection * fix false-positive --- src/apps.json | 11 ++++++++++- src/icons/pelican.png | Bin 0 -> 4014 bytes 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 src/icons/pelican.png diff --git a/src/apps.json b/src/apps.json index 766789c3e..6e075038b 100644 --- a/src/apps.json +++ b/src/apps.json @@ -7110,6 +7110,15 @@ }, "website": "http://panvision.de/Produkte/Content_Management/index.asp" }, + "Pelican": { + "cats": [ + 1 + ], + "implies": "Python", + "icon": "pelican.png", + "html": "powered by ]+getpelican\\.com", + "website": "https://blog.getpelican.com/" + }, "PDF.js": { "cats": [ 19 @@ -12603,4 +12612,4 @@ "priority": 1 } } -} +} \ No newline at end of file diff --git a/src/icons/pelican.png b/src/icons/pelican.png new file mode 100644 index 0000000000000000000000000000000000000000..3fffd485867bd8e31061891a2e50e9bf43ce3416 GIT binary patch literal 4014 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 Date: Sat, 10 Mar 2018 05:37:18 +0100 Subject: [PATCH 071/175] fancybox: added version detection (#2128) --- src/apps.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/apps.json b/src/apps.json index 6e075038b..f831cbe5e 100644 --- a/src/apps.json +++ b/src/apps.json @@ -3017,6 +3017,9 @@ 12 ], "icon": "FancyBox.png", + "js": { + "$.fancybox.version": "(.*)\\;version:\\1" + }, "implies": "jQuery", "script": "jquery\\.fancybox(?:\\.pack|\\.min)?\\.js(?:\\?v=([\\d.]+))?$\\;version:\\1", "website": "http://fancyapps.com/fancybox" From 7b5a0ae59bc80ba2b53fe4f3203b7f89da3efef6 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:37:27 +0100 Subject: [PATCH 072/175] Improve a bit quantserve detection (#2127) This can be tested [here](http://www.slate.com/articles/news_and_politics/crime/2013/12/gun_ownership_causes_higher_suicide_rates_study_shows.html) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index f831cbe5e..b27c9c133 100644 --- a/src/apps.json +++ b/src/apps.json @@ -7743,7 +7743,7 @@ "quantserve": "" }, "icon": "Quantcast.png", - "script": "edge\\.quantserve\\.com/quant\\.js", + "script": "\\.quantserve\\.com/quant\\.js", "website": "http://www.quantcast.com" }, "Question2Answer": { From 89429b0995d4fbf224b1cdb3d7397cbfe18d52b4 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 10 Mar 2018 05:37:35 +0100 Subject: [PATCH 073/175] Add a way to get woocommerce version (#2126) This can be tested [here](https://puri.sm/products/) --- src/apps.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index b27c9c133..e164d3f98 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10683,7 +10683,10 @@ "js": { "woocommerce_params": "" }, - "html": " + + + + + `; + const wappalyzer = new Wappalyzer(); + wappalyzer.apps = { + "Google Tag Manager": { + "html": [ + "googletagmanager\\.com/ns\\.html[^>]+>", + "" + ] + } + }; + var applications = null; + wappalyzer.driver = { + log () {}, + displayApps (detectedMap) { + applications = detectedMap; + } + }; + + await wappalyzer.analyze({ canonical: 'example.com' }, { html }); + assert.equal(applications['Google Tag Manager'].name, 'Google Tag Manager'); + }); + + it('should analyze scripts', async () => { + const scripts = [ + 'http://www.google-analytics.com/analytics.js', + 'http://example.com/assets/js/jquery.min.js' + ]; + const wappalyzer = new Wappalyzer(); + wappalyzer.apps = { + "Google Analytics": { + "cats": [ + 10 + ], + "script": "google-analytics\\.com\\/(?:ga|urchin|(analytics))\\.js\\;version:\\1?UA:" + }, + "jQuery": { + "script": [ + "jquery(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", + "/([\\d.]+)/jquery(?:\\.min)?\\.js\\;version:\\1", + "jquery.*\\.js(?:\\?ver(?:sion)?=([\\d.]+))?\\;version:\\1" + ] + } + }; + var applications = null; + wappalyzer.driver = { + log () {}, + displayApps (detectedMap) { + applications = detectedMap; + } + }; + + await wappalyzer.analyze({ canonical: 'example.com' }, { scripts }); + assert.equal(applications['Google Analytics'].name, 'Google Analytics'); + assert.equal(applications['jQuery'].name, 'jQuery'); + }); + + it('should analyze headers', async () => { + const headers = { + 'date': [ 'Thu, 01 Feb 2018 11:34:18 GMT' ], + 'connection': [ 'keep-alive' ], + 'x-powered-by': [ 'Express'], + 'etag': [ 'W/125-1jQLmiya7mfec43xR3Eb3pjdu64s' ], + 'content-length': [ '293' ], + 'content-type': [ 'text/html; charset=utf-8' ] + }; + const wappalyzer = new Wappalyzer(); + wappalyzer.apps = { + "Express": { + "headers": { + "X-Powered-By": "^Express$" + } + } + }; + var applications = null; + wappalyzer.driver = { + log () {}, + displayApps (detectedMap) { + applications = detectedMap; + } + }; + + await wappalyzer.analyze({ canonical: 'example.com' }, { headers }); + assert.equal(applications['Express'].name, 'Express'); + }); + + it('should analyze js globals', async () => { + const js = { + 'Moment.js': { 'moment': { '0': true } }, + 'Google Font API': { 'WebFonts': { '0': true } } + }; + const wappalyzer = new Wappalyzer(); + wappalyzer.apps = { + "Moment.js": { + "js": { + "moment": "", + "moment.version": "(.*)\\;version:\\1" + } + }, + "Google Font API": { + "js": { + "WebFonts": "" + } + } + }; + var applications = null; + wappalyzer.driver = { + log () {}, + displayApps (detectedMap) { + applications = detectedMap; + } + }; + + wappalyzer.parseJsPatterns(); + await wappalyzer.analyze({ canonical: 'example.com' }, { js }); + + assert.equal(applications['Google Font API'].name, 'Google Font API'); + assert.equal(applications['Moment.js'].name, 'Moment.js'); + }); +}); diff --git a/yarn.lock b/yarn.lock index afff3337d..e261850cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,20 +2,173 @@ # yarn lockfile v1 +assertion-error@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + +chai@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" + dependencies: + assertion-error "^1.0.1" + check-error "^1.0.1" + deep-eql "^3.0.0" + get-func-name "^2.0.0" + pathval "^1.0.0" + type-detect "^4.0.0" + +check-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + +commander@2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +deep-eql@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + dependencies: + type-detect "^4.0.0" + +diff@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" + +escape-string-regexp@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + file-type@7.4.*: version "7.4.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-7.4.0.tgz#2a7c94f62a0030150bb7d9b6c70cfa1d3e759c86" +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + +glob@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +growl@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + html-comment-regex@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + is-svg@2.1.*: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" dependencies: html-comment-regex "^1.1.0" +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.0.1.tgz#759b62c836b0732382a62b6b1fb245ec1bc943ac" + dependencies: + browser-stdout "1.3.0" + commander "2.11.0" + debug "3.1.0" + diff "3.3.1" + escape-string-regexp "1.0.5" + glob "7.1.2" + growl "1.10.3" + he "1.1.1" + mkdirp "0.5.1" + supports-color "4.4.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +pathval@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -30,3 +183,17 @@ read-chunk@2.1.*: safe-buffer@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +supports-color@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" + dependencies: + has-flag "^2.0.0" + +type-detect@^4.0.0: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" From 26fd34805a79a268425c94f33f9e221c6a193750 Mon Sep 17 00:00:00 2001 From: benoitboireau <35037500+benoitboireau@users.noreply.github.com> Date: Sat, 10 Mar 2018 05:42:11 +0100 Subject: [PATCH 075/175] Add a way to detect ip-label agent (#2118) * Add a way to detect ip-label agent * Add a way to detect ip-label --- src/apps.json | 11 +++++++++++ src/icons/iplabel.svg | 8 ++++++++ 2 files changed, 19 insertions(+) create mode 100644 src/icons/iplabel.svg diff --git a/src/apps.json b/src/apps.json index e164d3f98..7aff27bfb 100644 --- a/src/apps.json +++ b/src/apps.json @@ -4564,6 +4564,17 @@ "icon": "Ionicons.png", "website": "http://ionicons.com" }, + "ip-label": { + "cats": [ + 10 + ], + "script": "clobs\\.js", + "js": { + "clobs": "" + }, + "icon": "iplabel.svg", + "website": "http://www.ip-label.com" + }, "JAlbum": { "cats": [ 7 diff --git a/src/icons/iplabel.svg b/src/icons/iplabel.svg new file mode 100644 index 000000000..b8c0f4079 --- /dev/null +++ b/src/icons/iplabel.svg @@ -0,0 +1,8 @@ +logo + + + + + + + From a37bef4fb3e9952bd422d85ec16f1607f1d61cc1 Mon Sep 17 00:00:00 2001 From: AlexByte Date: Sat, 10 Mar 2018 07:42:31 +0300 Subject: [PATCH 076/175] Add Vaadin. (#2106) --- src/apps.json | 12 ++++++++++++ src/icons/Vaadin.svg | 1 + 2 files changed, 13 insertions(+) create mode 100644 src/icons/Vaadin.svg diff --git a/src/apps.json b/src/apps.json index 7aff27bfb..5929080b1 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10161,6 +10161,18 @@ "icon": "VTEX Integrated Store.png", "website": "http://lojaintegrada.com.br" }, + "Vaadin": { + "cats": [ + 18 + ], + "js": { + "vaadin": "" + }, + "icon": "Vaadin.svg", + "implies": "Java", + "script": "vaadinBootstrap\\.js(?:\\?v=([\\d.]+))?\\;version:\\1", + "website": "https://vaadin.com" + }, "Vanilla": { "cats": [ 2 diff --git a/src/icons/Vaadin.svg b/src/icons/Vaadin.svg new file mode 100644 index 000000000..6ebe998ee --- /dev/null +++ b/src/icons/Vaadin.svg @@ -0,0 +1 @@ + \ No newline at end of file From 3c2ee9ff23edd7468a418ceff0f7b3eca65aa4dd Mon Sep 17 00:00:00 2001 From: Anthony Maki <4cm4k1@gmail.com> Date: Fri, 9 Mar 2018 22:42:52 -0600 Subject: [PATCH 077/175] Add AngularDart and Dart to Wappalyzer (#2113) - Add AngularDart as Web Framework - Add Dart as Programming Language - Tweak other Angular entries (Angular, AngularJS, Angular Material) with 'excludes' logic --- src/apps.json | 46 ++++++++++++++++++++++++++++++++++++++- src/icons/AngularDart.svg | 5 +++++ src/icons/Dart.svg | 20 +++++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 src/icons/AngularDart.svg create mode 100644 src/icons/Dart.svg diff --git a/src/apps.json b/src/apps.json index 5929080b1..29759500b 100644 --- a/src/apps.json +++ b/src/apps.json @@ -637,20 +637,43 @@ "/([\\d.]+(?:\\-?rc[.\\d]*)*)/angular-material(?:\\.min)?\\.js\\;version:\\1", "angular-material.*\\.js" ], - "website": "http://material.angularjs.org" + "website": "https://material.angularjs.org" }, "Angular": { "cats": [ 12 ], + "excludes": [ + "AngularDart\\;confidence:75", + "AngularJS\\;confidence:75" + ], "html": "<[^>]+ ng-version=\"([\\d.]+)\"\\;version:\\1", "icon": "Angular.svg", "website": "https://angular.io" }, + "AngularDart": { + "cats": [ + 18 + ], + "implies": "Dart", + "excludes": [ + "Angular", + "AngularJS" + ], + "icon": "AngularDart.svg", + "website": "https://webdev.dartlang.org/angular/", + "js": { + "ngTestabilityRegistries": "" + } + }, "AngularJS": { "cats": [ 12 ], + "excludes": [ + "Angular\\;confidence:75", + "AngularDart\\;confidence:75" + ], "js": { "angular": "", "angular.version.full": "(.*)\\;version:\\1" @@ -2265,6 +2288,27 @@ }, "website": "http://danneo.com" }, + "Dart": { + "cats": [ + 27 + ], + "icon": "Dart.svg", + "implies": "AngularDart\\;confidence:75", + "excludes": [ + "Angular\\;confidence:75", + "AngularJS\\;confidence:75" + ], + "website": "https://www.dartlang.org", + "script": [ + "/(?:\\.)?(?:dart)(?:\\.js)?/", + "packages/browser/dart\\.js" + ], + "html": "/(?:]+(?:type=\"application/dart\")/", + "js": { + "___dart__$dart_dartObject_ZxYxX_0_": "", + "___dart_dispatch_record_ZxYxX_0_": "" + } + }, "Darwin": { "cats": [ 28 diff --git a/src/icons/AngularDart.svg b/src/icons/AngularDart.svg new file mode 100644 index 000000000..78c49125a --- /dev/null +++ b/src/icons/AngularDart.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/icons/Dart.svg b/src/icons/Dart.svg new file mode 100644 index 000000000..ca5dcdad7 --- /dev/null +++ b/src/icons/Dart.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + From 56e3d419ceb1aeb2f9dded0fefe3b738f9a97303 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Sat, 10 Mar 2018 15:45:28 +1100 Subject: [PATCH 078/175] Fix Dart implies/excludes --- src/apps.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/apps.json b/src/apps.json index 29759500b..a8f76c758 100644 --- a/src/apps.json +++ b/src/apps.json @@ -644,8 +644,8 @@ 12 ], "excludes": [ - "AngularDart\\;confidence:75", - "AngularJS\\;confidence:75" + "AngularDart", + "AngularJS" ], "html": "<[^>]+ ng-version=\"([\\d.]+)\"\\;version:\\1", "icon": "Angular.svg", @@ -671,8 +671,8 @@ 12 ], "excludes": [ - "Angular\\;confidence:75", - "AngularDart\\;confidence:75" + "Angular", + "AngularDart" ], "js": { "angular": "", @@ -2293,10 +2293,10 @@ 27 ], "icon": "Dart.svg", - "implies": "AngularDart\\;confidence:75", + "implies": "AngularDart", "excludes": [ - "Angular\\;confidence:75", - "AngularJS\\;confidence:75" + "Angular", + "AngularJS" ], "website": "https://www.dartlang.org", "script": [ @@ -12685,4 +12685,4 @@ "priority": 1 } } -} \ No newline at end of file +} From 6f79a1775dbf3afed17f6d4a20a24d58b395e597 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Sat, 10 Mar 2018 16:04:15 +1100 Subject: [PATCH 079/175] Update locales --- src/apps.json | 5 +- src/drivers/npm/package.json | 2 +- .../webextension/_locales/de/messages.json | 4 +- .../webextension/_locales/el/messages.json | 5 +- .../webextension/_locales/en/messages.json | 4 +- .../webextension/_locales/es/messages.json | 5 +- .../webextension/_locales/fr/messages.json | 135 ++++++++--------- .../webextension/_locales/gr/messages.json | 5 +- .../webextension/_locales/id/messages.json | 5 +- .../webextension/_locales/it/messages.json | 5 +- .../webextension/_locales/pl/messages.json | 5 +- .../webextension/_locales/pt/messages.json | 135 ++++++++--------- .../webextension/_locales/ro/messages.json | 4 +- .../webextension/_locales/ru/messages.json | 5 +- .../webextension/_locales/sk/messages.json | 135 ++++++++--------- .../webextension/_locales/tr/messages.json | 4 +- .../webextension/_locales/uk/messages.json | 5 +- .../webextension/_locales/uz/messages.json | 5 +- .../webextension/_locales/zh_CN/messages.json | 137 +++++++++--------- .../webextension/_locales/zh_TW/messages.json | 5 +- src/drivers/webextension/manifest.json | 2 +- 21 files changed, 334 insertions(+), 283 deletions(-) diff --git a/src/apps.json b/src/apps.json index a8f76c758..5488cb0b9 100644 --- a/src/apps.json +++ b/src/apps.json @@ -122,7 +122,7 @@ }, "Acquia Cloud": { "cats": [ - "22" + "22" ], "headers": { "X-AH-Environment": "^\\w+$" @@ -12444,7 +12444,8 @@ }, "Genexus": { "cats": [ - 18, 19 + 18, + 19 ], "icon": "genexus.png", "website": "https://www.genexus.com", diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 473839445..4b5adfeb1 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -2,7 +2,7 @@ "name": "wappalyzer", "description": "Uncovers the technologies used on websites", "homepage": "https://github.com/AliasIO/Wappalyzer", - "version": "5.4.8", + "version": "5.4.10", "author": "Elbert Alias", "license": "GPL-3.0", "repository": { diff --git a/src/drivers/webextension/_locales/de/messages.json b/src/drivers/webextension/_locales/de/messages.json index 66fee07b2..651a5160d 100644 --- a/src/drivers/webextension/_locales/de/messages.json +++ b/src/drivers/webextension/_locales/de/messages.json @@ -65,5 +65,7 @@ "categoryName52": { "message": "Live-Chat" }, "categoryName53": { "message": "CRM" }, "categoryName54": { "message": "SEO" }, - "categoryName55": { "message": "Buchhaltung" } + "categoryName55": { "message": "Buchhaltung" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/el/messages.json b/src/drivers/webextension/_locales/el/messages.json index ec02d4d9f..303153b11 100644 --- a/src/drivers/webextension/_locales/el/messages.json +++ b/src/drivers/webextension/_locales/el/messages.json @@ -60,5 +60,8 @@ "categoryName51": { "message": "Σύστημα Κατασκευής Σελίδων Υποδοχής" }, "categoryName52": { "message": "Live Chat" }, "categoryName53": { "message": "CRM" }, - "categoryName54": { "message": "SEO" } + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/en/messages.json b/src/drivers/webextension/_locales/en/messages.json index 8c5939f9b..f212cbe27 100644 --- a/src/drivers/webextension/_locales/en/messages.json +++ b/src/drivers/webextension/_locales/en/messages.json @@ -65,5 +65,7 @@ "categoryName52": { "message": "Live Chat" }, "categoryName53": { "message": "CRM" }, "categoryName54": { "message": "SEO" }, - "categoryName55": { "message": "Accounting" } + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/es/messages.json b/src/drivers/webextension/_locales/es/messages.json index a0da48e03..7ca196ba3 100644 --- a/src/drivers/webextension/_locales/es/messages.json +++ b/src/drivers/webextension/_locales/es/messages.json @@ -64,5 +64,8 @@ "categoryName51": { "message": "Landing Page Builder" }, "categoryName52": { "message": "Live Chat" }, "categoryName53": { "message": "CRM" }, - "categoryName54": { "message": "SEO" } + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/fr/messages.json b/src/drivers/webextension/_locales/fr/messages.json index d26375322..9258620a9 100644 --- a/src/drivers/webextension/_locales/fr/messages.json +++ b/src/drivers/webextension/_locales/fr/messages.json @@ -1,68 +1,71 @@ { - "github": { "message": "Forker Wappalyzer sur GitHub!" }, - "noAppsDetected": { "message": "Pas d'applications détectées." }, - "nothingToDo": { "message": "Rien à faire ici." }, - "optionTracking": { "message": "Envoyer anonymement des rapports sur les applications détectées à wappalyzer.com pour la recherche" }, - "optionUpgradeMessage": { "message": "M'afficher les mises à jour" }, - "optionDynamicIcon": { "message": "Utiliser l'icône de l'application au lieu du logo Wappalyzer" }, - "options": { "message": "Options" }, - "optionsSave": { "message": "Sauvegarder les options" }, - "optionsSaved": { "message": "Sauvegardé" }, - "twitter": { "message": "Suivre Wappalyzer sur Twitter" }, - "website": { "message": "Aller sur wappalyzer.com" }, - "categoryPin": { "message": "Always show icon" }, - "categoryName1": { "message": "CMS" }, - "categoryName2": { "message": "Forum" }, - "categoryName3": { "message": "Gestionnaire de base de données" }, - "categoryName4": { "message": "Outil de documentation" }, - "categoryName5": { "message": "Widget" }, - "categoryName6": { "message": "Boutique en ligne" }, - "categoryName7": { "message": "Galerie photo" }, - "categoryName8": { "message": "Wiki" }, - "categoryName9": { "message": "Gestionnaires de serveur" }, - "categoryName10": { "message": "Outil de statistiques" }, - "categoryName11": { "message": "Blog" }, - "categoryName12": { "message": "Framework JavaScript" }, - "categoryName13": { "message": "Outil de suivi de problèmes" }, - "categoryName14": { "message": "Lecteur de vidéos" }, - "categoryName15": { "message": "Système de commentaires" }, - "categoryName16": { "message": "Captcha" }, - "categoryName17": { "message": "Script de police" }, - "categoryName18": { "message": "Framework web" }, - "categoryName19": { "message": "Divers" }, - "categoryName20": { "message": "Editeur" }, - "categoryName21": { "message": "LMS" }, - "categoryName22": { "message": "Serveur web" }, - "categoryName23": { "message": "Outil de cache" }, - "categoryName24": { "message": "Editeur WYSIWYG" }, - "categoryName25": { "message": "Graphismes JavaScript" }, - "categoryName26": { "message": "Framework pour mobiles" }, - "categoryName27": { "message": "Langage de programmation" }, - "categoryName28": { "message": "Système d'exploitation" }, - "categoryName29": { "message": "Moteur de recherche" }, - "categoryName30": { "message": "Web Mail" }, - "categoryName31": { "message": "CDN" }, - "categoryName32": { "message": "Logiciel de marketing" }, - "categoryName33": { "message": "Extension de serveur web" }, - "categoryName34": { "message": "Base de données" }, - "categoryName35": { "message": "Carte" }, - "categoryName36": { "message": "Régie publicitaire" }, - "categoryName37": { "message": "Périphérique réseau" }, - "categoryName38": { "message": "Serveur multimédia" }, - "categoryName39": { "message": "Webcam" }, - "categoryName40": { "message": "Imprimante" }, - "categoryName41": { "message": "Service de paiement" }, - "categoryName42": { "message": "Tag Manager" }, - "categoryName43": { "message": "Paywall" }, - "categoryName44": { "message": "Système CI" }, - "categoryName45": { "message": "Système SCADA" }, - "categoryName46": { "message": "Accès à distance" }, - "categoryName47": { "message": "Outil de développement" }, - "categoryName48": { "message": "Stockage réseau" }, - "categoryName49": { "message": "Lecteur RSS" }, - "categoryName50": { "message": "Système de gestion de documents" }, - "categoryName51": { "message": "Landing Page Builder" }, - "categoryName52": { "message": "Chat en direct" }, - "categoryName53": { "message": "CRM" }, - "categoryName54": { "message": "SEO" } + "github": { "message": "Forker Wappalyzer sur GitHub!" }, + "noAppsDetected": { "message": "Pas d'applications détectées." }, + "nothingToDo": { "message": "Rien à faire ici." }, + "optionTracking": { "message": "Envoyer anonymement des rapports sur les applications détectées à wappalyzer.com pour la recherche" }, + "optionUpgradeMessage": { "message": "M'afficher les mises à jour" }, + "optionDynamicIcon": { "message": "Utiliser l'icône de l'application au lieu du logo Wappalyzer" }, + "options": { "message": "Options" }, + "optionsSave": { "message": "Sauvegarder les options" }, + "optionsSaved": { "message": "Sauvegardé" }, + "twitter": { "message": "Suivre Wappalyzer sur Twitter" }, + "website": { "message": "Aller sur wappalyzer.com" }, + "categoryPin": { "message": "Always show icon" }, + "categoryName1": { "message": "CMS" }, + "categoryName2": { "message": "Forum" }, + "categoryName3": { "message": "Gestionnaire de base de données" }, + "categoryName4": { "message": "Outil de documentation" }, + "categoryName5": { "message": "Widget" }, + "categoryName6": { "message": "Boutique en ligne" }, + "categoryName7": { "message": "Galerie photo" }, + "categoryName8": { "message": "Wiki" }, + "categoryName9": { "message": "Gestionnaires de serveur" }, + "categoryName10": { "message": "Outil de statistiques" }, + "categoryName11": { "message": "Blog" }, + "categoryName12": { "message": "Framework JavaScript" }, + "categoryName13": { "message": "Outil de suivi de problèmes" }, + "categoryName14": { "message": "Lecteur de vidéos" }, + "categoryName15": { "message": "Système de commentaires" }, + "categoryName16": { "message": "Captcha" }, + "categoryName17": { "message": "Script de police" }, + "categoryName18": { "message": "Framework web" }, + "categoryName19": { "message": "Divers" }, + "categoryName20": { "message": "Editeur" }, + "categoryName21": { "message": "LMS" }, + "categoryName22": { "message": "Serveur web" }, + "categoryName23": { "message": "Outil de cache" }, + "categoryName24": { "message": "Editeur WYSIWYG" }, + "categoryName25": { "message": "Graphismes JavaScript" }, + "categoryName26": { "message": "Framework pour mobiles" }, + "categoryName27": { "message": "Langage de programmation" }, + "categoryName28": { "message": "Système d'exploitation" }, + "categoryName29": { "message": "Moteur de recherche" }, + "categoryName30": { "message": "Web Mail" }, + "categoryName31": { "message": "CDN" }, + "categoryName32": { "message": "Logiciel de marketing" }, + "categoryName33": { "message": "Extension de serveur web" }, + "categoryName34": { "message": "Base de données" }, + "categoryName35": { "message": "Carte" }, + "categoryName36": { "message": "Régie publicitaire" }, + "categoryName37": { "message": "Périphérique réseau" }, + "categoryName38": { "message": "Serveur multimédia" }, + "categoryName39": { "message": "Webcam" }, + "categoryName40": { "message": "Imprimante" }, + "categoryName41": { "message": "Service de paiement" }, + "categoryName42": { "message": "Tag Manager" }, + "categoryName43": { "message": "Paywall" }, + "categoryName44": { "message": "Système CI" }, + "categoryName45": { "message": "Système SCADA" }, + "categoryName46": { "message": "Accès à distance" }, + "categoryName47": { "message": "Outil de développement" }, + "categoryName48": { "message": "Stockage réseau" }, + "categoryName49": { "message": "Lecteur RSS" }, + "categoryName50": { "message": "Système de gestion de documents" }, + "categoryName51": { "message": "Landing Page Builder" }, + "categoryName52": { "message": "Chat en direct" }, + "categoryName53": { "message": "CRM" }, + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/gr/messages.json b/src/drivers/webextension/_locales/gr/messages.json index 8f1c430ca..b1264b2c8 100644 --- a/src/drivers/webextension/_locales/gr/messages.json +++ b/src/drivers/webextension/_locales/gr/messages.json @@ -60,5 +60,8 @@ "categoryName51": { "message": "Σύστημα Κατασκευής Σελίδων Υποδοχής" }, "categoryName52": { "message": "Live Chat" }, "categoryName53": { "message": "CRM" }, - "categoryName54": { "message": "SEO" } + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/id/messages.json b/src/drivers/webextension/_locales/id/messages.json index a50c2c790..8b55973fe 100644 --- a/src/drivers/webextension/_locales/id/messages.json +++ b/src/drivers/webextension/_locales/id/messages.json @@ -64,5 +64,8 @@ "categoryName51": { "message": "Pembuat Laman Landas" }, "categoryName52": { "message": "Chat Langsung" }, "categoryName53": { "message": "CRM" }, - "categoryName54": { "message": "SEO" } + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/it/messages.json b/src/drivers/webextension/_locales/it/messages.json index 1e4d968f9..c1551c5b8 100644 --- a/src/drivers/webextension/_locales/it/messages.json +++ b/src/drivers/webextension/_locales/it/messages.json @@ -64,6 +64,9 @@ "categoryName51": { "message": "Landing Page Builder" }, "categoryName52": { "message": "Live Chat" }, "categoryName53": { "message": "CRM" }, - "categoryName54": { "message": "SEO" } + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/pl/messages.json b/src/drivers/webextension/_locales/pl/messages.json index 48c244520..011044367 100644 --- a/src/drivers/webextension/_locales/pl/messages.json +++ b/src/drivers/webextension/_locales/pl/messages.json @@ -65,5 +65,8 @@ "categoryName52": { "message": "Czat na żywo" }, "categoryName53": { "message": "Zarządzanie relacjami z klientami" }, "categoryName54": { "message": "SEO" }, - "categoryName55": { "message": "Księgowość" } + "categoryName55": { "message": "Księgowość" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/pt/messages.json b/src/drivers/webextension/_locales/pt/messages.json index f2937b104..6b11ee089 100644 --- a/src/drivers/webextension/_locales/pt/messages.json +++ b/src/drivers/webextension/_locales/pt/messages.json @@ -1,68 +1,71 @@ { - "github": { "message": "Fork Wappalyzer no GitHub!" }, - "noAppsDetected": { "message": "Não foi detetada nenhuma apliação." }, - "nothingToDo": { "message": "Nada a fazer aqui." }, - "optionTracking": { "message": "Enviar anonimamente relatorios sobre as apliações detetadas ao wappalyzer.com para investigação" }, - "optionUpgradeMessage": { "message": "Atualizações automaticas" }, - "optionDynamicIcon": { "message": "Utilizar o icone da aplicação em vez do logotido do Wappalyzer" }, - "options": { "message": "Definições" }, - "optionsSave": { "message": "Guardar as opções" }, - "optionsSaved": { "message": "Guardado" }, - "twitter": { "message": "Seguir o Wappalyzer no Twitter" }, - "website": { "message": "Ir para wappalyzer.com" }, - "categoryPin": { "message": "Always show icon" }, - "categoryName1": { "message": "Sistema de gerenciamento de conteudo(CMS)" }, - "categoryName2": { "message": "Forum" }, - "categoryName3": { "message": "Gestor de base de dados" }, - "categoryName4": { "message": "Ferramenta de documentação" }, - "categoryName5": { "message": "Widget" }, - "categoryName6": { "message": "Loja online" }, - "categoryName7": { "message": "Galeria de fotografias" }, - "categoryName8": { "message": "Wiki" }, - "categoryName9": { "message": "Gestor de servidores" }, - "categoryName10": { "message": "Ferramenta de estatisticas" }, - "categoryName11": { "message": "Blog" }, - "categoryName12": { "message": "Framework JavaScript" }, - "categoryName13": { "message": "Ferramenta de seguimento de problemas" }, - "categoryName14": { "message": "Leitor de videos" }, - "categoryName15": { "message": "Sistemas de comentários" }, - "categoryName16": { "message": "Captcha" }, - "categoryName17": { "message": "Script de policia" }, - "categoryName18": { "message": "Framework WEB" }, - "categoryName19": { "message": "Diversos" }, - "categoryName20": { "message": "Editor" }, - "categoryName21": { "message": "Sistema de gestão de Aprendizagem(LMS)" }, - "categoryName22": { "message": "Servidor WEB" }, - "categoryName23": { "message": "Ferramenta de cache" }, - "categoryName24": { "message": "Editor WYSIWYG" }, - "categoryName25": { "message": "Grafismo JavaScript" }, - "categoryName26": { "message": "Framework para dispositivos mobile" }, - "categoryName27": { "message": "Linguagem de programação" }, - "categoryName28": { "message": "Sistema Operativo" }, - "categoryName29": { "message": "Motor de pesquisa" }, - "categoryName30": { "message": "WebMail" }, - "categoryName31": { "message": "Rede de distribuição de conteudo(CDN)" }, - "categoryName32": { "message": "Sistema de vendas" }, - "categoryName33": { "message": "Extensão do servidor WEB" }, - "categoryName34": { "message": "Base de dados" }, - "categoryName35": { "message": "Mapa" }, - "categoryName36": { "message": "Rede de publicidade" }, - "categoryName37": { "message": "Dispositivo de rede" }, - "categoryName38": { "message": "Servidor multimédia" }, - "categoryName39": { "message": "Webcam" }, - "categoryName40": { "message": "Impressora" }, - "categoryName41": { "message": "Serviço de pagamento" }, - "categoryName42": { "message": "Gestor de Tags" }, - "categoryName43": { "message": "Sistema de assinaturas paga(Paywall)" }, - "categoryName44": { "message": "Sistema CI" }, - "categoryName45": { "message": "Sistema SCADA" }, - "categoryName46": { "message": "Acesso à distancia" }, - "categoryName47": { "message": "Ferramenta de desenvolvimento" }, - "categoryName48": { "message": "Rede de armazenamento" }, - "categoryName49": { "message": "Leitor RSS" }, - "categoryName50": { "message": "Sistema de gestão de documentos" }, - "categoryName51": { "message": "Landing Page Builder" }, - "categoryName52": { "message": "Chat em direto" }, - "categoryName53": { "message": "Sistemas de relação com o cliente(CRM)" }, - "categoryName54": { "message": "Otimização para motores de pesquisa(SEO)" } + "github": { "message": "Fork Wappalyzer no GitHub!" }, + "noAppsDetected": { "message": "Não foi detetada nenhuma apliação." }, + "nothingToDo": { "message": "Nada a fazer aqui." }, + "optionTracking": { "message": "Enviar anonimamente relatorios sobre as apliações detetadas ao wappalyzer.com para investigação" }, + "optionUpgradeMessage": { "message": "Atualizações automaticas" }, + "optionDynamicIcon": { "message": "Utilizar o icone da aplicação em vez do logotido do Wappalyzer" }, + "options": { "message": "Definições" }, + "optionsSave": { "message": "Guardar as opções" }, + "optionsSaved": { "message": "Guardado" }, + "twitter": { "message": "Seguir o Wappalyzer no Twitter" }, + "website": { "message": "Ir para wappalyzer.com" }, + "categoryPin": { "message": "Always show icon" }, + "categoryName1": { "message": "Sistema de gerenciamento de conteudo(CMS)" }, + "categoryName2": { "message": "Forum" }, + "categoryName3": { "message": "Gestor de base de dados" }, + "categoryName4": { "message": "Ferramenta de documentação" }, + "categoryName5": { "message": "Widget" }, + "categoryName6": { "message": "Loja online" }, + "categoryName7": { "message": "Galeria de fotografias" }, + "categoryName8": { "message": "Wiki" }, + "categoryName9": { "message": "Gestor de servidores" }, + "categoryName10": { "message": "Ferramenta de estatisticas" }, + "categoryName11": { "message": "Blog" }, + "categoryName12": { "message": "Framework JavaScript" }, + "categoryName13": { "message": "Ferramenta de seguimento de problemas" }, + "categoryName14": { "message": "Leitor de videos" }, + "categoryName15": { "message": "Sistemas de comentários" }, + "categoryName16": { "message": "Captcha" }, + "categoryName17": { "message": "Script de policia" }, + "categoryName18": { "message": "Framework WEB" }, + "categoryName19": { "message": "Diversos" }, + "categoryName20": { "message": "Editor" }, + "categoryName21": { "message": "Sistema de gestão de Aprendizagem(LMS)" }, + "categoryName22": { "message": "Servidor WEB" }, + "categoryName23": { "message": "Ferramenta de cache" }, + "categoryName24": { "message": "Editor WYSIWYG" }, + "categoryName25": { "message": "Grafismo JavaScript" }, + "categoryName26": { "message": "Framework para dispositivos mobile" }, + "categoryName27": { "message": "Linguagem de programação" }, + "categoryName28": { "message": "Sistema Operativo" }, + "categoryName29": { "message": "Motor de pesquisa" }, + "categoryName30": { "message": "WebMail" }, + "categoryName31": { "message": "Rede de distribuição de conteudo(CDN)" }, + "categoryName32": { "message": "Sistema de vendas" }, + "categoryName33": { "message": "Extensão do servidor WEB" }, + "categoryName34": { "message": "Base de dados" }, + "categoryName35": { "message": "Mapa" }, + "categoryName36": { "message": "Rede de publicidade" }, + "categoryName37": { "message": "Dispositivo de rede" }, + "categoryName38": { "message": "Servidor multimédia" }, + "categoryName39": { "message": "Webcam" }, + "categoryName40": { "message": "Impressora" }, + "categoryName41": { "message": "Serviço de pagamento" }, + "categoryName42": { "message": "Gestor de Tags" }, + "categoryName43": { "message": "Sistema de assinaturas paga(Paywall)" }, + "categoryName44": { "message": "Sistema CI" }, + "categoryName45": { "message": "Sistema SCADA" }, + "categoryName46": { "message": "Acesso à distancia" }, + "categoryName47": { "message": "Ferramenta de desenvolvimento" }, + "categoryName48": { "message": "Rede de armazenamento" }, + "categoryName49": { "message": "Leitor RSS" }, + "categoryName50": { "message": "Sistema de gestão de documentos" }, + "categoryName51": { "message": "Landing Page Builder" }, + "categoryName52": { "message": "Chat em direto" }, + "categoryName53": { "message": "Sistemas de relação com o cliente(CRM)" }, + "categoryName54": { "message": "Otimização para motores de pesquisa(SEO)" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/ro/messages.json b/src/drivers/webextension/_locales/ro/messages.json index 01060610f..e086ddd90 100644 --- a/src/drivers/webextension/_locales/ro/messages.json +++ b/src/drivers/webextension/_locales/ro/messages.json @@ -61,5 +61,7 @@ "categoryName52": { "message": "Chat Live" }, "categoryName53": { "message": "CRM" }, "categoryName54": { "message": "SEO" }, - "categoryName55": { "message": "Contabilitate" } + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/ru/messages.json b/src/drivers/webextension/_locales/ru/messages.json index a7745c4d9..87590878a 100644 --- a/src/drivers/webextension/_locales/ru/messages.json +++ b/src/drivers/webextension/_locales/ru/messages.json @@ -64,5 +64,8 @@ "twitter" : { "message" : "Следите за новостями в Твиттере" }, "website" : { "message" : "Перейти на Wappalyzer.com" }, "categoryPin": { "message": "Always show icon" }, - "categoryName54": { "message": "SEO" } + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/sk/messages.json b/src/drivers/webextension/_locales/sk/messages.json index cb044c9be..4d375fe9c 100644 --- a/src/drivers/webextension/_locales/sk/messages.json +++ b/src/drivers/webextension/_locales/sk/messages.json @@ -1,68 +1,71 @@ { - "github": { "message": "Forknite Wappalyzer na GitHube!" }, - "twitter": { "message": "Sledujte Wappalyzer na Twitteri" }, - "website": { "message": "Prejdite na adresu wappalyzer.com" }, - "options": { "message": "Možnosti" }, - "optionsSave": { "message": "Uložiť možnosti" }, - "optionsSaved": { "message": "Uložené" }, - "optionUpgradeMessage": { "message": "Povedzte mi o upgradoch" }, - "optionDynamicIcon": { "message": "Použiť ikonu aplikácie namiesto loga Wappalyzer" }, - "optionTracking": { "message": "Anonymne posielať správy o zistených aplikáciách na wappalyzer.com pre výskum" }, - "nothingToDo": { "message": "Nie je tu čo robiť." }, - "noAppsDetected": { "message": "Žiadne aplikácie neboli zistené." }, - "categoryPin": { "message": "Always show icon" }, - "categoryName1": { "message": "CMS" }, - "categoryName2": { "message": "Message Board" }, - "categoryName3": { "message": "Správca databáz" }, - "categoryName4": { "message": "Dokumentačný nástroj" }, - "categoryName5": { "message": "Widget" }, - "categoryName6": { "message": "E-commerce" }, - "categoryName7": { "message": "Fotogalérie" }, - "categoryName8": { "message": "Wiki" }, - "categoryName9": { "message": "Hosting panely" }, - "categoryName10": { "message": "Analytika" }, - "categoryName11": { "message": "Blog" }, - "categoryName12": { "message": "JavaScript Framework" }, - "categoryName13": { "message": "Issue Tracker" }, - "categoryName14": { "message": "Video prehrávač" }, - "categoryName15": { "message": "Systém komentárov" }, - "categoryName16": { "message": "Captcha" }, - "categoryName17": { "message": "Font Script" }, - "categoryName18": { "message": "Web Framework" }, - "categoryName19": { "message": "Rôzne" }, - "categoryName20": { "message": "Editor" }, - "categoryName21": { "message": "LMS" }, - "categoryName22": { "message": "Webový server" }, - "categoryName23": { "message": "Cache nástroj" }, - "categoryName24": { "message": "Rich Text editor" }, - "categoryName25": { "message": "JavaScript Grafika" }, - "categoryName26": { "message": "Mobile Framework" }, - "categoryName27": { "message": "Programovací jazyk" }, - "categoryName28": { "message": "Operačný systém" }, - "categoryName29": { "message": "Vyhľadávač" }, - "categoryName30": { "message": "Webmail" }, - "categoryName31": { "message": "CDN" }, - "categoryName32": { "message": "Marketingová automatizácia" }, - "categoryName33": { "message": "Rozšírenie webového servera" }, - "categoryName34": { "message": "Databáza" }, - "categoryName35": { "message": "Mapa" }, - "categoryName36": { "message": "Reklamná sieť" }, - "categoryName37": { "message": "Sieťová služba" }, - "categoryName38": { "message": "Media Server" }, - "categoryName39": { "message": "Webkamera" }, - "categoryName40": { "message": "Tlačiareň" }, - "categoryName41": { "message": "Platobný procesor" }, - "categoryName42": { "message": "Správca tagov" }, - "categoryName43": { "message": "Platobná brána" }, - "categoryName44": { "message": "Build/CI systém" }, - "categoryName45": { "message": "SCADA systém" }, - "categoryName46": { "message": "Vzdialený prístup" }, - "categoryName47": { "message": "Vývojový nástroj" }, - "categoryName48": { "message": "Sieťové úložisko" }, - "categoryName49": { "message": "Čítačky feedu" }, - "categoryName50": { "message": "Systémy správy dokumentov" }, - "categoryName51": { "message": "Nástroj na tvorbu vstupnej stránky" }, - "categoryName52": { "message": "Živý chat" }, - "categoryName53": { "message": "CRM" }, - "categoryName54": { "message": "SEO" } + "github": { "message": "Forknite Wappalyzer na GitHube!" }, + "twitter": { "message": "Sledujte Wappalyzer na Twitteri" }, + "website": { "message": "Prejdite na adresu wappalyzer.com" }, + "options": { "message": "Možnosti" }, + "optionsSave": { "message": "Uložiť možnosti" }, + "optionsSaved": { "message": "Uložené" }, + "optionUpgradeMessage": { "message": "Povedzte mi o upgradoch" }, + "optionDynamicIcon": { "message": "Použiť ikonu aplikácie namiesto loga Wappalyzer" }, + "optionTracking": { "message": "Anonymne posielať správy o zistených aplikáciách na wappalyzer.com pre výskum" }, + "nothingToDo": { "message": "Nie je tu čo robiť." }, + "noAppsDetected": { "message": "Žiadne aplikácie neboli zistené." }, + "categoryPin": { "message": "Always show icon" }, + "categoryName1": { "message": "CMS" }, + "categoryName2": { "message": "Message Board" }, + "categoryName3": { "message": "Správca databáz" }, + "categoryName4": { "message": "Dokumentačný nástroj" }, + "categoryName5": { "message": "Widget" }, + "categoryName6": { "message": "E-commerce" }, + "categoryName7": { "message": "Fotogalérie" }, + "categoryName8": { "message": "Wiki" }, + "categoryName9": { "message": "Hosting panely" }, + "categoryName10": { "message": "Analytika" }, + "categoryName11": { "message": "Blog" }, + "categoryName12": { "message": "JavaScript Framework" }, + "categoryName13": { "message": "Issue Tracker" }, + "categoryName14": { "message": "Video prehrávač" }, + "categoryName15": { "message": "Systém komentárov" }, + "categoryName16": { "message": "Captcha" }, + "categoryName17": { "message": "Font Script" }, + "categoryName18": { "message": "Web Framework" }, + "categoryName19": { "message": "Rôzne" }, + "categoryName20": { "message": "Editor" }, + "categoryName21": { "message": "LMS" }, + "categoryName22": { "message": "Webový server" }, + "categoryName23": { "message": "Cache nástroj" }, + "categoryName24": { "message": "Rich Text editor" }, + "categoryName25": { "message": "JavaScript Grafika" }, + "categoryName26": { "message": "Mobile Framework" }, + "categoryName27": { "message": "Programovací jazyk" }, + "categoryName28": { "message": "Operačný systém" }, + "categoryName29": { "message": "Vyhľadávač" }, + "categoryName30": { "message": "Webmail" }, + "categoryName31": { "message": "CDN" }, + "categoryName32": { "message": "Marketingová automatizácia" }, + "categoryName33": { "message": "Rozšírenie webového servera" }, + "categoryName34": { "message": "Databáza" }, + "categoryName35": { "message": "Mapa" }, + "categoryName36": { "message": "Reklamná sieť" }, + "categoryName37": { "message": "Sieťová služba" }, + "categoryName38": { "message": "Media Server" }, + "categoryName39": { "message": "Webkamera" }, + "categoryName40": { "message": "Tlačiareň" }, + "categoryName41": { "message": "Platobný procesor" }, + "categoryName42": { "message": "Správca tagov" }, + "categoryName43": { "message": "Platobná brána" }, + "categoryName44": { "message": "Build/CI systém" }, + "categoryName45": { "message": "SCADA systém" }, + "categoryName46": { "message": "Vzdialený prístup" }, + "categoryName47": { "message": "Vývojový nástroj" }, + "categoryName48": { "message": "Sieťové úložisko" }, + "categoryName49": { "message": "Čítačky feedu" }, + "categoryName50": { "message": "Systémy správy dokumentov" }, + "categoryName51": { "message": "Nástroj na tvorbu vstupnej stránky" }, + "categoryName52": { "message": "Živý chat" }, + "categoryName53": { "message": "CRM" }, + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/tr/messages.json b/src/drivers/webextension/_locales/tr/messages.json index 9b83cb252..457596faf 100644 --- a/src/drivers/webextension/_locales/tr/messages.json +++ b/src/drivers/webextension/_locales/tr/messages.json @@ -65,5 +65,7 @@ "categoryName52": { "message": "Canlı Sohbet" }, "categoryName53": { "message": "CRM" }, "categoryName54": { "message": "SEO" }, - "categoryName55": { "message": "Muhasebe" } + "categoryName55": { "message": "Muhasebe" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/uk/messages.json b/src/drivers/webextension/_locales/uk/messages.json index d1f93b44f..fff9c7bd2 100644 --- a/src/drivers/webextension/_locales/uk/messages.json +++ b/src/drivers/webextension/_locales/uk/messages.json @@ -64,5 +64,8 @@ "categoryName51": { "message": "Генератор лендінгів" }, "categoryName52": { "message": "Чат реального часу" }, "categoryName53": { "message": "CRM" }, - "categoryName54": { "message": "SEO" } + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/uz/messages.json b/src/drivers/webextension/_locales/uz/messages.json index 29f9a8274..c7d9d1bca 100644 --- a/src/drivers/webextension/_locales/uz/messages.json +++ b/src/drivers/webextension/_locales/uz/messages.json @@ -64,5 +64,8 @@ "categoryName51": { "message": "Sahifa generatorlari" }, "categoryName52": { "message": "Live Chat" }, "categoryName53": { "message": "CRM" }, - "categoryName54": { "message": "SEO" } + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/zh_CN/messages.json b/src/drivers/webextension/_locales/zh_CN/messages.json index 8ad012bc9..cac7d4ed7 100644 --- a/src/drivers/webextension/_locales/zh_CN/messages.json +++ b/src/drivers/webextension/_locales/zh_CN/messages.json @@ -1,69 +1,72 @@ { - "github": { "message": "查看 GitHub 上的 Wappalyzer" }, - "twitter": { "message": "关注 Twitter 上的 Wappalyzer" }, - "website": { "message": "访问 wappalyzer.com" }, - "options": { "message": "选项" }, - "optionsSave": { "message": "保存选项" }, - "optionsSaved": { "message": "已保存" }, - "optionUpgradeMessage": { "message": "通知我更新详情" }, - "optionDynamicIcon": { "message": "使用应用程序而非 Wappalyzer 的标志" }, - "optionTracking": { "message": "发送匿名的应用报告到 wappalyzer.com 供研究使用" }, - "nothingToDo": { "message": "这儿啥也没有。" }, - "noAppsDetected": { "message": "未检测到任何应用。" }, - "categoryPin": { "message": "Always show icon" }, - "categoryName1": { "message": "内容管理系统(CMS)" }, - "categoryName2": { "message": "消息板" }, - "categoryName3": { "message": "数据库管理器" }, - "categoryName4": { "message": "文档工具" }, - "categoryName5": { "message": "插件" }, - "categoryName6": { "message": "电子商务" }, - "categoryName7": { "message": "照片相册" }, - "categoryName8": { "message": "维基" }, - "categoryName9": { "message": "主机面板" }, - "categoryName10": { "message": "分析" }, - "categoryName11": { "message": "博客" }, - "categoryName12": { "message": "JavaScript 框架" }, - "categoryName13": { "message": "问题跟踪器" }, - "categoryName14": { "message": "视频播放器" }, - "categoryName15": { "message": "评论系统" }, - "categoryName16": { "message": "验证码" }, - "categoryName17": { "message": "字体脚本" }, - "categoryName18": { "message": "Web 框架" }, - "categoryName19": { "message": "杂项" }, - "categoryName20": { "message": "编辑器" }, - "categoryName21": { "message": "学习管理系统(LMS)" }, - "categoryName22": { "message": "Web 服务器" }, - "categoryName23": { "message": "缓存工具" }, - "categoryName24": { "message": "富文本编辑器" }, - "categoryName25": { "message": "JavaScript 图形库" }, - "categoryName26": { "message": "移动框架" }, - "categoryName27": { "message": "编程语言" }, - "categoryName28": { "message": "操作系统" }, - "categoryName29": { "message": "搜索引擎" }, - "categoryName30": { "message": "网页邮箱" }, - "categoryName31": { "message": "内容分发网络(CDN)" }, - "categoryName32": { "message": "营销自动化" }, - "categoryName33": { "message": "Web 服务器扩展" }, - "categoryName34": { "message": "数据库" }, - "categoryName35": { "message": "地图" }, - "categoryName36": { "message": "广告网络" }, - "categoryName37": { "message": "网络服务" }, - "categoryName38": { "message": "媒体服务器" }, - "categoryName39": { "message": "网络摄像头" }, - "categoryName40": { "message": "打印机" }, - "categoryName41": { "message": "支付处理器" }, - "categoryName42": { "message": "标签管理器" }, - "categoryName43": { "message": "付费壁障(Paywall)" }, - "categoryName44": { "message": "构建/持续集成系统" }, - "categoryName45": { "message": "数据采集与监控系统" }, - "categoryName46": { "message": "远程访问" }, - "categoryName47": { "message": "开发工具" }, - "categoryName48": { "message": "网络存储" }, - "categoryName49": { "message": "信息流(Feed)阅读器" }, - "categoryName50": { "message": "文档管理系统" }, - "categoryName51": { "message": "着陆页构建器" }, - "categoryName52": { "message": "在线聊天" }, - "categoryName53": { "message": "客户关系管理(CRM)" }, - "categoryName54": { "message": "搜索引擎优化(SEO)" }, - "categoryName55": { "message": "财务" } + "github": { "message": "查看 GitHub 上的 Wappalyzer" }, + "twitter": { "message": "关注 Twitter 上的 Wappalyzer" }, + "website": { "message": "访问 wappalyzer.com" }, + "options": { "message": "选项" }, + "optionsSave": { "message": "保存选项" }, + "optionsSaved": { "message": "已保存" }, + "optionUpgradeMessage": { "message": "通知我更新详情" }, + "optionDynamicIcon": { "message": "使用应用程序而非 Wappalyzer 的标志" }, + "optionTracking": { "message": "发送匿名的应用报告到 wappalyzer.com 供研究使用" }, + "nothingToDo": { "message": "这儿啥也没有。" }, + "noAppsDetected": { "message": "未检测到任何应用。" }, + "categoryPin": { "message": "Always show icon" }, + "categoryName1": { "message": "内容管理系统(CMS)" }, + "categoryName2": { "message": "消息板" }, + "categoryName3": { "message": "数据库管理器" }, + "categoryName4": { "message": "文档工具" }, + "categoryName5": { "message": "插件" }, + "categoryName6": { "message": "电子商务" }, + "categoryName7": { "message": "照片相册" }, + "categoryName8": { "message": "维基" }, + "categoryName9": { "message": "主机面板" }, + "categoryName10": { "message": "分析" }, + "categoryName11": { "message": "博客" }, + "categoryName12": { "message": "JavaScript 框架" }, + "categoryName13": { "message": "问题跟踪器" }, + "categoryName14": { "message": "视频播放器" }, + "categoryName15": { "message": "评论系统" }, + "categoryName16": { "message": "验证码" }, + "categoryName17": { "message": "字体脚本" }, + "categoryName18": { "message": "Web 框架" }, + "categoryName19": { "message": "杂项" }, + "categoryName20": { "message": "编辑器" }, + "categoryName21": { "message": "学习管理系统(LMS)" }, + "categoryName22": { "message": "Web 服务器" }, + "categoryName23": { "message": "缓存工具" }, + "categoryName24": { "message": "富文本编辑器" }, + "categoryName25": { "message": "JavaScript 图形库" }, + "categoryName26": { "message": "移动框架" }, + "categoryName27": { "message": "编程语言" }, + "categoryName28": { "message": "操作系统" }, + "categoryName29": { "message": "搜索引擎" }, + "categoryName30": { "message": "网页邮箱" }, + "categoryName31": { "message": "内容分发网络(CDN)" }, + "categoryName32": { "message": "营销自动化" }, + "categoryName33": { "message": "Web 服务器扩展" }, + "categoryName34": { "message": "数据库" }, + "categoryName35": { "message": "地图" }, + "categoryName36": { "message": "广告网络" }, + "categoryName37": { "message": "网络服务" }, + "categoryName38": { "message": "媒体服务器" }, + "categoryName39": { "message": "网络摄像头" }, + "categoryName40": { "message": "打印机" }, + "categoryName41": { "message": "支付处理器" }, + "categoryName42": { "message": "标签管理器" }, + "categoryName43": { "message": "付费壁障(Paywall)" }, + "categoryName44": { "message": "构建/持续集成系统" }, + "categoryName45": { "message": "数据采集与监控系统" }, + "categoryName46": { "message": "远程访问" }, + "categoryName47": { "message": "开发工具" }, + "categoryName48": { "message": "网络存储" }, + "categoryName49": { "message": "信息流(Feed)阅读器" }, + "categoryName50": { "message": "文档管理系统" }, + "categoryName51": { "message": "着陆页构建器" }, + "categoryName52": { "message": "在线聊天" }, + "categoryName53": { "message": "客户关系管理(CRM)" }, + "categoryName54": { "message": "搜索引擎优化(SEO)" }, + "categoryName55": { "message": "财务" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/zh_TW/messages.json b/src/drivers/webextension/_locales/zh_TW/messages.json index dbe8a0f2c..441b81be6 100644 --- a/src/drivers/webextension/_locales/zh_TW/messages.json +++ b/src/drivers/webextension/_locales/zh_TW/messages.json @@ -64,5 +64,8 @@ "categoryName51": { "message": "著陸頁產生器" }, "categoryName52": { "message": "線上聊天" }, "categoryName53": { "message": "客戶關係管理系統(CRM)" }, - "categoryName54": { "message": "SEO" } + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Accounting" }, + "categoryName56": { "message": "Cryptominer" }, + "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index 6accf3520..48f72cc1e 100644 --- a/src/drivers/webextension/manifest.json +++ b/src/drivers/webextension/manifest.json @@ -4,7 +4,7 @@ "author": "Elbert Alias", "homepage_url": "https://www.wappalyzer.com", "description": "Identify web technologies", - "version": "5.4.8", + "version": "5.4.10", "default_locale": "en", "manifest_version": 2, "icons": { From 6de4bac1e4c7c4d4ef4c81a93ec10fdcafdd9456 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Sat, 10 Mar 2018 16:09:35 +1100 Subject: [PATCH 080/175] Update locales --- src/drivers/webextension/_locales/pl/messages.json | 1 - src/drivers/webextension/_locales/zh_CN/messages.json | 1 - 2 files changed, 2 deletions(-) diff --git a/src/drivers/webextension/_locales/pl/messages.json b/src/drivers/webextension/_locales/pl/messages.json index 011044367..b25580d1b 100644 --- a/src/drivers/webextension/_locales/pl/messages.json +++ b/src/drivers/webextension/_locales/pl/messages.json @@ -66,7 +66,6 @@ "categoryName53": { "message": "Zarządzanie relacjami z klientami" }, "categoryName54": { "message": "SEO" }, "categoryName55": { "message": "Księgowość" }, - "categoryName55": { "message": "Accounting" }, "categoryName56": { "message": "Cryptominer" }, "categoryName57": { "message": "Static Site Generator" } } diff --git a/src/drivers/webextension/_locales/zh_CN/messages.json b/src/drivers/webextension/_locales/zh_CN/messages.json index cac7d4ed7..7d2438013 100644 --- a/src/drivers/webextension/_locales/zh_CN/messages.json +++ b/src/drivers/webextension/_locales/zh_CN/messages.json @@ -66,7 +66,6 @@ "categoryName53": { "message": "客户关系管理(CRM)" }, "categoryName54": { "message": "搜索引擎优化(SEO)" }, "categoryName55": { "message": "财务" }, - "categoryName55": { "message": "Accounting" }, "categoryName56": { "message": "Cryptominer" }, "categoryName57": { "message": "Static Site Generator" } } From 83fe10cda99da4a1e8abdf30122a3be3e88b5912 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Sun, 11 Mar 2018 02:25:28 +0100 Subject: [PATCH 081/175] bootstrap. added version detection (#2147) --- src/apps.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 5488cb0b9..4b5801cba 100644 --- a/src/apps.json +++ b/src/apps.json @@ -9895,7 +9895,8 @@ "]+class=\"[^\"]*glyphicon glyphicon-" ], "js": { - "bootstrap.Alert.VERSION": "(.*)\\;version:\\1" + "bootstrap.Alert.VERSION": "(.*)\\;version:\\1", + "jQuery.fn.tooltip.Constructor.VERSION": "(.*)\\;version:\\1" }, "icon": "Bootstrap.svg", "script": [ From 01a523694dc74137d0b670c2bccd2947867b4c01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Max=20Str=C3=BCbing?= Date: Sun, 11 Mar 2018 02:27:08 +0100 Subject: [PATCH 082/175] Use https for neos/flow website (#2158) --- src/apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps.json b/src/apps.json index 4b5801cba..69aac15f7 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6534,7 +6534,7 @@ "icon": "Neos.svg", "implies": "Neos Flow", "url": "/neos/", - "website": "http://neos.io" + "website": "https://neos.io" }, "Neos Flow": { "cats": [ @@ -6546,7 +6546,7 @@ }, "icon": "Neos.svg", "implies": "PHP", - "website": "http://flow.neos.io" + "website": "https://flow.neos.io" }, "Nepso": { "cats": [ From 08e0a3cb13433175605d5d51b124ef42ee28c72a Mon Sep 17 00:00:00 2001 From: jvoisin Date: Mon, 12 Mar 2018 03:41:10 +0100 Subject: [PATCH 083/175] Fix a typo in crypto-loot, found by @gdcam (#2161) --- src/apps.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/apps.json b/src/apps.json index 69aac15f7..2d6eb82fe 100644 --- a/src/apps.json +++ b/src/apps.json @@ -2159,9 +2159,9 @@ "CRLT.CONFIG.ASMJS_NAME": "" }, "script": [ - "^(?:https):?//crypto-loot\\.com/lib/", - "^(?:https):?//webmine\\.pro/", - "^(?:https):?//cryptoloot\\.pro/", + "^/crypto-loot\\.com/lib/", + "^/webmine\\.pro/", + "^/cryptoloot\\.pro/", "/crlt\\.js\\;confidence:75%" ], "icon": "Crypto-Loot.png", From 5344662f4cabc70e075fe257ad74b8106ca8f495 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Mon, 12 Mar 2018 16:06:30 +1100 Subject: [PATCH 084/175] Implement browser.cookie API --- src/apps.json | 359 ++++++++++++++----------- src/drivers/npm/package.json | 2 +- src/drivers/webextension/js/content.js | 42 ++- src/drivers/webextension/js/driver.js | 12 +- src/drivers/webextension/manifest.json | 3 +- src/wappalyzer.js | 56 ++-- 6 files changed, 271 insertions(+), 203 deletions(-) diff --git a/src/apps.json b/src/apps.json index 5488cb0b9..0b0fe4101 100644 --- a/src/apps.json +++ b/src/apps.json @@ -25,8 +25,10 @@ "cats": [ 1 ], + "cookies": { + "BITRIX_": "" + }, "headers": { - "Set-Cookie": "^BITRIX_", "X-Powered-CMS": "^Bitrix Site Manager" }, "html": "(?:]+components/bitrix|(?:src|href)=\"/bitrix/(?:js|templates))", @@ -68,8 +70,10 @@ 1, 6 ], + "cookies": { + "3dvisit": "" + }, "headers": { - "Set-Cookie": "3dvisit", "X-Powered-By": "3DCART" }, "icon": "3dCart.png", @@ -149,8 +153,10 @@ "js": { "amp_js_init": "" }, + "cookies": { + "AMP": "" + }, "headers": { - "Set-Cookie": "^AMP=", "X-AMP-Version": "([\\d.]+)\\;version:\\1" }, "icon": "AMPcms.png", @@ -923,8 +929,8 @@ "cats": [ 47 ], - "headers": { - "Set-cookie": "FESESSIONID" + "cookies": { + "FESESSIONID": "" }, "html": "(?:Log in to )?FishEye (?:and Crucible )?([\\d.]+)?\\;version:\\1", "icon": "Atlassian FishEye.svg", @@ -1132,8 +1138,9 @@ "cats": [ 6 ], - "headers": { - "Set-Cookie": "(?:bigwareCsid|bigWAdminID)" + "cookies": { + "bigwareCsid": "", + "bigWAdminID": "" }, "html": "(?:Diese ]+bigware\\.de|]+/main_bigware_\\d+\\.php)", "icon": "Bigware.png", @@ -1178,8 +1185,8 @@ "cats": [ 6 ], - "headers": { - "Set-Cookie": "blesta_sid" + "cookies": { + "blesta_sid": "" }, "icon": "Blesta.png", "website": "http://www.blesta.com" @@ -1253,8 +1260,8 @@ "cats": [ 18 ], - "headers": { - "Set-Cookie": "bf_session=" + "cookies": { + "bf_session": "" }, "html": "Powered by ]+href=\"https?://(?:www\\.)?cibonfire\\.com[^>]*>Bonfire v([^<]+)\\;version:\\1", "icon": "Bonfire.png", @@ -1435,8 +1442,8 @@ "cats": [ 1 ], - "headers": { - "Set-Cookie": "^CMSSESSID" + "cookies": { + "CMSSESSID": "" }, "icon": "CMS Made Simple.png", "implies": "PHP", @@ -1519,8 +1526,8 @@ "cats": [ 18 ], - "headers": { - "Set-Cookie": "cakephp=" + "cookies": { + "cakephp": "" }, "icon": "CakePHP.png", "implies": "PHP", @@ -1842,8 +1849,11 @@ "cats": [ 18 ], - "headers": { - "Set-Cookie": "(?:exp_last_activity|exp_tracker|ci_(?:session|(csrf_token)))\\;version:\\1?2+:" + "cookies": { + "exp_last_activity": "", + "exp_tracker": "", + "ci_session": "", + "ci_csrf_token": "(.*)\\;version:\\1?2+:" }, "html": "]+name=\"ci_csrf_token\"\\;version:2+", "icon": "CodeIgniter.png", @@ -2096,8 +2106,10 @@ "cats": [ 1 ], + "cookies": { + "CraftSessionId": "" + }, "headers": { - "Set-Cookie": "^CraftSessionId=", "X-Powered-By": "\bCraft CMS\b" }, "icon": "Craft CMS.svg", @@ -2227,10 +2239,12 @@ "DotNetNuke": "", "dnn.apiversion": "(.*)\\;version:\\1" }, + "cookies": { + "DotNetNukeAnonymous": "" + }, "headers": { "Cookie": "dnn_IsMobile=", "DNNOutputCache": "", - "Set-Cookie": "DotNetNukeAnonymous=", "X-Compressed-By": "DotNetNuke" }, "html": [ @@ -2546,8 +2560,8 @@ "cats": [ 8 ], - "headers": { - "Set-Cookie": "^DokuWiki=" + "cookies": { + "DokuWiki": "" }, "icon": "DokuWiki.png", "implies": "PHP", @@ -2668,8 +2682,8 @@ 6, 10 ], - "headers": { - "Set-Cookie": "Dynamicweb=" + "cookies": { + "Dynamicweb": "" }, "icon": "Dynamicweb.png", "implies": "Microsoft ASP.NET", @@ -2761,8 +2775,9 @@ "cats": [ 1 ], - "headers": { - "Set-Cookie": "EPi(?:Trace|Server)[^;]*=" + "cookies": { + "EPiTrace": "", + "EPiServer": "" }, "icon": "EPiServer.png", "implies": "Microsoft ASP.NET", @@ -2987,8 +3002,10 @@ "cats": [ 1 ], - "headers": { - "Set-Cookie": "^exp_(?:last_activity|tracker|csrf_token)" + "cookies": { + "exp_last_activity": "", + "exp_tracker": "", + "exp_csrf_token": "" }, "icon": "ExpressionEngine.png", "implies": "PHP", @@ -3211,8 +3228,8 @@ "cats": [ 13 ], - "headers": { - "Set-Cookie": "flyspray_project=" + "cookies": { + "flyspray_project": "" }, "html": "(?:]+>Powered by Flyspray|\n\\s+© \\d{4} Gogs Version: ([\\d.]+) Page:\\;version:\\1", @@ -3649,8 +3669,8 @@ "cats": [ 47 ], - "headers": { - "Set-Cookie": "^i_like_gitea=" + "cookies": { + "i_like_gitea": "" }, "html": [ "
\n\\s+© Gitea Version: ([\\d.]+)\\;version:\\1" @@ -3687,8 +3707,10 @@ "gaGlobal": "", "GoogleAnalyticsObject": "" }, - "headers": { - "Set-Cookie": "__utma" + "cookies": { + "_ga": "", + "_gat": "", + "__utma": "" }, "icon": "Google Analytics.svg", "script": "google-analytics\\.com\\/(?:ga|urchin|(analytics))\\.js\\;version:\\1?UA:", @@ -3791,8 +3813,8 @@ "cats": [ 1 ], - "headers": { - "Set-Cookie": "cnv_session" + "cookies": { + "cnv_session": "" }, "icon": "CNV.png", "implies": "Laravel", @@ -3852,8 +3874,8 @@ "cats": [ 1 ], - "headers": { - "Set-Cookie": "graffitibot[^;]=" + "cookies": { + "graffitibot": "" }, "icon": "Graffiti CMS.png", "implies": "Microsoft ASP.NET", @@ -4217,8 +4239,8 @@ 1, 2 ], - "headers": { - "Set-Cookie:": "_homeland_" + "cookies": { + "_homeland_": "" }, "icon": "Homeland.png", "implies": "Ruby on Rails", @@ -4228,8 +4250,8 @@ "cats": [ 1 ], - "headers": { - "Set-Cookie": "hotaru_mobile=" + "cookies": { + "hotaru_mobile": "" }, "icon": "Hotaru CMS.png", "implies": "PHP", @@ -4277,8 +4299,8 @@ "cats": [ 6 ], - "headers": { - "Set-Cookie": "_hybris" + "cookies": { + "_hybris": "" }, "html": "<[^>]+/(?:sys_master|hybr|_ui/(?:responsive/)?(?:desktop|common(?:/images|/img)?))/", "icon": "Hybris.png", @@ -4427,9 +4449,9 @@ "cats": [ 1 ], - "headers": { - "Set-Cookie": "^ICMSSession[^;]*=", - "X-Powered-By": "ImpressCMS" + "cookies": { + "ICMSSession": "", + "ImpressCMS": "" }, "icon": "ImpressCMS.png", "implies": "PHP", @@ -4488,8 +4510,8 @@ "cats": [ 1 ], - "headers": { - "Set-cookie": "MAKACSESSION" + "cookies": { + "MAKACSESSION": "" }, "html": "Powered by\\s+(?:CERN )?(?:CDS )?Indico( [\\d\\.]+)?\\;version:\\1", "icon": "Indico.png", @@ -4530,8 +4552,8 @@ "cats": [ 1 ], - "headers": { - "Set-Cookie": "InstantCMS\\[logdate\\]=" + "cookies": { + "InstantCMS[logdate]": "" }, "icon": "InstantCMS.png", "implies": "PHP", @@ -4582,8 +4604,8 @@ "cats": [ 50 ], - "headers": { - "Set-cookie": "INVENIOSESSION" + "cookies": { + "INVENIOSESSION": "" }, "html": "(?:Powered by|System)\\s+(?:CERN )?(?:CDS )?Invenio\\s*v?([\\d\\.]+)?\\;version:\\1", "icon": "Invenio.png", @@ -4689,8 +4711,8 @@ "cats": [ 6 ], - "headers": { - "Set-Cookie": "JTLSHOP=" + "cookies": { + "JTLSHOP": "" }, "html": "(?:]+name=\"JTLSHOP|", @@ -5234,9 +5258,6 @@ "cats": [ 1 ], - "headers": { - "Set-Cookie": "lep\\d+sessionid=" - }, "icon": "LEPTON.png", "implies": "PHP", "meta": { @@ -5258,8 +5279,8 @@ "cats": [ 18 ], - "headers": { - "Set-Cookie": "laravel_session" + "cookies": { + "laravel_session": "" }, "icon": "Laravel.png", "implies": "PHP", @@ -5281,8 +5302,8 @@ 1, 6 ], - "headers": { - "Set-Cookie": "botble_session" + "cookies": { + "botble_session": "" }, "icon": "mypage-platform.png", "implies": "Laravel", @@ -5344,8 +5365,8 @@ "cats": [ 1 ], - "headers": { - "Set-Cookie": "lm_online" + "cookies": { + "lm_online": "" }, "html": " - - - - - - - - - - - - - - - - - - - - From 916b3af5c030b159020a73857931d6a7f5e39d64 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Sat, 17 Mar 2018 11:55:56 +1100 Subject: [PATCH 097/175] Handle uncaught exceptions in NPM driver --- src/drivers/npm/driver.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index d0a593bc0..c47d6da26 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -44,6 +44,8 @@ class Driver { this.wappalyzer.driver.log = (message, source, type) => this.log(message, source, type); this.wappalyzer.driver.displayApps = (detected, meta, context) => this.displayApps(detected, meta, context); + + process.on('uncaughtException', e => this.wappalyzer.log('Uncaught exception: ' + e.message, 'driver', 'error')); } analyze() { From 4d307ef90b73952b27724f329a10c0140afd2518 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Sat, 17 Mar 2018 12:14:28 +1100 Subject: [PATCH 098/175] Add cookie detection to NPM driver --- src/drivers/npm/driver.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index c47d6da26..757f07b8f 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -127,12 +127,14 @@ class Driver { const html = this.getHtml(browser); const scripts = this.getScripts(browser); const js = this.getJs(browser); + const cookies = this.getCookies(browser); this.wappalyzer.analyze(pageUrl, { headers, html, scripts, - js + js, + cookies, }) .then(() => { const links = Array.prototype.reduce.call( @@ -267,6 +269,21 @@ class Driver { return js; } + getCookies(browser) { + const cookies = []; + + if ( browser.cookies ) { + browser.cookies.forEach(cookie => cookies.push({ + name: cookie.key, + value: cookie.value, + domain: cookie.domain, + path: cookie.path, + })); + } + + return cookies; + } + crawl(pageUrl, index, depth = 1) { pageUrl.canonical = pageUrl.protocol + '//' + pageUrl.host + pageUrl.pathname; From bf47697939efd2157dca098195cea7b0e49fbc34 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Sat, 17 Mar 2018 12:19:32 +1100 Subject: [PATCH 099/175] Build v5.4.12 --- src/drivers/npm/driver.js | 14 +++++++------- src/drivers/npm/package.json | 2 +- src/drivers/webextension/manifest.json | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 757f07b8f..58681d910 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -138,15 +138,15 @@ class Driver { }) .then(() => { const links = Array.prototype.reduce.call( - browser.document.getElementsByTagName('a'), - (acc, link) => { - if (link.protocol.match(/https?:/) || link.hostname === this.origPageUrl.hostname || extensions.test(link.pathname)) { + browser.document.getElementsByTagName('a'), (results, link) => { + if ( link.protocol.match(/https?:/) || link.hostname === this.origPageUrl.hostname || extensions.test(link.pathname) ) { link.hash = ''; - acc.push(url.parse(link.href)); + + results.push(url.parse(link.href)); } - return acc; - }, - [] + + return results; + }, [] ); return resolve(links); diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 54c0badc5..fe2cef76b 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -2,7 +2,7 @@ "name": "wappalyzer", "description": "Uncovers the technologies used on websites", "homepage": "https://github.com/AliasIO/Wappalyzer", - "version": "5.4.11", + "version": "5.4.12", "author": "Elbert Alias", "license": "GPL-3.0", "repository": { diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index a873d8c60..252ac0d78 100644 --- a/src/drivers/webextension/manifest.json +++ b/src/drivers/webextension/manifest.json @@ -4,7 +4,7 @@ "author": "Elbert Alias", "homepage_url": "https://www.wappalyzer.com", "description": "Identify web technologies", - "version": "5.4.11", + "version": "5.4.12", "default_locale": "en", "manifest_version": 2, "icons": { From c9b0ab7aa2db7ca720014a5afb096334febebcb0 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Sun, 18 Mar 2018 14:34:20 +1100 Subject: [PATCH 100/175] Fix header detection, performance improvements in WebExtension driver --- src/drivers/webextension/js/content.js | 14 ++++- src/drivers/webextension/js/driver.js | 80 +++++++++++--------------- src/drivers/webextension/js/inject.js | 22 +++---- src/wappalyzer.js | 28 +++++---- 4 files changed, 75 insertions(+), 69 deletions(-) diff --git a/src/drivers/webextension/js/content.js b/src/drivers/webextension/js/content.js index e2c1a208d..061830705 100644 --- a/src/drivers/webextension/js/content.js +++ b/src/drivers/webextension/js/content.js @@ -26,15 +26,19 @@ if ( typeof browser !== 'undefined' && typeof document.body !== 'undefined' ) { const script = document.createElement('script'); script.onload = () => { - addEventListener('message', event => { + const onMessage = event => { if ( event.data.id !== 'js' ) { return; } - document.body.removeChild(script); + removeEventListener('message', onMessage); sendMessage('analyze', { js: event.data.js }); - }, true); + + script.remove(); + }; + + addEventListener('message', onMessage); sendMessage('get_js_patterns', {}, response => { if ( response ) { @@ -61,3 +65,7 @@ function sendMessage(id, subject, callback) { source: 'content.js' }, callback || ( () => {} )); } + +// https://stackoverflow.com/a/44774834 +// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/executeScript#Return_value +undefined; diff --git a/src/drivers/webextension/js/driver.js b/src/drivers/webextension/js/driver.js index d05d81534..bbe784d10 100644 --- a/src/drivers/webextension/js/driver.js +++ b/src/drivers/webextension/js/driver.js @@ -8,7 +8,6 @@ const wappalyzer = new Wappalyzer(); var tabCache = {}; -var headersCache = {}; var categoryOrder = []; var options = {}; var robotsTxtQueue = {}; @@ -118,48 +117,43 @@ getOption('version') getOption('dynamicIcon', true); getOption('pinnedCategory'); -// Run content script -var callback = tabs => { - tabs.forEach(tab => { - if ( tab.url.match(/^https?:\/\//) ) { +// Run content script on all tabs +browser.tabs.query({ url: [ 'http://*/*', 'https://*/*' ] }) + .then(tabs => { + tabs.forEach(tab => { browser.tabs.executeScript(tab.id, { - file: 'js/content.js' + file: '../js/content.js' }); - } + }) }) -}; - -browser.tabs.query({}) - .then(callback) .catch(error => wappalyzer.log(error, 'driver', 'error')); // Capture response headers browser.webRequest.onCompleted.addListener(request => { - var responseHeaders = {}; + const headers = {}; if ( request.responseHeaders ) { - var url = wappalyzer.parseUrl(request.url); + const url = wappalyzer.parseUrl(request.url); - request.responseHeaders.forEach(function(header) { - if ( !responseHeaders[header.name.toLowerCase()] ) { - responseHeaders[header.name.toLowerCase()] = [] - } - responseHeaders[header.name.toLowerCase()].push(header.value || '' + header.binaryValue); - }); + browser.tabs.query({ url: [ url.canonical ] }) + .then(tabs => { + const tab = tabs[0] || null; - if ( headersCache.length > 50 ) { - headersCache = {}; - } + if ( tab ) { + request.responseHeaders.forEach(header => { + const name = header.name.toLowerCase(); - if ( /text\/html/.test(responseHeaders['content-type'][0]) ) { - if ( headersCache[url.canonical] === undefined ) { - headersCache[url.canonical] = {}; - } + headers[name] = headers[name] || []; - Object.keys(responseHeaders).forEach(header => { - headersCache[url.canonical][header] = responseHeaders[header].slice(); - }); - } + headers[name].push(header.value || header.binaryValue.toString()); + }); + + if ( headers['content-type'] && /\/x?html/.test(headers['content-type'][0]) ) { + wappalyzer.analyze(url, { headers }, { tab }); + } + } + }) + .catch(error => wappalyzer.log(error, 'driver', 'error')); } }, { urls: [ 'http://*/*', 'https://*/*' ], types: [ 'main_frame' ] }, [ 'responseHeaders' ]); @@ -167,7 +161,7 @@ browser.webRequest.onCompleted.addListener(request => { ( chrome || browser ).runtime.onMessage.addListener((message, sender, sendResponse) => { if ( typeof message.id != 'undefined' ) { if ( message.id !== 'log' ) { - wappalyzer.log('Message received' + ( message.source ? ' from ' + message.source : '' ) + ': ' + message.id, 'driver'); + wappalyzer.log('Message' + ( message.source ? ' from ' + message.source : '' ) + ': ' + message.id, 'driver'); } var url = wappalyzer.parseUrl(sender.tab ? sender.tab.url : ''); @@ -175,24 +169,16 @@ browser.webRequest.onCompleted.addListener(request => { switch ( message.id ) { case 'log': - wappalyzer.log(message.message, message.source); + wappalyzer.log(message.subject, message.source); break; case 'init': browser.cookies.getAll({ domain: '.' + url.hostname }) - .then(cookies => wappalyzer.analyze(url, { cookies }, { - tab: sender.tab - })); + .then(cookies => wappalyzer.analyze(url, { cookies }, { tab: sender.tab })); break; case 'analyze': - if ( headersCache[url.canonical] !== undefined ) { - message.subject.headers = headersCache[url.canonical]; - } - - wappalyzer.analyze(url, message.subject, { - tab: sender.tab - }); + wappalyzer.analyze(url, message.subject, { tab: sender.tab }); break; case 'ad_log': @@ -242,7 +228,13 @@ wappalyzer.driver.log = (message, source, type) => { wappalyzer.driver.displayApps = (detected, meta, context) => { var tab = context.tab; - tabCache[tab.id] = tabCache[tab.id] || { detected: [] }; + if ( tab === undefined ) { + return; + } + + tabCache[tab.id] = tabCache[tab.id] || { + detected: [] + }; tabCache[tab.id].detected = detected; @@ -295,8 +287,6 @@ wappalyzer.driver.displayApps = (detected, meta, context) => { */ wappalyzer.driver.getRobotsTxt = (host, secure = false) => { if ( robotsTxtQueue.hasOwnProperty(host) ) { - wappalyzer.log('robotTxt fetch already in queue'); - return robotsTxtQueue[host]; } diff --git a/src/drivers/webextension/js/inject.js b/src/drivers/webextension/js/inject.js index 55ac2be4d..f860e7646 100644 --- a/src/drivers/webextension/js/inject.js +++ b/src/drivers/webextension/js/inject.js @@ -1,10 +1,14 @@ -(function() { +(() => { try { - addEventListener('message', (event => { + addEventListener('message', onMessage); + + function onMessage(event) { if ( event.data.id !== 'patterns' ) { return; } + removeEventListener('message', onMessage); + const patterns = event.data.patterns || {}; const js = {}; @@ -30,13 +34,9 @@ } postMessage({ id: 'js', js }, '*'); - }), false); - } catch(e) { - // Fail quietly - } + } - function detectJs(chain) { - try { + function detectJs(chain) { const properties = chain.split('.'); var value = properties.length ? window : null; @@ -54,8 +54,8 @@ } return typeof value === 'string' || typeof value === 'number' ? value : !!value; - } catch(e) { - // Fail quietly } + } catch(e) { + // Fail quietly } -}()); +})(); diff --git a/src/wappalyzer.js b/src/wappalyzer.js index d289fd2fd..cf91b953d 100644 --- a/src/wappalyzer.js +++ b/src/wappalyzer.js @@ -42,22 +42,28 @@ class Wappalyzer { } analyze(url, data, context) { + const startTime = new Date(); + const promises = []; var apps = {}; - if ( typeof data.html !== 'string' ) { - data.html = ''; - } - if ( this.detected[url.canonical] === undefined ) { this.detected[url.canonical] = {}; } // Additional information - const matches = data.html.match(/]*[: ]lang="([a-z]{2}((-|_)[A-Z]{2})?)"/i); + var language = null; + + if ( data.html ) { + if ( typeof data.html !== 'string' ) { + data.html = ''; + } + + const matches = data.html.match(/]*[: ]lang="([a-z]{2}((-|_)[A-Z]{2})?)"/i); - const language = matches && matches.length ? matches[1] : null; + language = matches && matches.length ? matches[1] : null; + } Object.keys(this.apps).forEach(appName => { apps[appName] = this.detected[url.canonical] && this.detected[url.canonical][appName] ? this.detected[url.canonical][appName] : new Application(appName, this.apps[appName]); @@ -86,7 +92,7 @@ class Wappalyzer { if ( data.env ) { promises.push(this.analyzeEnv(app, data.env)); } - }) + }); if ( data.js ) { Object.keys(data.js).forEach(appName => { @@ -111,8 +117,10 @@ class Wappalyzer { this.cacheDetectedApps(apps, url.canonical); this.trackDetectedApps(apps, url, language); + this.log('Processing ' + Object.keys(data).join(', ') + ' took ' + (( new Date() - startTime ) / 1000).toFixed(2) + 's (' + url.hostname + ')', 'core'); + if ( Object.keys(apps).length ) { - this.log(Object.keys(apps).length + ' apps detected: ' + Object.keys(apps).join(', ') + ' on ' + url.canonical, 'core'); + this.log('Identified ' + Object.keys(apps).join(', ') + ' (' + url.hostname + ')', 'core'); } this.driver.displayApps(this.detected[url.canonical], { language }, context); @@ -492,9 +500,9 @@ class Wappalyzer { const promises = []; Object.keys(patterns).forEach(headerName => { - headerName = headerName.toLowerCase(); - promises.push(this.asyncForEach(patterns[headerName], pattern => { + headerName = headerName.toLowerCase(); + if ( headerName in headers ) { headers[headerName].forEach(headerValue => { if ( pattern.regex.test(headerValue) ) { From 09ebc4aa486b5151ab05344e7611006a877408c2 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Fri, 30 Mar 2018 10:55:07 +1100 Subject: [PATCH 101/175] Disable SSL checks in NPM driver --- src/drivers/npm/driver.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 58681d910..2dbbfdd78 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -110,6 +110,7 @@ class Driver { visit(pageUrl, timerScope, resolve) { const browser = new Browser({ silent: true, + strictSSL: false, userAgent: this.options.userAgent, waitDuration: this.options.maxWait, }); From 41ae79989b00af2c007b657c7247de857a177649 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 30 Mar 2018 01:59:05 +0200 Subject: [PATCH 102/175] Implement Slick detection (#2171) * Implement Slick detection This can be tested [here](http://spacemacs.org/). No icons :/ * Fix an alcohol-related typo :3 * Remove a missing icon --- src/apps.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/apps.json b/src/apps.json index a43580e7a..4ce9f68d7 100644 --- a/src/apps.json +++ b/src/apps.json @@ -8949,6 +8949,15 @@ "script": "serving-sys\\.com/", "website": "http://sizmek.com" }, + "Slick": { + "cats": [ + 12 + ], + "html": "]+(?:/([\\d.]+)/)?slick-theme\\.css\\;version:\\1", + "implies": "jQuery", + "script": "(?:/([\\d.]+))?/slick(?:\\.min)?\\.js\\;version:\\1", + "website": "http://kenwheeler.github.io/slick" + }, "Slimbox": { "cats": [ 12 From df1fbc0d64c75e08f78569288e278a6a4bf37853 Mon Sep 17 00:00:00 2001 From: Igor Ryzhenkov Date: Fri, 30 Mar 2018 03:00:34 +0300 Subject: [PATCH 103/175] Update messages.json (#2180) --- src/drivers/webextension/_locales/ru/messages.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/drivers/webextension/_locales/ru/messages.json b/src/drivers/webextension/_locales/ru/messages.json index 87590878a..bd5b21521 100644 --- a/src/drivers/webextension/_locales/ru/messages.json +++ b/src/drivers/webextension/_locales/ru/messages.json @@ -65,7 +65,7 @@ "website" : { "message" : "Перейти на Wappalyzer.com" }, "categoryPin": { "message": "Always show icon" }, "categoryName54": { "message": "SEO" }, - "categoryName55": { "message": "Accounting" }, - "categoryName56": { "message": "Cryptominer" }, - "categoryName57": { "message": "Static Site Generator" } + "categoryName55": { "message": "Бухгалтерский учёт" }, + "categoryName56": { "message": "Криптомайнер" }, + "categoryName57": { "message": "Генератор статических сайтов" } } From fc6eadb86e75b8df33699befe345bc135bfab076 Mon Sep 17 00:00:00 2001 From: Camille Barneaud <1693643+gadcam@users.noreply.github.com> Date: Fri, 30 Mar 2018 02:00:49 +0200 Subject: [PATCH 104/175] Remove low confidence pattern js (#2181) * Remove low confidence pattern js They were doing a lot of noise with the extension on a lot of website. + Improve Select2 detection * Update vue.js pattern Change another pattern of Vue.js as suggested @jvoisin --- src/apps.json | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/apps.json b/src/apps.json index 4ce9f68d7..8df96e541 100644 --- a/src/apps.json +++ b/src/apps.json @@ -2218,7 +2218,6 @@ 25 ], "js": { - "d3": "\\;confidence:20", "d3.version": "(.*)\\;version:\\1" }, "icon": "D3.png", @@ -2746,7 +2745,6 @@ ], "icon": "ef.js.svg", "js": { - "ef": "\\;confidence:20", "ef.version": "(.*)\\;version:\\1", "efCore": "" }, @@ -5108,7 +5106,6 @@ 12 ], "js": { - "ko": "\\;confidence:20", "ko.version": "(.*)\\;version:\\1" }, "icon": "Knockout.js.png", @@ -8315,10 +8312,11 @@ 12 ], "js": { - "Rx": "\\;confidence:20" + "Rx.CompositeDisposable": "", + "Rx.Symbol": "" }, "icon": "RxJS.png", - "script": "rx(?:\\.\\w+)?(?:\\.compat)?(?:\\.min)?\\.js", + "script": "rx(?:\\.\\w+)?(?:\\.compat|\\.global)?(?:\\.min)?\\.js", "website": "http://reactivex.io" }, "S.Builder": { @@ -8581,8 +8579,11 @@ ], "icon": "Select2.png", "implies": "jQuery", - "script": "select2.*\\.js", - "website": "http://select2.github.io" + "js": { + "jQuery.fn.select2": "" + }, + "script": "select2(?:\\.min|\\.full)?\\.js", + "website": "https://select2.org/" }, "Semantic-ui": { "cats": [ @@ -9058,12 +9059,13 @@ 12 ], "js": { - "io.version": "(.*)\\;version:\\1\\;confidence:20" + "io.Socket": "", + "io.version": "(.*)\\;version:\\1" }, "icon": "Socket.io.png", "implies": "Node.js", "script": "socket\\.io.*\\.js", - "website": "http://socket.io" + "website": "https://socket.io" }, "Solodev": { "cats": [ @@ -10464,8 +10466,7 @@ "icon": "Vue.js.png", "script": [ "vue(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", - "/([\\d.]+)/vue(?:\\.min)?\\.js\\;version:\\1", - "vue.*\\.js\\;confidence:20" + "(?:/([\\d.]+))?/vue(?:\\.min)?\\.js\\;version:\\1" ], "website": "http://vuejs.org" }, @@ -11356,11 +11357,11 @@ 12 ], "js": { - "basket": "\\;confidence:20" + "basket.isValidItem": "" }, "icon": "basket.js.png", "script": "basket.*\\.js\\;confidence:10", - "website": "http://addyosmani.github.io/basket.js/" + "website": "https://addyosmani.github.io/basket.js/" }, "cPanel": { "cats": [ From c3d2b274e87f275aed5e5be934e5e0fbbe1144a1 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 30 Mar 2018 02:01:13 +0200 Subject: [PATCH 105/175] Add an other header to fingerprint cloudfront (#2183) --- src/apps.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 8df96e541..e69718580 100644 --- a/src/apps.json +++ b/src/apps.json @@ -582,7 +582,8 @@ 31 ], "headers": { - "X-Amz-Cf-Id": "" + "X-Amz-Cf-Id": "", + "Via": "\\(CloudFront\\)$" }, "icon": "Amazon-Cloudfront.svg", "website": "http://aws.amazon.com/cloudfront/" From 604dbaa2f2cdddd2eece41720cc7e4bf399d9a36 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 30 Mar 2018 02:01:29 +0200 Subject: [PATCH 106/175] Fix a typo in ParticlesJS detection (#2185) This can be tested [here](http://tengine.taobao.org/) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index e69718580..955eb687b 100644 --- a/src/apps.json +++ b/src/apps.json @@ -11995,7 +11995,7 @@ 25 ], "js": { - "particleJS": "" + "particlesJS": "" }, "script": "/particles(?:\\.min)?\\.js", "html": "
", From 7f998786b77611482c9047f43ac62d656e1758fa Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Fri, 30 Mar 2018 02:01:39 +0200 Subject: [PATCH 107/175] added underscore.js version (#2182) --- src/apps.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/apps.json b/src/apps.json index 955eb687b..78ad4ac23 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10153,6 +10153,9 @@ 12 ], "icon": "Underscore.js.png", + "js": { + "_.VERSION": "(.*)\\;version:\\1" + }, "script": "underscore.*\\.js(?:\\?ver=([\\d.]+))?\\;version:\\1", "website": "http://underscorejs.org" }, From d95a3c3afbd556308d3089904c53c0430533e652 Mon Sep 17 00:00:00 2001 From: Charlie Chrisman Date: Thu, 29 Mar 2018 17:02:01 -0700 Subject: [PATCH 108/175] Update Contentful detection (#2186) * Update Contentful detection * Update Contentful detection Updated per suggestion from @jvoisin. Thanks! --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 78ad4ac23..323d0a9de 100644 --- a/src/apps.json +++ b/src/apps.json @@ -2041,7 +2041,7 @@ "cats": [ 1 ], - "html": "<[^>]+(?:https?:)?//(?:assets|downloads|images|videos)\\.contentful\\.com", + "html": "<[^>]+(?:https?:)?//(?:assets|downloads|images|videos)\\.(?:cfassets\\.net|contentful\\.com)", "icon": "Contentful.svg", "website": "http://www.contentful.com" }, From f327408b43f9111e91ad0b12cffaae4ce94f9cba Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 30 Mar 2018 02:02:20 +0200 Subject: [PATCH 109/175] Apparently, some sites are exposing their varnish version (#2187) * Apparently, some sites are exposing their varnish version This can be tested [here](https://en.wikipedia.org/wiki/Erlk%C3%B6nig_(Goethe)) * Simplify the regexp, since it's a `search` and not a `match` --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 323d0a9de..2fba34e3e 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10303,7 +10303,7 @@ 23 ], "headers": { - "Via": ".*Varnish", + "Via": "varnish(?: \\(Varnish/([\\d.]+)\\))?\\;version:\\1", "X-Varnish": "", "X-Varnish-Action": "", "X-Varnish-Age": "", From bfff51c3fd1258c2aa660622369a2971865ca173 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 30 Mar 2018 02:02:30 +0200 Subject: [PATCH 110/175] Fastly can be present in "Vary" header (#2188) This can be verified [here](https://stackoverflow.com) --- src/apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps.json b/src/apps.json index 2fba34e3e..9d6055aa5 100644 --- a/src/apps.json +++ b/src/apps.json @@ -3102,6 +3102,7 @@ ], "headers": { "Fastly-Debug-Digest": "", + "Vary": "Fastly-SSL", "X-Fastly-Request-ID": "" }, "icon": "Fastly.svg", From ad82544f5ed535b61444c0b9576c1ccd3c4255a9 Mon Sep 17 00:00:00 2001 From: Camille Barneaud <1693643+gadcam@users.noreply.github.com> Date: Fri, 30 Mar 2018 02:02:47 +0200 Subject: [PATCH 111/175] Remove Gitlab description pattern (#2191) Causing false positives cf #2190 --- src/apps.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 9d6055aa5..2ab271ca6 100644 --- a/src/apps.json +++ b/src/apps.json @@ -3571,7 +3571,6 @@ "icon": "GitLab.svg", "implies": "Ruby on Rails", "meta": { - "description": "^GitLab", "og:site_name": "^GitLab$" }, "website": "https://about.gitlab.com" From 05a3c3118e047afd79df0329fefda93d7b77a260 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 30 Mar 2018 02:03:03 +0200 Subject: [PATCH 112/175] Add a way to get zurb foundation version (#2192) This can be checked [here](http://www.haka-security.org/) --- src/apps.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/apps.json b/src/apps.json index 2ab271ca6..3b899c377 100644 --- a/src/apps.json +++ b/src/apps.json @@ -11209,6 +11209,9 @@ "cats": [ 18 ], + "js": { + "Foundation.version": "([\\d.]+)\\;version:\\1" + }, "html": [ "]+foundation[^>\"]+css", "
]*class=\"[^\"]*(?:small|medium|large)-\\d{1,2} columns" From 4e2e2bc37d9928491b4e0122479deb2a555f4dc3 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Fri, 30 Mar 2018 02:03:13 +0200 Subject: [PATCH 113/175] Snap.svg: added version detection (#2193) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 3b899c377..e4255f632 100644 --- a/src/apps.json +++ b/src/apps.json @@ -9027,7 +9027,7 @@ 12 ], "js": { - "Snap": "" + "Snap.version": "(.*)\\;version:\\1" }, "icon": "Snap.svg.png", "script": "snap\\.svg(?:-min)?\\.js", From 2290946422ef80a22c2ee895d6f3f4f56e5ba81a Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Fri, 30 Mar 2018 02:04:38 +0200 Subject: [PATCH 114/175] mouseflow: added version detection (#2196) --- src/apps.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/apps.json b/src/apps.json index e4255f632..da7056555 100644 --- a/src/apps.json +++ b/src/apps.json @@ -12465,6 +12465,9 @@ "cats": [ 10 ], + "js": { + "mouseflow.version": "(.*)\\;version:\\1" + }, "script": [ "cdn\\.mouseflow\\.com" ], From 3baaa0c3caad3a40b983756470205aa97cc9f127 Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Fri, 30 Mar 2018 02:04:55 +0200 Subject: [PATCH 115/175] TeamCity: New logo, expand implies, https (#2198) --- src/apps.json | 11 +++++-- src/icons/TeamCity.png | Bin 513 -> 0 bytes src/icons/TeamCity.svg | 65 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 3 deletions(-) delete mode 100644 src/icons/TeamCity.png create mode 100644 src/icons/TeamCity.svg diff --git a/src/apps.json b/src/apps.json index da7056555..6e8364767 100644 --- a/src/apps.json +++ b/src/apps.json @@ -9621,15 +9621,20 @@ 44 ], "html": "Version ([\\d\\.]+)\\;version:\\1", - "icon": "TeamCity.png", + "icon": "TeamCity.svg", "implies": [ + "Apache Tomcat", + "Java", "jQuery", - "Prototype" + "Moment.js", + "Prototype", + "React", + "Underscore.js" ], "meta": { "application-name": "TeamCity" }, - "website": "http://jetbrains.com/teamcity" + "website": "https://www.jetbrains.com/teamcity/" }, "Telescope": { "cats": [ diff --git a/src/icons/TeamCity.png b/src/icons/TeamCity.png deleted file mode 100644 index 405f3f7796133b479de2057fdc5acca3ccb6addf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 513 zcmV+c0{;DpP)$&(lPLv+g>ln9+ylfHR5D(IKrpQ8Eud0X<5 zfKI?bP^t^F8+bIgg=g7=HtCr9)s%Nqj=J@$!Z;c~$58t;3?=5KIyH6B|4zc#`aUQP zue|80Tz(xvV|x_Eh_j)t3F4oWr|;Ghol_E?B=g4VIG-00000NkvXXu0mjf D3?}EL diff --git a/src/icons/TeamCity.svg b/src/icons/TeamCity.svg new file mode 100644 index 000000000..6083e574b --- /dev/null +++ b/src/icons/TeamCity.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 93b69a294e9d36abd35f80af77bdfeee83be7645 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 30 Mar 2018 02:05:07 +0200 Subject: [PATCH 116/175] Detect IPB via cookies (#2200) This can be tested [here](https://forum.wiwiland.net/index.php?/topic/50403-openmw/page__pid__748659__st__350#entry748659) --- src/apps.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/apps.json b/src/apps.json index 6e8364767..de29c10f6 100644 --- a/src/apps.json +++ b/src/apps.json @@ -4417,6 +4417,10 @@ "cats": [ 2 ], + "cookies": { + "ipbWWLsession_id": "", + "ipbWWLmodpids": "" + }, "js": { "IPBoard": "", "ipb_var": "", From 26022b21ed0401c467a0c9a0e16ecb0d1a83f462 Mon Sep 17 00:00:00 2001 From: Camille Barneaud <1693643+gadcam@users.noreply.github.com> Date: Fri, 30 Mar 2018 02:05:17 +0200 Subject: [PATCH 117/175] Fix MotoCMS pattern (#2203) See #2132 --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index de29c10f6..06250e728 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6425,7 +6425,7 @@ "AngularJS", "jQuery" ], - "script": ".*\\/mt-includes\\/[asetj]{2,6}\\/.*\\.js.*", + "script": "/mt-includes/js/website(?:assets)?\\.(?:min)?\\.js", "website": "http://motocms.com" }, "Movable Type": { From 167796775b652dd63358882aa44f801c69195a93 Mon Sep 17 00:00:00 2001 From: Guillaume BAUDHUIN Date: Fri, 30 Mar 2018 02:05:28 +0200 Subject: [PATCH 118/175] official drupal svg icon (#2204) --- src/apps.json | 2 +- src/icons/Drupal.png | Bin 1409 -> 0 bytes src/icons/Drupal.svg | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) delete mode 100644 src/icons/Drupal.png create mode 100644 src/icons/Drupal.svg diff --git a/src/apps.json b/src/apps.json index 06250e728..c36013115 100644 --- a/src/apps.json +++ b/src/apps.json @@ -2671,7 +2671,7 @@ "X-Generator": "Drupal(?:\\s([\\d.]+))?\\;version:\\1" }, "html": "<(?:link|style)[^>]+sites/(?:default|all)/(?:themes|modules)/", - "icon": "Drupal.png", + "icon": "Drupal.svg", "implies": "PHP", "meta": { "generator": "Drupal(?:\\s([\\d.]+))?\\;version:\\1" diff --git a/src/icons/Drupal.png b/src/icons/Drupal.png deleted file mode 100644 index b9b13f84fbc5ccd52fbef6d3253ef25ff10b42b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1409 zcmV-{1%CR8P)j9GMpyHM6P-um0q9fo`d@@iB6P;2-rw%N%v}fP<*Xl}3t&HhSZrZe8{&RZHeS9SvXe<;> z9O5*ww>pmpUs0{RSr({ATMLfmc0BBQ0K)v_;^fJ;lD4Zr+1R18wX5ZsebB zg9~f7Vc}H+1J~OTkOx{EZf_oay8jgKeRY49GM@|U6Bg7 zUEyU1`k}X zfKMi9c|2Hao}vX|V~h#7Cr_iGlEDSmCvQjhq{jqyt7vJYoiPE|*fswPIM0B59XL<7 zIFMtcmoWkFj4aa6_Q8}sxa29gkO`bXtT6%qTv^S1jc2ANeCbiZB;h;n5opM4>ixoiYE zMm3U03dlPRQ|9mDFPOo=Qv&%>g;Y2o>*_AxDb*9BjNK!e{)fdx})o z^Gp?|6gliAvTH=Pqb$1;eYyD^a*Am-7@@9l!o!}VbF2W)K}HAYR1g4#dH;Ce@ae~w zkZ%MTEjoyKdv$r#G~=Y7v#xe624WU}whU|bMW zDe!=T-GuB0b}^pgIg;6t%{Ju&Lp8*(WtCoWz6BRs??8I41%)+DEE`dB>MBa=uVbOO zqRZMpcR$%J8T;S=95`(Km~F6l)+I_|oeFZt;}!QrHfnQVx2ZrFvD3o~VH=vKdDSB+ zotEsJNkmpO=&|UVdE^kWn;f@SvaNQRWg}ZI)$F2?OiMN|AX_`@=Xu;e=i)OH;CBHT P00000NkvXXu0mjfbxWc3 diff --git a/src/icons/Drupal.svg b/src/icons/Drupal.svg new file mode 100644 index 000000000..b32678feb --- /dev/null +++ b/src/icons/Drupal.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + From 5388383a77329c65964a359eaa55e75bc33a92b8 Mon Sep 17 00:00:00 2001 From: Glad Tidings <37252168+glad-tidings@users.noreply.github.com> Date: Fri, 30 Mar 2018 04:35:46 +0430 Subject: [PATCH 119/175] Update apps.json (#2160) * Update apps.json * pars elecom portal icon * Update apps.json * Update apps.json --- src/apps.json | 14 ++++++++++++++ src/icons/parselecom.png | Bin 0 -> 3114 bytes 2 files changed, 14 insertions(+) create mode 100644 src/icons/parselecom.png diff --git a/src/apps.json b/src/apps.json index c36013115..870429a37 100644 --- a/src/apps.json +++ b/src/apps.json @@ -12292,6 +12292,20 @@ "script": "/media/conv/js/jquery\\.js", "website": "http://uknowva.com" }, + "Pars Elecom Portal": { + "cats": [ + 1 + ], + "headers": { + "X-Powered-By": "Pars Elecom Portal" + }, + "icon": "parselecom.png", + "meta": { + "copyright": "Pars Elecom Portal" + }, + "implies": [ "Microsoft ASP.NET", "IIS", "Windows Server" ], + "website": "http://parselecom.net" + }, "vBulletin": { "cats": [ 2 diff --git a/src/icons/parselecom.png b/src/icons/parselecom.png new file mode 100644 index 0000000000000000000000000000000000000000..ba23f2e5bb6ba9209ed3fb56ae825ce3ba4c5ff3 GIT binary patch literal 3114 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 literal 0 HcmV?d00001 From 344a84d74360e647f6fe18622f4bf7ed305f7b4c Mon Sep 17 00:00:00 2001 From: Ujwal Dhakal Date: Tue, 3 Apr 2018 12:00:15 +0545 Subject: [PATCH 120/175] implemented pagevamp as cms (#2205) --- src/apps.json | 13 +++++++++++++ src/icons/Pagevamp.png | Bin 0 -> 4103 bytes 2 files changed, 13 insertions(+) create mode 100644 src/icons/Pagevamp.png diff --git a/src/apps.json b/src/apps.json index 870429a37..a3d0cc9ce 100644 --- a/src/apps.json +++ b/src/apps.json @@ -9236,6 +9236,19 @@ "icon": "Squarespace.png", "website": "http://www.squarespace.com" }, + "Pagevamp": { + "cats": [ + 1 + ], + "js": { + "Pagevamp": "" + }, + "headers": { + "X-ServedBy": "pagevamp" + }, + "icon": "Pagevamp.png", + "website": "https://www.pagevamp.com" + }, "SquirrelMail": { "cats": [ 30 diff --git a/src/icons/Pagevamp.png b/src/icons/Pagevamp.png new file mode 100644 index 0000000000000000000000000000000000000000..246558737fa1457ffa7a6027155afccd268bd6bc GIT binary patch literal 4103 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 literal 0 HcmV?d00001 From b53c754221299957aa6ac6eac901aee21e747a0d Mon Sep 17 00:00:00 2001 From: Abd ar-Rahman Hamidi Date: Mon, 9 Apr 2018 11:51:28 +0500 Subject: [PATCH 121/175] Update apps.json (#2217) --- src/apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps.json b/src/apps.json index a3d0cc9ce..a209dddd0 100644 --- a/src/apps.json +++ b/src/apps.json @@ -3422,6 +3422,7 @@ }, "Gatsby": { "cats": [ + 57, 12 ], "html": [ From ed9f87aacc658d1283a601c7275b6cf21f4a136f Mon Sep 17 00:00:00 2001 From: Eoghan Murray Date: Wed, 18 Apr 2018 00:01:11 +0100 Subject: [PATCH 122/175] Statcounter detection was missing cases where script tag was output via document.write (#2243) E.g. tag code as follows: `````` --- src/apps.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/apps.json b/src/apps.json index a209dddd0..b498c853c 100644 --- a/src/apps.json +++ b/src/apps.json @@ -9327,6 +9327,11 @@ 10 ], "icon": "StatCounter.png", + "js": { + "_statcounter": "\\;confidence:100", + "sc_project": "\\;confidence:50", + "sc_security": "\\;confidence:50" + }, "script": "statcounter\\.com/counter/counter", "website": "http://www.statcounter.com" }, From 52c9e144b8a7de5dbcb1697b1711d78a83f1174e Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Fri, 20 Apr 2018 14:54:36 +1000 Subject: [PATCH 123/175] NPM update, patch Zombie.js to include timeout in JS evaluation --- run | 1 + src/apps.json | 11 +- src/drivers/npm/driver.js | 2 +- src/drivers/npm/package-lock.json | 200 +++++++++++++------------ src/drivers/npm/package.json | 6 +- src/drivers/webextension/js/inject.js | 2 +- src/drivers/webextension/manifest.json | 2 +- src/wappalyzer.js | 2 +- 8 files changed, 118 insertions(+), 108 deletions(-) diff --git a/run b/run index 102fc812d..ae85b6344 100755 --- a/run +++ b/run @@ -11,6 +11,7 @@ fi cmd="docker run --rm -v "$(pwd):/opt/wappalyzer" -it wappalyzer/dev" $cmd sh -c "yarn install; cd src/drivers/webextension; yarn install" +$cmd sh -c "cat patches/*.patch | patch -p0" $cmd ./bin/run links $cmd ./bin/run $@ diff --git a/src/apps.json b/src/apps.json index 870429a37..e5043ee86 100644 --- a/src/apps.json +++ b/src/apps.json @@ -12303,7 +12303,11 @@ "meta": { "copyright": "Pars Elecom Portal" }, - "implies": [ "Microsoft ASP.NET", "IIS", "Windows Server" ], + "implies": [ + "Microsoft ASP.NET", + "IIS", + "Windows Server" + ], "website": "http://parselecom.net" }, "vBulletin": { @@ -12489,14 +12493,11 @@ 10 ], "js": { - "mouseflow.version": "(.*)\\;version:\\1" + "_mfq": "" }, "script": [ "cdn\\.mouseflow\\.com" ], - "js": { - "_mfq": "" - }, "icon": "mouseflow.png", "website": "https://mouseflow.com/" }, diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 2dbbfdd78..37928839d 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -285,7 +285,7 @@ class Driver { return cookies; } - crawl(pageUrl, index, depth = 1) { + crawl(pageUrl, index = 1, depth = 1) { pageUrl.canonical = pageUrl.protocol + '//' + pageUrl.host + pageUrl.pathname; return new Promise(resolve => { diff --git a/src/drivers/npm/package-lock.json b/src/drivers/npm/package-lock.json index de031cfc5..438603693 100644 --- a/src/drivers/npm/package-lock.json +++ b/src/drivers/npm/package-lock.json @@ -1,6 +1,6 @@ { "name": "wappalyzer", - "version": "5.3.1", + "version": "5.4.13", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -28,7 +28,7 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { "co": "4.6.0", - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } @@ -54,9 +54,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, "babel-runtime": { "version": "5.8.29", @@ -85,7 +85,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } }, "caseless": { @@ -99,9 +99,9 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { "delayed-stream": "1.0.0" } @@ -129,7 +129,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } } } @@ -161,6 +161,13 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "deep-is": { @@ -183,15 +190,15 @@ } }, "escodegen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", - "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", "requires": { "esprima": "3.1.3", "estraverse": "4.2.0", "esutils": "2.0.2", "optionator": "0.8.2", - "source-map": "0.5.7" + "source-map": "0.6.1" } }, "esprima": { @@ -228,9 +235,9 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -248,13 +255,13 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "combined-stream": "1.0.6", + "mime-types": "2.1.18" } }, "getpass": { @@ -286,14 +293,14 @@ "requires": { "boom": "4.3.1", "cryptiles": "3.1.2", - "hoek": "4.2.0", + "hoek": "4.2.1", "sntp": "2.1.0" } }, "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" }, "http-signature": { "version": "1.2.0", @@ -302,13 +309,16 @@ "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "requires": { + "safer-buffer": "2.1.2" + } }, "is-typedarray": { "version": "1.0.0", @@ -336,13 +346,13 @@ "acorn-globals": "1.0.9", "cssom": "0.3.2", "cssstyle": "0.2.37", - "escodegen": "1.9.0", - "nwmatcher": "1.4.3", + "escodegen": "1.9.1", + "nwmatcher": "1.4.4", "parse5": "1.5.1", - "request": "2.83.0", + "request": "2.85.0", "sax": "1.2.4", "symbol-tree": "3.2.2", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "webidl-conversions": "2.0.1", "whatwg-url-compat": "0.6.5", "xml-name-validator": "2.0.1" @@ -394,27 +404,27 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.30.0" + "mime-db": "1.33.0" } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", + "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" }, "nwmatcher": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", - "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==" + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==" }, "oauth-sign": { "version": "0.8.2", @@ -478,32 +488,32 @@ "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=" }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { "aws-sign2": "0.7.0", - "aws4": "1.6.0", + "aws4": "1.7.0", "caseless": "0.12.0", - "combined-stream": "1.0.5", + "combined-stream": "1.0.6", "extend": "3.0.1", "forever-agent": "0.6.1", - "form-data": "2.3.1", + "form-data": "2.3.2", "har-validator": "5.0.3", "hawk": "6.0.2", "http-signature": "1.2.0", "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", + "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "2.1.0", "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "uuid": "3.2.1" } }, "requires-port": { @@ -516,6 +526,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -526,19 +541,19 @@ "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", @@ -561,9 +576,9 @@ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { "punycode": "1.4.1" } @@ -595,6 +610,11 @@ "prelude-ls": "1.1.2" } }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, "url-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", @@ -605,9 +625,9 @@ } }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" }, "verror": { "version": "1.10.0", @@ -637,49 +657,37 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, "xml-name-validator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=" }, "zombie": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/zombie/-/zombie-5.0.7.tgz", - "integrity": "sha512-zrYFTD5iWxI3EJohmZ8F2sNafo44F/132wLj5WHLSHmytds60s+JiXLomflQ8sbNuWCZJAuszvf6+eUiVsUqPQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/zombie/-/zombie-5.0.8.tgz", + "integrity": "sha512-b634oIFJ2SFHnWEdntljrBeEroF1piyTiPmZPqsZwwy2KC5MLazq97eHPw1Qz77VPujQTEnbhOUvMssjpak2WQ==", "requires": { "babel-runtime": "5.8.29", "bluebird": "3.5.1", "debug": "2.6.9", "eventsource": "0.1.6", - "iconv-lite": "0.4.19", + "iconv-lite": "0.4.21", "jsdom": "7.2.2", "lodash": "3.10.1", "mime": "1.6.0", "ms": "0.7.3", - "request": "2.83.0", - "tough-cookie": "2.3.3", + "request": "2.85.0", + "tough-cookie": "2.3.4", "ws": "1.1.5" - }, - "dependencies": { - "ms": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", - "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - } } } } diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index fe2cef76b..9ae34aadc 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -2,7 +2,7 @@ "name": "wappalyzer", "description": "Uncovers the technologies used on websites", "homepage": "https://github.com/AliasIO/Wappalyzer", - "version": "5.4.12", + "version": "5.4.13", "author": "Elbert Alias", "license": "GPL-3.0", "repository": { @@ -17,7 +17,7 @@ "wappalyzer.js" ], "dependencies": { - "request": "^2.83.0", - "zombie": "^5.0.7" + "request": "^2.85.0", + "zombie": "^5.0.8" } } diff --git a/src/drivers/webextension/js/inject.js b/src/drivers/webextension/js/inject.js index f860e7646..d3dab8135 100644 --- a/src/drivers/webextension/js/inject.js +++ b/src/drivers/webextension/js/inject.js @@ -44,7 +44,7 @@ for ( let i = 0; i < properties.length; i ++ ) { var property = properties[i]; - if ( value.hasOwnProperty(property) ) { + if ( value && value.hasOwnProperty(property) ) { value = value[property]; } else { value = null; diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index 252ac0d78..821ae1db0 100644 --- a/src/drivers/webextension/manifest.json +++ b/src/drivers/webextension/manifest.json @@ -4,7 +4,7 @@ "author": "Elbert Alias", "homepage_url": "https://www.wappalyzer.com", "description": "Identify web technologies", - "version": "5.4.12", + "version": "5.4.13", "default_locale": "en", "manifest_version": 2, "icons": { diff --git a/src/wappalyzer.js b/src/wappalyzer.js index cf91b953d..1a4e1137b 100644 --- a/src/wappalyzer.js +++ b/src/wappalyzer.js @@ -602,7 +602,7 @@ class Wappalyzer { } // Replace back references - version = version.replace(new RegExp('\\\\' + i, 'g'), match || ''); + version = version.trim().replace(new RegExp('\\\\' + i, 'g'), match || ''); }); if ( version && versions.indexOf(version) === -1 ) { From 3fdd32f78bf4ce1960ab4726b0a5b4ed30d2202b Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Fri, 20 Apr 2018 14:57:33 +1000 Subject: [PATCH 124/175] Add patch files --- patches/zombie-vm-timeout.patch | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 patches/zombie-vm-timeout.patch diff --git a/patches/zombie-vm-timeout.patch b/patches/zombie-vm-timeout.patch new file mode 100644 index 000000000..dcc62d7d4 --- /dev/null +++ b/patches/zombie-vm-timeout.patch @@ -0,0 +1,11 @@ +--- src/drivers/npm/node_modules/zombie/lib/document.js 2018-04-20 14:36:04.097829977 +1000 ++++ src/drivers/npm/node_modules/zombie/lib/document.js 2018-04-20 14:34:25.699317000 +1000 +@@ -281,7 +281,7 @@ + // The current window, postMessage and window.close need this + browser._windowInScope = window; + var result = undefined; +- if (typeof code === 'string' || code instanceof String) result = VM.runInContext(code, window, { filename: filename });else if (code) result = code.call(window); ++ if (typeof code === 'string' || code instanceof String) result = VM.runInContext(code, window, { filename: filename, timeout: 1000 });else if (code) result = code.call(window); + browser.emit('evaluated', code, result, filename); + return result; + } catch (error) { From a76b5a5fed6ad3ae9850dcd3b03ac9c52098ab7c Mon Sep 17 00:00:00 2001 From: Camille Barneaud <1693643+gadcam@users.noreply.github.com> Date: Fri, 20 Apr 2018 07:19:28 +0200 Subject: [PATCH 125/175] Add Reveal version detection (#2208) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index ed08f45ec..2a6812a1b 100644 --- a/src/apps.json +++ b/src/apps.json @@ -8145,7 +8145,7 @@ 12 ], "js": { - "Reveal": "" + "Reveal.VERSION": "(.*)\\;version:\\1" }, "icon": "Reveal.js.png", "implies": "Highlight.js", From 8f4441d3acdcb3d61bf0a66a990846aea2d74a52 Mon Sep 17 00:00:00 2001 From: Nacim Goura Date: Fri, 20 Apr 2018 07:19:44 +0200 Subject: [PATCH 126/175] add Paper.js (#2210) [paper.js](https://github.com/paperjs/paper.js) is a graphic javascript library. --- src/apps.json | 10 ++++++++++ src/icons/paperjs.png | Bin 0 -> 32327 bytes 2 files changed, 10 insertions(+) create mode 100644 src/icons/paperjs.png diff --git a/src/apps.json b/src/apps.json index 2a6812a1b..6b6b0ddc9 100644 --- a/src/apps.json +++ b/src/apps.json @@ -7211,6 +7211,16 @@ }, "website": "http://panvision.de/Produkte/Content_Management/index.asp" }, + "Paper.js": { + "cats": [ + 25 + ], + "icon": "paperjs.png", + "js": { + "paper.version": "(.*)\\;version:\\1" + }, + "website": "http://paperjs.org/" + }, "Pelican": { "cats": [ 1 diff --git a/src/icons/paperjs.png b/src/icons/paperjs.png new file mode 100644 index 0000000000000000000000000000000000000000..37cb8a114a6f5690fec75309fa87c02cd050e3ca GIT binary patch literal 32327 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 literal 0 HcmV?d00001 From 77c74099e8441cdbf885bcfd43f4158e732c12ae Mon Sep 17 00:00:00 2001 From: Website Builder Date: Fri, 20 Apr 2018 08:20:01 +0300 Subject: [PATCH 127/175] Mobirise Website Builder (#2211) * Add files via upload * Update apps.json * Update apps.json * Update apps.json * Update apps.json --- src/apps.json | 13 +++++++++++++ src/icons/mobirise.png | Bin 0 -> 17050 bytes 2 files changed, 13 insertions(+) create mode 100644 src/icons/mobirise.png diff --git a/src/apps.json b/src/apps.json index 6b6b0ddc9..5969d6f66 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6188,6 +6188,19 @@ "script": "//cdn\\.mobify\\.com/", "website": "https://www.mobify.com" }, + "Mobirise": { + "cats": [ + 51 + ], + "meta": { + "generator": "^Mobirise v([\\d.]+)\\;version:\\1" + }, + "html": [ + " + + + + + + + + + From b6e8c39b1fcda5350159a7b740699559ba7f8dba Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 20 Apr 2018 05:21:32 +0000 Subject: [PATCH 129/175] Add marked (#2214) * Add marked This can be checked [here](https://sigint.sh/). This [javascript framework](https://github.com/markedjs/marked) to parse markdown is pretty popular, with almost 16k stars. * Add the logo * Add the official website instead of the github repo --- src/apps.json | 11 +++++++++++ src/icons/marked.svg | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/icons/marked.svg diff --git a/src/apps.json b/src/apps.json index fcd8f74c9..8792f34d7 100644 --- a/src/apps.json +++ b/src/apps.json @@ -5818,6 +5818,17 @@ "script": "\\/assets\\/js\\/manycontacts\\.min\\.js", "website": "http://www.manycontacts.com" }, + "Marked": { + "cats": [ + 12 + ], + "js": { + "marked": "" + }, + "icon": "marked.svg", + "script": "/marked(?:\\.min)?\\.js", + "website": "https://marked.js.org" + }, "Marionette.js": { "cats": [ 12 diff --git a/src/icons/marked.svg b/src/icons/marked.svg new file mode 100644 index 000000000..a67fb80e5 --- /dev/null +++ b/src/icons/marked.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 534a455be9742e96b2444be8c26701b8351fdfda Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 20 Apr 2018 05:21:47 +0000 Subject: [PATCH 130/175] Fix hljs detection via javascript (#2215) Apparently, it's `hljs.listLanguages` and not `hljs.listLanguage`. This can be verified [here](https://sigint.sh/) --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 8792f34d7..d43983f71 100644 --- a/src/apps.json +++ b/src/apps.json @@ -4210,7 +4210,7 @@ 19 ], "js": { - "hljs.listLanguage": "" + "hljs.listLanguages": "" }, "icon": "Highlight.js.png", "script": "/(?:([\\d.])+/)?highlight(?:\\.min)?\\.js\\;version:\\1", From 4dca448a076d2019814f9497584300c8fed4144d Mon Sep 17 00:00:00 2001 From: AlexByte Date: Fri, 20 Apr 2018 08:21:57 +0300 Subject: [PATCH 131/175] Increase YUI version detection. (#2216) * Increase YUI version detection. * Fix json --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index d43983f71..ae0065673 100644 --- a/src/apps.json +++ b/src/apps.json @@ -11108,7 +11108,7 @@ 12 ], "js": { - "YAHOO": "", + "YAHOO.VERSION": "(.*)\\;version:\\1", "YUI.version": "(.*)\\;version:\\1" }, "icon": "YUI.png", From afde9a3359b1baf6da87b87aa15b8cf452d4cdd6 Mon Sep 17 00:00:00 2001 From: Camille Barneaud <1693643+gadcam@users.noreply.github.com> Date: Fri, 20 Apr 2018 07:22:10 +0200 Subject: [PATCH 132/175] Three.js version detection (#2219) Cf https://github.com/mrdoob/three.js/blob/dev/src/constants.js --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index ae0065673..3b3217771 100644 --- a/src/apps.json +++ b/src/apps.json @@ -12293,7 +12293,7 @@ 25 ], "js": { - "THREE": "" + "THREE.REVISION": "(.*)\\;version:\\1" }, "icon": "three.js.png", "script": "three(?:\\.min)?\\.js", From 91856c6eb9a60e24d1630322f1f0c1295da3cf4a Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 20 Apr 2018 05:22:23 +0000 Subject: [PATCH 133/175] Add detection for mermaid (#2222) [This js thingy]](https://mermaidjs.github.io/usage.html) is pretty popular, with more than 15k stars. This can be tested [here](https://mermaidjs.github.io/mermaid-live-editor/), and checked in [its documentation](https://mermaidjs.github.io/usage.html). --- src/apps.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/apps.json b/src/apps.json index 3b3217771..52917c03c 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6010,6 +6010,17 @@ }, "website": "http://www.melistechnology.com/" }, + "Mermaid": { + "cats": [ + 25 + ], + "js": { + "mermaid": "" + }, + "script": "/mermaid(?:\\.min)?\\.js", + "html": "
]*class=[\"']mermaid[\"']>\\;confidence:90", + "website": "https://mermaidjs.github.io/" + }, "Meteor": { "cats": [ 12 From 4d123cf7763c165ab95dae1d5390128d74f8aefd Mon Sep 17 00:00:00 2001 From: Nacim Goura Date: Fri, 20 Apr 2018 07:22:45 +0200 Subject: [PATCH 134/175] remove GitPHP (#2224) I propose we remove that detection. The site is for sale and I did not find the project open source so impossible to have 1000 stars. --- src/apps.json | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/apps.json b/src/apps.json index 52917c03c..dfecb625d 100644 --- a/src/apps.json +++ b/src/apps.json @@ -3588,17 +3588,6 @@ }, "website": "http://about.gitlab.com/gitlab-ci" }, - "GitPHP": { - "cats": [ - 47 - ], - "html": [ - " + docusaurus + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From abda2892e73668ced46ef6b6ec85c85e05ffbe57 Mon Sep 17 00:00:00 2001 From: Nacim Goura Date: Fri, 20 Apr 2018 07:23:57 +0200 Subject: [PATCH 137/175] remove stamplay (#2228) You should remove (stamplay)[https://github.com/Stamplay] because none of the repository has more than 1000 stars. And no sites have been detected with this technology. Show (link)[https://www.wappalyzer.com/technologies/stamplay) --- src/apps.json | 12 ------------ src/icons/Stamplay.png | Bin 2450 -> 0 bytes 2 files changed, 12 deletions(-) delete mode 100644 src/icons/Stamplay.png diff --git a/src/apps.json b/src/apps.json index f0512e8bd..3e6c23a9e 100644 --- a/src/apps.json +++ b/src/apps.json @@ -9369,18 +9369,6 @@ "icon": "Stackla.png", "website": "http://stackla.com/" }, - "Stamplay": { - "cats": [ - 34, - 47 - ], - "headers": { - "Server": "Stamplay" - }, - "icon": "Stamplay.png", - "script": "stamplay.*\\.js", - "website": "http://stamplay.com" - }, "Starlet": { "cats": [ 22 diff --git a/src/icons/Stamplay.png b/src/icons/Stamplay.png deleted file mode 100644 index 8f5b25759d9585469376e790abece7ce979990fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2450 zcmV;D32pX?P)Vs7ZX3prw&SjY%{Qsg$vjRE${0 zB$7nIq<~n6T8bD9mIlRu3Pg}4fUn)6%khGc~9C zJKg+_STr*CDZ ztyiMDDoKBPWdq*d`V^*KboQcr-dkpjtpi|*h<2`W#FH( z&+jqr;Ij(@&>%R8c=Yx{!CS(B96q$#j2uyOVgNVZ{0jsnEnL^JQpu6c%^ll}u}LEE zXUUxbVwqVuj%pq|rtXW@+SY8gK!=aCvpUg^!PS+h-`Yq3kW56sW35dRK?6|u-$f9S z*4otW+ut%Lo6XMyAaA{8x;|kN=JOt1GjpoBW%l%Npv~8NvRmNui(qE>e(Acm-~1!q zTJs0Je&Y`MkFI>-wmb1`E-gT?AxE9p-jUhd!(sYA05AX&g7nZK=`+2+G%#Cn+=>1& zX)^NLwjy!#h&&Xy$Ycwr8N*=)1Hr_Vr8C_scG z$a@;Gd^=*5@wz~35Ws>gm?!=J3roqgI(%oAD%*Cl0_Y2^ucqxpR5 zFoSVccoS6TPMk9~harhPv?YKU%2lYXVi0Kn1R)r!-mXEs!r;;`wV@OUz=A?a!hSL_ zW4t*B-rO1M2SDfZG=A0%R)xdqgYUj~Nl5tEo|#B%cg{jCt8n4a9cbCvie+z2#GGkO zxb4!t$omR{EZ7K?0tO%v4q1G>Cyt*j9EU-P5>6l8jX{Y3rGP*I!7>vVR{NzZ`vD*! zkr*`^s;0I;8#m=R6!@gK?s6OIkF7E0z^QmBrv4P z$5$_CLn;v<9yKUw0n3180s{tMMM8A-1CXd2#tqLsFDr_fVz{#EH=VKc<6d$Qgb5&o ziw!N4aMP%laqSh1*N$9{%kXDJqXs@JI4&WS1V|8sv53b!%%A%K0ERIHSb{Zx8zVS^ z6@)@K8GW!HfV>DJ;pfcSI~RzYiazm`^-G#0_?3XA>xzJPWG2w=_eUb9qli!*8+Q#x zt>226mj^it`CSYNjjm7<9pNN|wO}F$a5*m-mK+j+V_y$@NA6#?_O1Fp0Ka@{1FpV* zC2)8zt}9x>l(QQzyQ{{uwYy}Q0Van^CR zPg`b?Adqwc0FDC$M>~)|up5=300$zq*oQWZD6|5^*cBUrwsbYBxOl>nmi+T8MhXG?jLclO# zZPi2!_K$)=Xbq=87O*F&$p+G<{5(K_`gm^#LXO1fp(#}nQd&uIac8&pg0U=!$QW%^ zrtu?qt%pED0bmHF%1zPs6*ug2s>>bnGgBg&5daAJ3Q)>y#fMtdt!oYS%0OD~4 z&+$P3)MLx*omkWjTqTBeX1$k;{bJ2=IvD#=_!(8wWrBY(^(j zN?J(Ckdh$;BN`!W*xrR_S2u&mg1Nk`Eq~XZ@v-2=gJ|jW5Dt}_QSW{!8B%7SjEbzN!`|-i!5*q3D}lBJ?%m2!)Y^XAb)*?LV$eiw?1z)9*Qm3rHfv@%MLFGT z3D#wh>HU`&$b$Zf$gqroEYJj243*V(_*AgBohT4;e|R!hFM4Oywx*xeUi;DAz(cY?Wh;a;#FW z=nTc8GhCd=4~GXMeRp8qv>6Ny1LOV{q~ZZFDQN4Fv2f*yYQUAT_Kwq32l zT1yw6In3mW0Tg91tLAc$0-V&BWvKRc6Lh}e+Msz3tiBhpV~!c~j*3c=lh!|MKm;c~`Q&4Eq4`hfZny(75`&YPE?FOCat2$H6&2P$a2Z=~ zCcx(bVkB6{$`o-tFm@A(%@7qUWn}ys)>+Tw>jlX;*cL2EK!ipkdD=4k8>3*sF=L?; QZ2$lO07*qoM6N<$f`RIZfdBvi From 23c235bc22673c527fd45b8c617b88ef16fc3564 Mon Sep 17 00:00:00 2001 From: mr G1K Date: Fri, 20 Apr 2018 08:24:41 +0300 Subject: [PATCH 138/175] add Yandex Metrika alternate CDN (#2229) * Update apps.json Yandex metrika alternative CDN https://w6p.ru/ZGZlNT.png * Update apps.json --- src/apps.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 3e6c23a9e..785ce0eab 100644 --- a/src/apps.json +++ b/src/apps.json @@ -11207,7 +11207,10 @@ "yandex_metrika": "" }, "icon": "Yandex.Metrika.png", - "script": "mc\\.yandex\\.ru\\/metrika\\/watch\\.js", + "script": [ + "mc\\.yandex\\.ru\\/metrika\\/watch\\.js", + "cdn\\.jsdelivr\\.net\\/npm\\/yandex-metrica-watch\\/watch\\.js" + ], "website": "http://metrika.yandex.com" }, "Yaws": { From 2d5536b7bee47b8ef69e535cc8ef8344ff424f96 Mon Sep 17 00:00:00 2001 From: Nacim Goura Date: Fri, 20 Apr 2018 07:25:08 +0200 Subject: [PATCH 139/175] Fix bad category for medium.com (#2231) Medium is a [blog](https://en.wikipedia.org/wiki/Medium_(website)), but is in the CMS category. I corrected that. --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 785ce0eab..d83fcb8eb 100644 --- a/src/apps.json +++ b/src/apps.json @@ -5967,7 +5967,7 @@ }, "Medium": { "cats": [ - 1 + 11 ], "headers": { "X-Powered-By": "^Medium$" From 3ec692fbfba60c2229c0027b97f7993cbccbcffe Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 20 Apr 2018 05:25:17 +0000 Subject: [PATCH 140/175] Improve a bit Hugo detection (#2232) This can be checked [here](http://blog.ralch.com/tutorial/golang-embedded-resources/) --- src/apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps.json b/src/apps.json index d83fcb8eb..4f853a64e 100644 --- a/src/apps.json +++ b/src/apps.json @@ -4293,6 +4293,7 @@ "meta": { "generator": "Hugo ([\\d.]+)?\\;version:\\1" }, + "html": "powered by ]*href=\"http://hugo.spf13.com", "website": "http://gohugo.io" }, "Hybris": { From 1487d9f0c74b4358e897779054b0b587ec08caf7 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 20 Apr 2018 05:25:29 +0000 Subject: [PATCH 141/175] Remove a Magento flase-positive (#2234) This should close #2212 --- src/apps.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/apps.json b/src/apps.json index 4f853a64e..dc24c8481 100644 --- a/src/apps.json +++ b/src/apps.json @@ -5755,8 +5755,7 @@ "script": [ "js/mage", "skin/frontend/(?:default|(enterprise))\\;version:\\1?Enterprise:Community", - "static/_requirejs\\;confidence:50\\;version:2", - "static/frontend\\;confidence:20\\;version:2" + "static/_requirejs\\;confidence:50\\;version:2" ], "website": "https://magento.com" }, From 363c104c2a6a8513222a4e1bcc641e257be9fe43 Mon Sep 17 00:00:00 2001 From: Nacim Goura Date: Fri, 20 Apr 2018 07:25:40 +0200 Subject: [PATCH 142/175] add version for jQuery Mobile (#2235) It's possible to get the version of jquery mobile with `jQuery.mobile.version` --- src/apps.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/apps.json b/src/apps.json index dc24c8481..dd9d4139c 100644 --- a/src/apps.json +++ b/src/apps.json @@ -11783,6 +11783,9 @@ ], "icon": "jQuery Mobile.svg", "implies": "jQuery", + "js": { + "jQuery.mobile.version": "(.*)\\;version:\\1" + }, "script": "jquery[.-]mobile(?:-([\\d.]))?(?:\\.min)?\\.js(?:\\?ver=([\\d.]+))?\\;version:\\1?\\1:\\2", "website": "https://jquerymobile.com" }, From 95e1b71e6e7b5c196a56880601450988ce49fc33 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 20 Apr 2018 05:25:50 +0000 Subject: [PATCH 143/175] Medium is written in nodejs (#2236) [Sources](https://stackshare.io/medium/medium-com) --- src/apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps.json b/src/apps.json index dd9d4139c..c205df382 100644 --- a/src/apps.json +++ b/src/apps.json @@ -5972,6 +5972,7 @@ "headers": { "X-Powered-By": "^Medium$" }, + "implies": "Node.js", "icon": "Medium.svg", "script": "medium\\.com", "url": "^https?://(?:www\\.)?medium\\.com", From 2dd9123989e7aa30f678e84d45d5bbc172b1e100 Mon Sep 17 00:00:00 2001 From: Shahryar Soltanpour Date: Fri, 20 Apr 2018 09:57:45 +0430 Subject: [PATCH 144/175] add backtory (#2239) --- src/apps.json | 10 +++++ src/icons/Backtory.svg | 86 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 src/icons/Backtory.svg diff --git a/src/apps.json b/src/apps.json index c205df382..6851df10e 100644 --- a/src/apps.json +++ b/src/apps.json @@ -1037,6 +1037,16 @@ }, "website": "http://backdropcms.org" }, + "Backtory": { + "cats": [ + 31 + ], + "headers": { + "X-Powered-By": "Backtory" + }, + "icon": "Backtory.svg", + "website": "https://backtory.com" + }, "Banshee": { "cats": [ 1, diff --git a/src/icons/Backtory.svg b/src/icons/Backtory.svg new file mode 100644 index 000000000..9fb2e0c57 --- /dev/null +++ b/src/icons/Backtory.svg @@ -0,0 +1,86 @@ + +image/svg+xml \ No newline at end of file From b0bb4dd2812c1cbdb3778c68136c54d5e3b3b707 Mon Sep 17 00:00:00 2001 From: Daniel Ruf Date: Fri, 20 Apr 2018 07:28:24 +0200 Subject: [PATCH 145/175] tests: use npm ci (#2244) * tests: use npm ci * chore: add package-lock.json --- .travis.yml | 3 + package-lock.json | 284 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 287 insertions(+) create mode 100644 package-lock.json diff --git a/.travis.yml b/.travis.yml index 2b27a8fa7..b39d23df3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,9 @@ sudo: required services: - docker +before_install: npm install -g npm@latest +install: npm ci + after_success: - sha256sum build/* > build/SHA256SUMS - cat build/SHA256SUMS diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..4fcb441c4 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,284 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.8" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "file-type": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-7.4.0.tgz", + "integrity": "sha1-KnyU9ioAMBULt9m2xwz6HT51nIY=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "requires": { + "html-comment-regex": "1.1.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.0.tgz", + "integrity": "sha512-d6RWgYPILd+AoWVOxiD0UwUqRicnE1inTxMr40CXOgqYve1MvnKntoLAtLIcxjEeVjEoYYTe5QAq3mUc6/ySjQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "read-chunk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", + "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", + "requires": { + "pify": "3.0.0", + "safe-buffer": "5.1.1" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} From da0103fe1dee59d3dbe9c3319b51a25be5614401 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 20 Apr 2018 05:30:26 +0000 Subject: [PATCH 146/175] Add ReDoc detection (#2247) * Add ReDoc detection This can be tested [here](https://api.mattermost.com/#tag/APIv3-Deprecation) The project has almost [2500 stars](https://github.com/Rebilly/ReDoc) * Implement cools ideas from @gadcam --- src/apps.json | 13 +++++++++++++ src/icons/redoc.png | Bin 0 -> 1664 bytes 2 files changed, 13 insertions(+) create mode 100644 src/icons/redoc.png diff --git a/src/apps.json b/src/apps.json index 6851df10e..fc0e1283c 100644 --- a/src/apps.json +++ b/src/apps.json @@ -8189,6 +8189,19 @@ }, "website": "http://www.redmine.org" }, + "ReDoc": { + "cats": [ + 4 + ], + "html": "`sfBNib}RZZK7sGkfBj6VW=LR^7T0a1CQXhem;|NsBb)np|D<9=C5kY6w`Eif^& zvaxe;a&hzU3J3~`h>D3zNXf{_D<~={tEj4JXld){=^GiFn3|beSX$ZIIlH>KdwBZz z2Ly#g#KgwMCnTq&rDtU3oG0EHAW%+^a+Q1ag9OLQY7!q-K?)1!R5m%Ac^K)B{ z9+}YLAt2yBL4k7zgP~4S1NWxpChqQrMGakDZKvVb8CIfY~F9XZDhayhDizYiwC$!t?kiS2xzD*frD!#R+d_yvHMR;Jm(XHm8YYa^PFWx=ETk zAFBU0R_)#-m}bW|Z+gSVAJLLJX}8aNK9JteS9XL`xm$;OA@7dcDhvFLzy0~}`fJe2 z5Usy28K1UF+RRvYDB~i#M=M+WwoA-z&(m)nbxd&OSW$GHd5ZOG;T+iwyTueP-!e?7 zh^sxc`oQ+b3`T1iC1Rqc8%XakkW;v9&CpzGyM?LVlELUJ1J8Bq_Ou7_;ttEcGoC7a zw@6gOl5x`e#FE4;SJk;`25LM?`2=*48Axq9sFY56LRm+;UCR+G)`_2O3*mzY+aC_#qq_~U)$=JTSe{N&YuaJ-5Oqc?QwIpvG{cGi{^*L^E+!Z zpH7>?U(Arda|+*vB{ds7YY&8mG6rvxxf8#d**nGaX933oRi+>3Zk{RG{rR9hL)pny z4CRZrT%F3Fc8ldhw@BfJo17ZEK0jnR(ECi|z?H34p=-moTYOGDD9=!yru9r=qx!0o z?4o^@4F7F~>(+#`Z>*`f@OkF_sq?bd)o^V~;MFt=p1|K|*H^(UqqCzzH*kOMr`L)x zby{IJ85fvu-O2lJvrWUNO%^>?C Date: Fri, 20 Apr 2018 05:30:48 +0000 Subject: [PATCH 147/175] Improve a bit Wix detection (#2248) This should close #2245 --- src/apps.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index fc0e1283c..cc68577e0 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10898,7 +10898,9 @@ "Domain": "\\.wix\\.com" }, "headers": { - "X-Wix-Renderer-Server": "" + "X-Wix-Renderer-Server": "", + "X-Wix-Request-Id": "", + "X-Wix-Server-Artifact-Id": "" }, "icon": "Wix.png", "script": "static\\.wixstatic\\.com", From 324a44a7cf970b2a9caa76af84a3f078f1ec3a37 Mon Sep 17 00:00:00 2001 From: Camille Barneaud <1693643+gadcam@users.noreply.github.com> Date: Fri, 20 Apr 2018 07:31:31 +0200 Subject: [PATCH 148/175] Change Twemoji cat from JS Graphics to misc (#2249) Cf #2241 --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index cc68577e0..7e0ca94bc 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10083,7 +10083,7 @@ }, "Twitter Emoji (Twemoji)": { "cats": [ - 25 + 19 ], "js": { "twemoji": "" From 33979d5e86c8d090db4d69bafc929ed952c7188f Mon Sep 17 00:00:00 2001 From: Eoghan Murray Date: Fri, 20 Apr 2018 06:32:26 +0100 Subject: [PATCH 149/175] Add Zenfolio detection (Photo Galleries) (#2250) * Add Zenfolio detection (Photo Galleries) * Update Statcounter logo to new svg version and decapitalize 'C' --- src/apps.json | 14 ++++++++++++-- src/icons/StatCounter.png | Bin 575 -> 0 bytes src/icons/Statcounter.svg | 1 + src/icons/Zenfolio.png | Bin 0 -> 634 bytes 4 files changed, 13 insertions(+), 2 deletions(-) delete mode 100644 src/icons/StatCounter.png create mode 100644 src/icons/Statcounter.svg create mode 100644 src/icons/Zenfolio.png diff --git a/src/apps.json b/src/apps.json index 7e0ca94bc..18a987c8d 100644 --- a/src/apps.json +++ b/src/apps.json @@ -9404,11 +9404,11 @@ "implies": "Perl", "website": "http://metacpan.org/pod/Starlet" }, - "StatCounter": { + "Statcounter": { "cats": [ 10 ], - "icon": "StatCounter.png", + "icon": "Statcounter.svg", "js": { "_statcounter": "\\;confidence:100", "sc_project": "\\;confidence:50", @@ -11393,6 +11393,16 @@ "script": "v2\\.zopim\\.com", "website": "http://zopim.com" }, + "Zenfolio": { + "cats": [ + 7 + ], + "icon": "Zenfolio.png", + "js": { + "Zenfolio": "" + }, + "website": "https://zenfolio.com" + }, "Zepto": { "cats": [ 12 diff --git a/src/icons/StatCounter.png b/src/icons/StatCounter.png deleted file mode 100644 index e3d2bcc3d1101cf98c1008359c93eed157b0c8f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J%=P)g(VU~ZK zzOu~fM1#z5k+u~|hhvAZzSQhYiOp4y(P5a@aH83GrrBG8t2JSj$k5!v&fdMq*E(mK z1teJoCRzq3TQ6Uga)zRjI-ZBY@Ugv!$X403M^j0tLV~rx(5bb@oT$CJz|RFES4CZf$%hRp|Q51yXTFtR-+t#sd+wcDdXYI};b2Z=H zUrAw!)!qRX4xQOzb@$|SbKYCqI}VBM-{Ikr`{|j;Waq(lbi8+V30x7;^^GLm>h~5| z?!x@SgW{6h9 diff --git a/src/icons/Zenfolio.png b/src/icons/Zenfolio.png new file mode 100644 index 0000000000000000000000000000000000000000..56867d629f384045311069508bb353322d28de7a GIT binary patch literal 634 zcmV-=0)_pFP)52pu{NHb?*f0tZP% zK~z}7?Uui56hRn^tB0&WLYIM-4+P z$&f1t$N_SIp##|2Q7wog^!L?tEjG{?gK!Iokx|fUzyNUs?g;kwUB7qxLn3S!v_duB zfa47oKnI_2_8p^e=JKYx^?MhIYtN9CsR29S`j{|4HELiCU@&n6T4B%Z2Oz0Gr}N}G zR(0p#dq9>a&@0QduATx6LP*rd*Z9ZhQh+$3ed|2JFM{QO(F2|Wt-!L7#W7@g9McJL z_8h^VT}rKga0%6Xi`+VydGkKTP=K@{Nia!-Kf4G*ki2_A=jjcs9W$A`zyBPN61DOk z@9Ahey?VINiuAjN{`v;H`6Ev|VrtweAr`A8bf@;)K>ysZn+21>WO3-0|e{umV zhxp}V+P5zt{1Q57qFbLaVUUK_hDr60NvIli+ykd^b{|YXRi-G--9?U8LF-i0tkZdP z4dE4jf&8Vbvc3t;`WmuWp)`L#9kXu3(pqJ0;SjPszNxNv2P_*=+(!G(A}0LW#U(oh zEmt%BeNOW{*od5s; literal 0 HcmV?d00001 From 31a300ea11f0460a1d55b1fa5890141914928791 Mon Sep 17 00:00:00 2001 From: mr G1K Date: Fri, 20 Apr 2018 08:33:55 +0300 Subject: [PATCH 150/175] Google Analytics Enhanced eCommerce (#2230) * Google Analytics Enhanced eCommerce tagmanager generate link //www.google-analytics.com/plugins/ua/ecommerce.js * Update apps.json --- src/apps.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 18a987c8d..5613f3988 100644 --- a/src/apps.json +++ b/src/apps.json @@ -3734,7 +3734,8 @@ "gaplugins.EC": "" }, "icon": "Google Analytics.svg", - "script": "google-analytics\\.com\\/plugins\\/ua\\/ec\\.js", + "script": "google-analytics\\.com\\/plugins\\/ua\\/(?:ec|ecommerce)\\.js", + "implies": "Google Analytics", "website": "https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce" }, "Google App Engine": { From 2b57a2c97b7360ee1805834ad908332ec71cd0cc Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Fri, 20 Apr 2018 15:53:32 +1000 Subject: [PATCH 151/175] Build v5.4.14 --- src/apps.json | 2 +- src/drivers/npm/package.json | 2 +- src/drivers/webextension/js/driver.js | 4 +++- src/drivers/webextension/manifest.json | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/apps.json b/src/apps.json index 5613f3988..817b3edf2 100644 --- a/src/apps.json +++ b/src/apps.json @@ -4621,7 +4621,7 @@ 6, 53 ], - "icon": "byInti.png", + "icon": "byINTI.svg", "url": "^https?//.+\\.byinti\\.com", "website": "http://byinti.com" }, diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 9ae34aadc..173a41601 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -2,7 +2,7 @@ "name": "wappalyzer", "description": "Uncovers the technologies used on websites", "homepage": "https://github.com/AliasIO/Wappalyzer", - "version": "5.4.13", + "version": "5.4.14", "author": "Elbert Alias", "license": "GPL-3.0", "repository": { diff --git a/src/drivers/webextension/js/driver.js b/src/drivers/webextension/js/driver.js index bbe784d10..653b3bb4e 100644 --- a/src/drivers/webextension/js/driver.js +++ b/src/drivers/webextension/js/driver.js @@ -135,10 +135,12 @@ browser.webRequest.onCompleted.addListener(request => { if ( request.responseHeaders ) { const url = wappalyzer.parseUrl(request.url); - browser.tabs.query({ url: [ url.canonical ] }) + browser.tabs.query({ url: [ url.href ] }) .then(tabs => { const tab = tabs[0] || null; + console.log({ url: url.canonical, tab }); + if ( tab ) { request.responseHeaders.forEach(header => { const name = header.name.toLowerCase(); diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index 821ae1db0..e8cc0c002 100644 --- a/src/drivers/webextension/manifest.json +++ b/src/drivers/webextension/manifest.json @@ -4,7 +4,7 @@ "author": "Elbert Alias", "homepage_url": "https://www.wappalyzer.com", "description": "Identify web technologies", - "version": "5.4.13", + "version": "5.4.14", "default_locale": "en", "manifest_version": 2, "icons": { From dc0031e917d9c3e45273989adb99e4908aa9b6bc Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Sat, 21 Apr 2018 09:50:55 +1000 Subject: [PATCH 152/175] Show icon when no technologies are identified, add htmlMaxCols and htmlMaxRows options in NPM driver --- src/drivers/npm/README.md | 20 +++++---- src/drivers/npm/driver.js | 14 +++--- src/drivers/webextension/css/popup.css | 2 +- src/drivers/webextension/js/driver.js | 62 +++++++++++++------------- src/drivers/webextension/manifest.json | 2 - 5 files changed, 52 insertions(+), 48 deletions(-) diff --git a/src/drivers/npm/README.md b/src/drivers/npm/README.md index d77b2270a..a661bb198 100644 --- a/src/drivers/npm/README.md +++ b/src/drivers/npm/README.md @@ -27,14 +27,16 @@ node index.js [url] [options] ### Options ``` - --chunk-size=num Process links in chunks. - --debug=0|1 Output debug messages. - --delay=ms Wait for ms milliseconds between requests. - --max-depth=num Don't analyse pages more than num levels deep. - --max-urls=num Exit when num URLs have been analysed. - --max-wait=ms Wait no more than ms milliseconds for page resources to load. - --recursive=0|1 Follow links on pages (crawler). - --user-agent=str Set the user agent string. + --chunk-size=num Process links in chunks. + --debug=0|1 Output debug messages. + --delay=ms Wait for ms milliseconds between requests. + --max-depth=num Don't analyse pages more than num levels deep. + --max-urls=num Exit when num URLs have been analysed. + --max-wait=ms Wait no more than ms milliseconds for page resources to load. + --recursive=0|1 Follow links on pages (crawler). + --user-agent=str Set the user agent string. + --html-max-cols=num Limit the number of HTML characters per line processed. + --html-max-rows=num Limit the number of HTML lines processed. ``` @@ -49,6 +51,8 @@ const options = { maxWait: 5000, recursive: true, userAgent: 'Wappalyzer', + htmlMaxCols: 2000, + htmlMaxRows: 2000, }; const wappalyzer = new Wappalyzer('https://www.wappalyzer.com', options); diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 37928839d..0dcaac739 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -21,6 +21,8 @@ class Driver { maxWait: 5000, recursive: false, userAgent: 'Mozilla/5.0 (compatible; Wappalyzer)', + htmlMaxCols: 2000, + htmlMaxRows: 2000, }, options || {}); this.options.debug = Boolean(this.options.debug); @@ -28,6 +30,8 @@ class Driver { this.options.maxDepth = parseInt(this.options.maxDepth, 10); this.options.maxUrls = parseInt(this.options.maxUrls, 10); this.options.maxWait = parseInt(this.options.maxWait, 10); + this.options.htmlMaxCols = parseInt(this.options.htmlMaxCols, 10); + this.options.htmlMaxRows = parseInt(this.options.htmlMaxRows, 10); this.options.recursive = Boolean(this.options.recursive); this.origPageUrl = url.parse(pageUrl); @@ -216,11 +220,11 @@ class Driver { let html = ''; try { - html = browser.html(); - - if ( html.length > 50000 ) { - html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length); - } + html = browser.html() + .split('\n') + .slice(0, this.options.htmlMaxRows / 2).concat(html.slice(html.length - this.options.htmlMaxRows / 2)) + .map(line => line.substring(0, this.options.htmlMaxCols)) + .join('\n'); } catch ( error ) { this.wappalyzer.log(error.message, 'browser', 'error'); } diff --git a/src/drivers/webextension/css/popup.css b/src/drivers/webextension/css/popup.css index 83725397b..b9d7c90fb 100644 --- a/src/drivers/webextension/css/popup.css +++ b/src/drivers/webextension/css/popup.css @@ -148,7 +148,7 @@ body { .empty { display: flex; - height: 16rem; + height: 14.5rem; align-items: center; justify-content: center; } diff --git a/src/drivers/webextension/js/driver.js b/src/drivers/webextension/js/driver.js index 653b3bb4e..a08a0580e 100644 --- a/src/drivers/webextension/js/driver.js +++ b/src/drivers/webextension/js/driver.js @@ -240,47 +240,45 @@ wappalyzer.driver.displayApps = (detected, meta, context) => { tabCache[tab.id].detected = detected; - if ( Object.keys(detected).length ) { - var appName, found = false; + var appName, found = false; - // Find the main application to display - [ options.pinnedCategory ].concat(categoryOrder).forEach(match => { - Object.keys(detected).forEach(appName => { - var app = detected[appName]; + // Find the main application to display + [ options.pinnedCategory ].concat(categoryOrder).forEach(match => { + Object.keys(detected).forEach(appName => { + var app = detected[appName]; - app.props.cats.forEach(category => { - if ( category === match && !found ) { - var icon = app.props.icon || 'default.svg'; + app.props.cats.forEach(category => { + if ( category === match && !found ) { + var icon = app.props.icon || 'default.svg'; - if ( !options.dynamicIcon ) { - icon = 'default.svg'; - } - - if ( /\.svg$/i.test(icon) ) { - icon = 'converted/' + icon.replace(/\.svg$/, '.png'); - } + if ( !options.dynamicIcon ) { + icon = 'default.svg'; + } - try { - browser.pageAction.setIcon({ - tabId: tab.id, - path: '../images/icons/' + icon - }); - } catch(e) { - // Firefox for Android does not support setIcon see https://bugzilla.mozilla.org/show_bug.cgi?id=1331746 - } + if ( /\.svg$/i.test(icon) ) { + icon = 'converted/' + icon.replace(/\.svg$/, '.png'); + } - found = true; + try { + browser.pageAction.setIcon({ + tabId: tab.id, + path: '../images/icons/' + icon + }); + } catch(e) { + // Firefox for Android does not support setIcon see https://bugzilla.mozilla.org/show_bug.cgi?id=1331746 } - }); + + found = true; + } }); }); + }); - if ( typeof chrome !== 'undefined' ) { - // Browser polyfill doesn't seem to work here - chrome.pageAction.show(tab.id); - } else { - browser.pageAction.show(tab.id); - } + if ( typeof chrome !== 'undefined' ) { + // Browser polyfill doesn't seem to work here + chrome.pageAction.show(tab.id); + } else { + browser.pageAction.show(tab.id); } }; diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index e8cc0c002..2f4dff398 100644 --- a/src/drivers/webextension/manifest.json +++ b/src/drivers/webextension/manifest.json @@ -72,5 +72,3 @@ ], "content_security_policy": "script-src 'self'; object-src 'self'" } - - From 3402b850ed988d527c43d9ff9ff230766a9c7ce4 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Sat, 28 Apr 2018 09:45:37 +1000 Subject: [PATCH 153/175] Fix empty header value issue --- src/drivers/webextension/js/driver.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/drivers/webextension/js/driver.js b/src/drivers/webextension/js/driver.js index a08a0580e..51b183bb5 100644 --- a/src/drivers/webextension/js/driver.js +++ b/src/drivers/webextension/js/driver.js @@ -139,15 +139,13 @@ browser.webRequest.onCompleted.addListener(request => { .then(tabs => { const tab = tabs[0] || null; - console.log({ url: url.canonical, tab }); - if ( tab ) { request.responseHeaders.forEach(header => { const name = header.name.toLowerCase(); headers[name] = headers[name] || []; - headers[name].push(header.value || header.binaryValue.toString()); + headers[name].push(( header.value || header.binaryValue || '' ).toString()); }); if ( headers['content-type'] && /\/x?html/.test(headers['content-type'][0]) ) { From 1ad243167cfb316bcf4f75bcacf7ee619a249abb Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Sat, 28 Apr 2018 09:47:18 +1000 Subject: [PATCH 154/175] Update Portugese locale --- src/drivers/webextension/_locales/pt/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/webextension/_locales/pt/messages.json b/src/drivers/webextension/_locales/pt/messages.json index 6b11ee089..eb3fa6917 100644 --- a/src/drivers/webextension/_locales/pt/messages.json +++ b/src/drivers/webextension/_locales/pt/messages.json @@ -27,7 +27,7 @@ "categoryName14": { "message": "Leitor de videos" }, "categoryName15": { "message": "Sistemas de comentários" }, "categoryName16": { "message": "Captcha" }, - "categoryName17": { "message": "Script de policia" }, + "categoryName17": { "message": "Script de fonte" }, "categoryName18": { "message": "Framework WEB" }, "categoryName19": { "message": "Diversos" }, "categoryName20": { "message": "Editor" }, From bb96c9378a411ace754730ef47dce594451e087d Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Sat, 28 Apr 2018 09:47:25 +1000 Subject: [PATCH 155/175] Update version number --- src/drivers/npm/package.json | 2 +- src/drivers/webextension/manifest.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 173a41601..411f1d33c 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -2,7 +2,7 @@ "name": "wappalyzer", "description": "Uncovers the technologies used on websites", "homepage": "https://github.com/AliasIO/Wappalyzer", - "version": "5.4.14", + "version": "5.4.15", "author": "Elbert Alias", "license": "GPL-3.0", "repository": { diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index 2f4dff398..c59b9e9ba 100644 --- a/src/drivers/webextension/manifest.json +++ b/src/drivers/webextension/manifest.json @@ -4,7 +4,7 @@ "author": "Elbert Alias", "homepage_url": "https://www.wappalyzer.com", "description": "Identify web technologies", - "version": "5.4.14", + "version": "5.4.15", "default_locale": "en", "manifest_version": 2, "icons": { From 2065d5054b6319d242641555bb7622e0d43407a4 Mon Sep 17 00:00:00 2001 From: kevNii Date: Thu, 3 May 2018 00:12:53 +0200 Subject: [PATCH 156/175] fix meta detection (#2277) --- src/wappalyzer.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/wappalyzer.js b/src/wappalyzer.js index 1a4e1137b..843976ee3 100644 --- a/src/wappalyzer.js +++ b/src/wappalyzer.js @@ -470,7 +470,6 @@ class Wappalyzer { const patterns = this.parsePatterns(app.props.meta); const promises = []; - var content = ''; var matches = []; while ( patterns && ( matches = regex.exec(html) ) ) { @@ -478,7 +477,7 @@ class Wappalyzer { const r = new RegExp('(?:name|property)=["\']' + meta + '["\']', 'i'); if ( r.test(matches[0]) ) { - content = matches[0].match(/content=("|')([^"']+)("|')/i); + let content = matches[0].match(/content=("|')([^"']+)("|')/i); promises.push(this.asyncForEach(patterns[meta], pattern => { if ( content && content.length === 4 && pattern.regex.test(content[2]) ) { From 80181ad4b3160be6e9e9b256d816e675c41ebc06 Mon Sep 17 00:00:00 2001 From: Yanis Ghidouche Date: Sat, 5 May 2018 07:00:21 +0400 Subject: [PATCH 157/175] remove regex for YII Framework (#2252) Regex for script detection on YII Framework section prupose to much false positive, as prupose on https://github.com/AliasIO/Wappalyzer/pull/2246 is better to just delete it. --- src/apps.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 817b3edf2..f9b2f987c 100644 --- a/src/apps.json +++ b/src/apps.json @@ -11273,7 +11273,6 @@ "", " Date: Sat, 5 May 2018 03:01:13 +0000 Subject: [PATCH 158/175] Tighten a bit some `Server` regexp (#2254) Those were tested on the top10 of every detection --- src/apps.json | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/apps.json b/src/apps.json index f9b2f987c..f5db0e8ca 100644 --- a/src/apps.json +++ b/src/apps.json @@ -479,7 +479,7 @@ 31 ], "headers": { - "Server": "Airee" + "Server": "^Airee" }, "icon": "Airee.png", "website": "http://xn--80aqc2a.xn--p1ai" @@ -577,7 +577,7 @@ 19 ], "headers": { - "Server": "AmazonS3" + "Server": "^AmazonS3$" }, "icon": "aws-s3.svg", "website": "http://aws.amazon.com/s3/" @@ -1608,7 +1608,6 @@ 31 ], "headers": { - "server": "^CDN77-Turbo$", "Server": "^CDN77-Turbo$" }, "icon": "CDN77.png", @@ -1699,7 +1698,7 @@ 22 ], "headers": { - "Server": "Cherokee(?:/([\\d.]+))?\\;version:\\1" + "Server": "^Cherokee(?:/([\\d.]+))?\\;version:\\1" }, "icon": "Cherokee.png", "website": "http://www.cherokee-project.com" @@ -1826,7 +1825,7 @@ "CloudFlare": "" }, "headers": { - "Server": "cloudflare" + "Server": "^cloudflare$" }, "icon": "CloudFlare.svg", "website": "http://www.cloudflare.com" @@ -2092,7 +2091,7 @@ 22 ], "headers": { - "Server": "Cowboy" + "Server": "^Cowboy$" }, "icon": "Cowboy.png", "implies": "Erlang", From c7439345e3ad85be6ed4ca4afc4d20dc51f76445 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 5 May 2018 03:01:42 +0000 Subject: [PATCH 159/175] Remove some `unpopular` detection (#2255) * Remove some `unpopular` detection Those have zero hits on https://www.wappalyzer.com/technologies * Remove icons --- src/apps.json | 41 ------------------------------------ src/icons/David Webbox.png | Bin 270 -> 0 bytes src/icons/ESERV-10.png | Bin 262 -> 0 bytes src/icons/EWS-NIC4.png | Bin 453 -> 0 bytes src/icons/ExagonConcept.svg | 1 - 5 files changed, 42 deletions(-) delete mode 100644 src/icons/David Webbox.png delete mode 100644 src/icons/ESERV-10.png delete mode 100644 src/icons/EWS-NIC4.png delete mode 100644 src/icons/ExagonConcept.svg diff --git a/src/apps.json b/src/apps.json index f5db0e8ca..a58d14c1f 100644 --- a/src/apps.json +++ b/src/apps.json @@ -2379,16 +2379,6 @@ "script": "dataTables.*\\.js", "website": "http://datatables.net" }, - "David Webbox": { - "cats": [ - 22 - ], - "headers": { - "Server": "David-WebBox/([\\d.a]+ \\(\\d+\\))\\;version:\\1" - }, - "icon": "David Webbox.png", - "website": "http://www.tobit.com" - }, "Debian": { "cats": [ 28 @@ -2806,27 +2796,6 @@ }, "website": "http://www.eprints.org" }, - "ESERV-10": { - "cats": [ - 22 - ], - "headers": { - "Server": "ESERV-10(?:/([\\d.]+))?\\;version:\\1" - }, - "icon": "ESERV-10.png", - "website": "http://www.violasystems.com" - }, - "EWS-NIC4": { - "cats": [ - 22 - ], - "headers": { - "Server": "EWS-NIC4(?:\\/([\\d\\.a-z]+))?\\;version:\\1" - }, - "icon": "EWS-NIC4.png", - "implies": "Dell", - "website": "http://dell.com" - }, "EdgeCast": { "cats": [ 31 @@ -2969,16 +2938,6 @@ ], "website": "https://etherpad.org" }, - "Exagon Concept": { - "cats": [ - 1 - ], - "headers": { - "Server": "Exagon Server" - }, - "icon": "ExagonConcept.svg", - "website": "http://www.exagon-concept.com" - }, "Exhibit": { "cats": [ 25 diff --git a/src/icons/David Webbox.png b/src/icons/David Webbox.png deleted file mode 100644 index 16e72fa1223aaccc03382939bc262c242d85fb67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmV+p0rCEcP)q^15DFI*LB1kMG-_%+NJd<--mXKwc4`7?aFof&6D2jqW z(lp(Z@Bu*(91GKR9a)wU$oe{5Kpe-AB#A6c)3hxf-6}?eX>Z`TF_${Qv*|^C9id0001aNkl@26hqOd(1OSx%>H-Ug}kD? zvz$rbDnGRwRVS{>*}$~| z;5T9K0vS>eFo3@70jT~$fXU-4s?855N8qgcEfMW3TqRv`H-4(_4-F3wCP|a6g#Z8m M07*qoM6N<$g3_CE)Bpeg diff --git a/src/icons/EWS-NIC4.png b/src/icons/EWS-NIC4.png deleted file mode 100644 index 5803d63851ea0f6e04db5de39a4ca87852d36696..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 zcmV;$0XqJPP)zT&hsH9T(JGnF|NsB$|NqD1@gkPZ42sC!?)UEQ z|EJUHi^t?ns@H0`+}r8+*X#Ioz2U*&@=B=Hd^z=HQ(y!U< zd%xggv)eA4&{eM2k;~`K>GTMR$IRvMIH1y@(&h9j+aR2`s18sQ^A%uI`0?Q_y z78KL8S;8XSbwIaE7i9G&1IT7|X0jgxFy4QPRxsWItH>}!C18eg|O_ zeS|ztjDk=kv$rP9n(!43zehoODdS0Yop0l~jN?n{_yB;%(R=j*;8pe94kv)q;fC(~ v(*ynB+(A39qGz5zqiWs)iff%D^ \ No newline at end of file From 70b5cb3f458c99c8d465aabfaeb6e17b9e1ade95 Mon Sep 17 00:00:00 2001 From: benzel Date: Sat, 5 May 2018 05:01:55 +0200 Subject: [PATCH 160/175] Updated missing locales (#2256) --- src/drivers/webextension/_locales/de/messages.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/drivers/webextension/_locales/de/messages.json b/src/drivers/webextension/_locales/de/messages.json index 651a5160d..d9ef234b1 100644 --- a/src/drivers/webextension/_locales/de/messages.json +++ b/src/drivers/webextension/_locales/de/messages.json @@ -10,7 +10,7 @@ "optionTracking": { "message": "Anonyme Statistiken an wappalyzer.com übermitteln" }, "nothingToDo": { "message": "Nichts zu tun." }, "noAppsDetected": { "message": "Keine Applikation entdeckt." }, - "categoryPin": { "message": "Always show icon" }, + "categoryPin": { "message": "Immer Icon anzeigen" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Nachrichten Board" }, "categoryName3": { "message": "Datenbankverwaltung" }, @@ -67,5 +67,5 @@ "categoryName54": { "message": "SEO" }, "categoryName55": { "message": "Buchhaltung" }, "categoryName56": { "message": "Cryptominer" }, - "categoryName57": { "message": "Static Site Generator" } + "categoryName57": { "message": "Statischer Seitengenerator" } } From ccfa3a38d9572ee5e8f067e5e2a62806ab44820b Mon Sep 17 00:00:00 2001 From: Fabian Schultz Date: Sat, 5 May 2018 05:02:08 +0200 Subject: [PATCH 161/175] Add ctfassets.net to Contentful detection (#2257) * Add ctfassets.net to Contentful detection. * Use optional quantifier. --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index a58d14c1f..fdf50967f 100644 --- a/src/apps.json +++ b/src/apps.json @@ -2035,7 +2035,7 @@ "cats": [ 1 ], - "html": "<[^>]+(?:https?:)?//(?:assets|downloads|images|videos)\\.(?:cfassets\\.net|contentful\\.com)", + "html": "<[^>]+(?:https?:)?//(?:assets|downloads|images|videos)\\.(?:ct?fassets\\.net|contentful\\.com)", "icon": "Contentful.svg", "website": "http://www.contentful.com" }, From 45c4c41059a54a3365fe18f685f19793a33811de Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 5 May 2018 03:04:30 +0000 Subject: [PATCH 162/175] Tighten a bit asp and iis detection (#2260) - The x-powered-by header is trustworthy for ASP - The `server` header for IIS always starts with `IIS` --- src/apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps.json b/src/apps.json index fdf50967f..359609c8d 100644 --- a/src/apps.json +++ b/src/apps.json @@ -4343,7 +4343,7 @@ 22 ], "headers": { - "Server": "IIS(?:/([\\d.]+))?\\;version:\\1" + "Server": "^IIS(?:/([\\d.]+))?\\;version:\\1" }, "icon": "IIS.png", "implies": "Windows Server", @@ -6019,7 +6019,7 @@ }, "headers": { "X-AspNet-Version": "(.+)\\;version:\\1", - "X-Powered-By": "ASP\\.NET\\;confidence:50" + "X-Powered-By": "^ASP\\.NET" }, "html": "]+name=\"__VIEWSTATE", "icon": "Microsoft ASP.NET.png", From 25a6ce44ac0ae8cc3b63ccb4c6a9f71188d881dd Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 5 May 2018 03:04:44 +0000 Subject: [PATCH 163/175] Improve XenForo detection (#2261) * Improve XenForo detection This can be tested [here](https://thebot.net/threads/python-3-function-annotations.363444/) * Fix the json --- src/apps.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 359609c8d..1500b69bd 100644 --- a/src/apps.json +++ b/src/apps.json @@ -11050,7 +11050,17 @@ "cats": [ 2 ], - "html": "(?:jQuery\\.extend\\(true, XenForo|Forum software by XenForo™|