From affa55e8f1ec77d19d5efa5251a21cb531bb5f71 Mon Sep 17 00:00:00 2001 From: neoneosa Date: Sun, 1 Oct 2017 11:48:50 +0200 Subject: [PATCH 001/117] added Bulma icon --- src/icons/rsz_bulma.png | Bin 0 -> 1361 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/icons/rsz_bulma.png diff --git a/src/icons/rsz_bulma.png b/src/icons/rsz_bulma.png new file mode 100644 index 0000000000000000000000000000000000000000..b46f32bb5cc41848eeca4babbfbc18a797aa41f2 GIT binary patch literal 1361 zcmZ{kdpHw%7{`BRn~__&KDo?s%Q$Lkk{ymMTZpaE#L021iCj`l&kzmM8M;t9wpys1 zMLI){5yNsREpc3v&Xg$?PI4l5JM-uH<2>*4zMtp$exL96&o_rc_Rvt+g2DQ&)YO`)jJy+}lraWy3v5~KRwDofGt??u2<1KaD0dgH17 zx=&j_j4fin^8fZxZRKN6m1UPv*YFjObzdQ(m4|e7<2DnqnZJd(+1y4V9TT z)>Mp4i)Bkx$|901vWE>(^G~}|XIoM)=Y8r@AK^If9aC7PTE7WWwiswg|Wwp)5WW-FKQ0GAtxMZJ&nVdw-phWh@pWR#HEcx)+ zXNMfKTtH!%(N+Z>(G>Q@n>|=I#7D|K@VTgONLjZtayGYQUt9AblY=1|lWu#>dm(6b z22A*L8)21YlQ8g;fiJV-5kuQnxb)1aVNo3PEHrC*;s8wxD2riY^?fiQawp!<=~hy> z%o$(PS#rMCvc&)g6{AvFO8F4;L!ZWR?{v21`0G5!emNel57F(sf(-Ez(Jy~L-J#}K z^FaA#ReA=u>)tA_Eb7iXLN(=($YuN4JCcms&m4S=O0c)ewDY5IBB2iVfwEH$>b&L; zg0x^{n0X*`*8@4?D+iN3UT$OhM7v5ui6B`R6b{!JPLKH`#jwYSc0?Ajv5fqC2lLNl z;f|x8CKPCktao}N)wo=eTRm?Btf!(W4ddmKnO_}ooJbCUxCHhL;R<;DQ3^Ts0Lm0r)nh7YE$n9z>)|s%ttq`bYMgRI9VB*fxwedl@MiIz%Y@MAO zac`~jyVciW;vwx)?A4}Uz4+^om~n zF__riNWh1w)*VT_l}%O3kMwTllG8=Y`mqeVBY6#u4Dt^O@GD^rH-yXSNnGpuhk6b;OIaqBiJ0rgwGMpjw-Vx4ve_?Lux>m@y zddtz0AS+hzN|Iim6+~Jn3tWyDQbFt@7JveDed`xtz~ zitfcY$#+e0ZbgF9`{El63&HieVS>TogUIgMW^rtipR-@sbF;9>X#1YCTGXnEs>Wim zX1oTw{A0)4f(9}*LRvI6Qd5~W0kc2df9h&o|6lh_TxOC=`N|}$Z}9>ncmAdk-a^wDclTBj}$rp`nogI!&LW?5SQ$nLja$L#;0~Hf+^7W`}ykP!` z?OdbgAYIn&n_j+@wp6e+84fUgTBzSbCAH0g+&bdkI`|&f)Rf^D+6G!dL%`XZFM(LxXrq8eB5EVyw0=cUrR`GMJ=)^!e zEu0>KJ)RJu0N9OoaI$wm+oK(*Xh-ZG2dv|6do%`%MmxVVP5e(FE}nMsMDqU!JRk9U P6#?KyBohSt!!rK`N%2`4 literal 0 HcmV?d00001 From ae0e71224a47552cba1813625f6f6d6fa3476032 Mon Sep 17 00:00:00 2001 From: neoneosa Date: Sun, 1 Oct 2017 11:56:14 +0200 Subject: [PATCH 002/117] Update apps.json --- src/apps.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/apps.json b/src/apps.json index 9ab09dcfb..e2a039b6b 100644 --- a/src/apps.json +++ b/src/apps.json @@ -1117,6 +1117,14 @@ "icon": "Bugzilla.png", "implies": "Perl", "website": "http://www.bugzilla.org" + }, + "Bulma": { + "cats": [ + "18" + ], + "html": "]+?href=\"[^\"]+bulma(?:\\.min)?\\.css", + "icon": "Bulma.png", + "website": "http://bulma.io" }, "Burning Board": { "cats": [ From 93e09488b460de0f4791b402f7fce879cce28373 Mon Sep 17 00:00:00 2001 From: neoneosa Date: Sun, 1 Oct 2017 12:21:32 +0200 Subject: [PATCH 003/117] Delete rsz_bulma.png --- src/icons/rsz_bulma.png | Bin 1361 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/icons/rsz_bulma.png diff --git a/src/icons/rsz_bulma.png b/src/icons/rsz_bulma.png deleted file mode 100644 index b46f32bb5cc41848eeca4babbfbc18a797aa41f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1361 zcmZ{kdpHw%7{`BRn~__&KDo?s%Q$Lkk{ymMTZpaE#L021iCj`l&kzmM8M;t9wpys1 zMLI){5yNsREpc3v&Xg$?PI4l5JM-uH<2>*4zMtp$exL96&o_rc_Rvt+g2DQ&)YO`)jJy+}lraWy3v5~KRwDofGt??u2<1KaD0dgH17 zx=&j_j4fin^8fZxZRKN6m1UPv*YFjObzdQ(m4|e7<2DnqnZJd(+1y4V9TT z)>Mp4i)Bkx$|901vWE>(^G~}|XIoM)=Y8r@AK^If9aC7PTE7WWwiswg|Wwp)5WW-FKQ0GAtxMZJ&nVdw-phWh@pWR#HEcx)+ zXNMfKTtH!%(N+Z>(G>Q@n>|=I#7D|K@VTgONLjZtayGYQUt9AblY=1|lWu#>dm(6b z22A*L8)21YlQ8g;fiJV-5kuQnxb)1aVNo3PEHrC*;s8wxD2riY^?fiQawp!<=~hy> z%o$(PS#rMCvc&)g6{AvFO8F4;L!ZWR?{v21`0G5!emNel57F(sf(-Ez(Jy~L-J#}K z^FaA#ReA=u>)tA_Eb7iXLN(=($YuN4JCcms&m4S=O0c)ewDY5IBB2iVfwEH$>b&L; zg0x^{n0X*`*8@4?D+iN3UT$OhM7v5ui6B`R6b{!JPLKH`#jwYSc0?Ajv5fqC2lLNl z;f|x8CKPCktao}N)wo=eTRm?Btf!(W4ddmKnO_}ooJbCUxCHhL;R<;DQ3^Ts0Lm0r)nh7YE$n9z>)|s%ttq`bYMgRI9VB*fxwedl@MiIz%Y@MAO zac`~jyVciW;vwx)?A4}Uz4+^om~n zF__riNWh1w)*VT_l}%O3kMwTllG8=Y`mqeVBY6#u4Dt^O@GD^rH-yXSNnGpuhk6b;OIaqBiJ0rgwGMpjw-Vx4ve_?Lux>m@y zddtz0AS+hzN|Iim6+~Jn3tWyDQbFt@7JveDed`xtz~ zitfcY$#+e0ZbgF9`{El63&HieVS>TogUIgMW^rtipR-@sbF;9>X#1YCTGXnEs>Wim zX1oTw{A0)4f(9}*LRvI6Qd5~W0kc2df9h&o|6lh_TxOC=`N|}$Z}9>ncmAdk-a^wDclTBj}$rp`nogI!&LW?5SQ$nLja$L#;0~Hf+^7W`}ykP!` z?OdbgAYIn&n_j+@wp6e+84fUgTBzSbCAH0g+&bdkI`|&f)Rf^D+6G!dL%`XZFM(LxXrq8eB5EVyw0=cUrR`GMJ=)^!e zEu0>KJ)RJu0N9OoaI$wm+oK(*Xh-ZG2dv|6do%`%MmxVVP5e(FE}nMsMDqU!JRk9U P6#?KyBohSt!!rK`N%2`4 From dc44c9f9632f33844710a57cd0cd261afa161c6c Mon Sep 17 00:00:00 2001 From: neoneosa Date: Sun, 1 Oct 2017 12:22:19 +0200 Subject: [PATCH 004/117] Add files via upload --- src/icons/bulma.png | Bin 0 -> 1361 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/icons/bulma.png diff --git a/src/icons/bulma.png b/src/icons/bulma.png new file mode 100644 index 0000000000000000000000000000000000000000..b46f32bb5cc41848eeca4babbfbc18a797aa41f2 GIT binary patch literal 1361 zcmZ{kdpHw%7{`BRn~__&KDo?s%Q$Lkk{ymMTZpaE#L021iCj`l&kzmM8M;t9wpys1 zMLI){5yNsREpc3v&Xg$?PI4l5JM-uH<2>*4zMtp$exL96&o_rc_Rvt+g2DQ&)YO`)jJy+}lraWy3v5~KRwDofGt??u2<1KaD0dgH17 zx=&j_j4fin^8fZxZRKN6m1UPv*YFjObzdQ(m4|e7<2DnqnZJd(+1y4V9TT z)>Mp4i)Bkx$|901vWE>(^G~}|XIoM)=Y8r@AK^If9aC7PTE7WWwiswg|Wwp)5WW-FKQ0GAtxMZJ&nVdw-phWh@pWR#HEcx)+ zXNMfKTtH!%(N+Z>(G>Q@n>|=I#7D|K@VTgONLjZtayGYQUt9AblY=1|lWu#>dm(6b z22A*L8)21YlQ8g;fiJV-5kuQnxb)1aVNo3PEHrC*;s8wxD2riY^?fiQawp!<=~hy> z%o$(PS#rMCvc&)g6{AvFO8F4;L!ZWR?{v21`0G5!emNel57F(sf(-Ez(Jy~L-J#}K z^FaA#ReA=u>)tA_Eb7iXLN(=($YuN4JCcms&m4S=O0c)ewDY5IBB2iVfwEH$>b&L; zg0x^{n0X*`*8@4?D+iN3UT$OhM7v5ui6B`R6b{!JPLKH`#jwYSc0?Ajv5fqC2lLNl z;f|x8CKPCktao}N)wo=eTRm?Btf!(W4ddmKnO_}ooJbCUxCHhL;R<;DQ3^Ts0Lm0r)nh7YE$n9z>)|s%ttq`bYMgRI9VB*fxwedl@MiIz%Y@MAO zac`~jyVciW;vwx)?A4}Uz4+^om~n zF__riNWh1w)*VT_l}%O3kMwTllG8=Y`mqeVBY6#u4Dt^O@GD^rH-yXSNnGpuhk6b;OIaqBiJ0rgwGMpjw-Vx4ve_?Lux>m@y zddtz0AS+hzN|Iim6+~Jn3tWyDQbFt@7JveDed`xtz~ zitfcY$#+e0ZbgF9`{El63&HieVS>TogUIgMW^rtipR-@sbF;9>X#1YCTGXnEs>Wim zX1oTw{A0)4f(9}*LRvI6Qd5~W0kc2df9h&o|6lh_TxOC=`N|}$Z}9>ncmAdk-a^wDclTBj}$rp`nogI!&LW?5SQ$nLja$L#;0~Hf+^7W`}ykP!` z?OdbgAYIn&n_j+@wp6e+84fUgTBzSbCAH0g+&bdkI`|&f)Rf^D+6G!dL%`XZFM(LxXrq8eB5EVyw0=cUrR`GMJ=)^!e zEu0>KJ)RJu0N9OoaI$wm+oK(*Xh-ZG2dv|6do%`%MmxVVP5e(FE}nMsMDqU!JRk9U P6#?KyBohSt!!rK`N%2`4 literal 0 HcmV?d00001 From 14c1542898b08dc5cb5b9b287b6d52f694c88606 Mon Sep 17 00:00:00 2001 From: Lay Date: Tue, 3 Oct 2017 17:51:43 +0800 Subject: [PATCH 005/117] Add Traditional Chinese translation --- .../webextension/_locales/zh_TW/messages.json | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/drivers/webextension/_locales/zh_TW/messages.json diff --git a/src/drivers/webextension/_locales/zh_TW/messages.json b/src/drivers/webextension/_locales/zh_TW/messages.json new file mode 100644 index 000000000..4ebdb5da4 --- /dev/null +++ b/src/drivers/webextension/_locales/zh_TW/messages.json @@ -0,0 +1,66 @@ +{ + "github": { "message": "在 GitHub 上 fork Wappalyzer!" }, + "twitter": { "message": "追隨 Wappalyzer 的 Twitter" }, + "website": { "message": "前往 wappalyzer.com" }, + "options": { "message": "選項" }, + "optionsSave": { "message": "保存選項" }, + "optionsSaved": { "message": "選項已保存" }, + "optionUpgradeMessage": { "message": "通知我更新內容" }, + "optionDynamicIcon": { "message": "使用應用程式圖示取代 Wappalyzer 的 logo" }, + "optionTracking": { "message": "匿名傳送應用程式偵測報告至 wappalyzer.com 作為研究用途" }, + "nothingToDo": { "message": "這裡什麼也沒有。" }, + "noAppsDetected": { "message": "未偵測到應用程式。" }, + "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": "Issue 追蹤" }, + "categoryName14": { "message": "影音撥放器" }, + "categoryName15": { "message": "評論系統" }, + "categoryName16": { "message": "驗證碼" }, + "categoryName17": { "message": "字型" }, + "categoryName18": { "message": "網頁框架" }, + "categoryName19": { "message": "其他" }, + "categoryName20": { "message": "編輯器" }, + "categoryName21": { "message": "學習管理系統(LMS)" }, + "categoryName22": { "message": "網頁伺服器" }, + "categoryName23": { "message": "快取工具" }, + "categoryName24": { "message": "高級文字編輯器" }, + "categoryName25": { "message": "JavaScript 圖形庫" }, + "categoryName26": { "message": "行動框架" }, + "categoryName27": { "message": "程式語言" }, + "categoryName28": { "message": "作業系統" }, + "categoryName29": { "message": "搜尋引擎" }, + "categoryName30": { "message": "網路信箱" }, + "categoryName31": { "message": "CDN" }, + "categoryName32": { "message": "行銷自動化" }, + "categoryName33": { "message": "網頁伺服器擴充功能" }, + "categoryName34": { "message": "資料庫" }, + "categoryName35": { "message": "地圖" }, + "categoryName36": { "message": "廣告聯播" }, + "categoryName37": { "message": "網路服務" }, + "categoryName38": { "message": "媒體伺服器" }, + "categoryName39": { "message": "網路攝影機" }, + "categoryName40": { "message": "印表機" }, + "categoryName41": { "message": "付款處理" }, + "categoryName42": { "message": "標籤管理" }, + "categoryName43": { "message": "付費牆" }, + "categoryName44": { "message": "建立/整合系統" }, + "categoryName45": { "message": "監控與資料擷取系統(SCADA)" }, + "categoryName46": { "message": "遠端" }, + "categoryName47": { "message": "開發工具" }, + "categoryName48": { "message": "網路儲存設備" }, + "categoryName49": { "message": "Feed 閱讀器" }, + "categoryName50": { "message": "文件管理系統" }, + "categoryName51": { "message": "著陸頁產生器" }, + "categoryName52": { "message": "線上聊天" }, + "categoryName53": { "message": "客戶關係管理系統(CRM)" } +} From b458d67f83b4007c5baf5232a71dcb56d680a18b Mon Sep 17 00:00:00 2001 From: Lay Date: Tue, 3 Oct 2017 17:53:01 +0800 Subject: [PATCH 006/117] Update messages.json --- src/drivers/webextension/_locales/zh_TW/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/webextension/_locales/zh_TW/messages.json b/src/drivers/webextension/_locales/zh_TW/messages.json index 4ebdb5da4..0a15ed336 100644 --- a/src/drivers/webextension/_locales/zh_TW/messages.json +++ b/src/drivers/webextension/_locales/zh_TW/messages.json @@ -40,7 +40,7 @@ "categoryName28": { "message": "作業系統" }, "categoryName29": { "message": "搜尋引擎" }, "categoryName30": { "message": "網路信箱" }, - "categoryName31": { "message": "CDN" }, + "categoryName31": { "message": "內容傳遞網路(CDN)" }, "categoryName32": { "message": "行銷自動化" }, "categoryName33": { "message": "網頁伺服器擴充功能" }, "categoryName34": { "message": "資料庫" }, From 19ffd8cedb1fe6c9ea028712e3e6267637e0eaef Mon Sep 17 00:00:00 2001 From: hfrid Date: Thu, 5 Oct 2017 09:56:36 +0200 Subject: [PATCH 007/117] Update apps.json Corrected identifier for tictail, previous one was not working. --- src/apps.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/apps.json b/src/apps.json index 9ab09dcfb..b8ee542e3 100644 --- a/src/apps.json +++ b/src/apps.json @@ -8360,9 +8360,7 @@ "cats": [ "6" ], - "script": [ - "https:\\/\\/tictail\\.com" - ], + "html": "]*tictail\\.com", "icon": "tictail.png", "website": "https://tictail.com" }, From 0fcbeaeb59aaacd9148a11bf80b44128b4c418cc Mon Sep 17 00:00:00 2001 From: Robert Went Date: Fri, 6 Oct 2017 02:56:30 +0100 Subject: [PATCH 008/117] Adds Mautic Marketing automation https://www.mautic.org/ --- src/apps.json | 9 +++++++++ src/icons/mautic.svg | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/icons/mautic.svg diff --git a/src/apps.json b/src/apps.json index 9ab09dcfb..a072016fc 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10782,6 +10782,15 @@ "icon": "raychat.svg", "script": "app\\.raychat\\.io/scripts/js", "website": "https://raychat.io" + }, + "Mautic": { + "cats": [ + "32" + ], + "env": "^Mautic$", + "icon": "mautic.svg", + "script": "[^a-z]mtc.*\\.js", + "website": "https://www.mautic.org/" } }, "categories": { diff --git a/src/icons/mautic.svg b/src/icons/mautic.svg new file mode 100644 index 000000000..9ddd782af --- /dev/null +++ b/src/icons/mautic.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + From 9aa3397799fa5264389b6791a985f8c54dac0b3b Mon Sep 17 00:00:00 2001 From: Robert Went Date: Fri, 6 Oct 2017 03:09:00 +0100 Subject: [PATCH 009/117] copy/pasted from another entry. Not sure what it is for. Let me know if it's needed for anything. --- src/apps.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index a072016fc..2c5f673a7 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10787,7 +10787,6 @@ "cats": [ "32" ], - "env": "^Mautic$", "icon": "mautic.svg", "script": "[^a-z]mtc.*\\.js", "website": "https://www.mautic.org/" From 771632fccb8a35ed6f2bc6b5a01b86411c460701 Mon Sep 17 00:00:00 2001 From: Thomas Schoffelen Date: Sat, 7 Oct 2017 01:16:50 +0200 Subject: [PATCH 010/117] Added Includable web framework detection. --- src/apps.json | 10 ++++++++++ src/icons/Includable.svg | 14 ++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/icons/Includable.svg diff --git a/src/apps.json b/src/apps.json index 9ab09dcfb..69715e406 100644 --- a/src/apps.json +++ b/src/apps.json @@ -3696,6 +3696,16 @@ "implies": "Windows Server", "website": "http://www.iis.net" }, + "Includable": { + "cats": [ + "18" + ], + "headers": { + "X-Includable-Version": "" + }, + "icon": "Includable.svg", + "website": "http://includable.com" + }, "INFOnline": { "cats": [ "10" diff --git a/src/icons/Includable.svg b/src/icons/Includable.svg new file mode 100644 index 000000000..f65da2ed5 --- /dev/null +++ b/src/icons/Includable.svg @@ -0,0 +1,14 @@ + + + + Includable + Created with Sketch. + + + + + + + + + \ No newline at end of file From 0c909ae0248a49916c0719253f0dc46695b5e529 Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Sun, 8 Oct 2017 15:24:41 +1100 Subject: [PATCH 011/117] Fix bookmarklet driver --- README.md | 21 +- src/drivers/bookmarklet/driver.js | 270 ++++--- src/drivers/npm/package.json | 2 +- src/drivers/webextension/js/driver.js | 2 +- src/drivers/webextension/manifest.edge.json | 2 +- src/drivers/webextension/manifest.json | 2 +- yarn.lock | 789 +------------------- 7 files changed, 133 insertions(+), 955 deletions(-) diff --git a/README.md b/README.md index ae5627f3d..f7b9da30c 100644 --- a/README.md +++ b/README.md @@ -10,26 +10,9 @@ technologies used on websites. It detects [analytics tools](https://wappalyzer.com/categories/analytics) and [many more](https://wappalyzer.com/applications). -Refer to the [wiki](https://github.com/AliasIO/Wappalyzer/wiki) for -[screenshots](https://github.com/AliasIO/Wappalyzer/wiki/Screenshots), information on how to -[contribute](https://github.com/AliasIO/Wappalyzer/wiki/Contributing) and -[more](https://github.com/AliasIO/Wappalyzer/wiki/_pages). - *Licensed under the [GPL](https://github.com/AliasIO/Wappalyzer/blob/master/LICENSE).* -## Getting Started - -Install [Docker](https://www.docker.com/) on your system first. - -```shell -$ git clone https://github.com/AliasIO/Wappalyzer.git -$ cd Wappalyzer -$ ./run links -``` - -The `links` command creates symlinks for files that shared between the various -drivers (i.e. different platforms). If your file system does not support -symlinks, you need to manually copy these files (see [`bin/links`](https://github.com/AliasIO/Wappalyzer/blob/master/bin/links)). +## Developer Documentation -Please run `./run validate` before submitting a pull request. +Read the [Developer Documentation](https://wappalyzer.com/docs) on how to get started. diff --git a/src/drivers/bookmarklet/driver.js b/src/drivers/bookmarklet/driver.js index 28cfca9c1..76c2ea343 100644 --- a/src/drivers/bookmarklet/driver.js +++ b/src/drivers/bookmarklet/driver.js @@ -1,158 +1,140 @@ /** - * WebExtension driver + * Bookmarklet driver */ /** global: wappalyzer */ /** global: XMLHttpRequest */ (function() { - if ( typeof wappalyzer === 'undefined' ) { - return; - } - - var - w = wappalyzer, - debug = true, - d = window.document, - container = d.getElementById('wappalyzer-container'), - domain = window.top.location.host, - url = window.top.location.href.replace(/#.*$/, ''), - hasOwn = Object.prototype.hasOwnProperty; - - w.driver = { - timeout: 1000, - - /** - * Log messages to console - */ - log: function(args) { - if ( debug && console != null && console[args.type] != null ) { - console[args.type](args.message); - } - }, - - /** - * Initialize - */ - init: function() { - w.driver.getEnvironmentVars(); - w.driver.getResponseHeaders(); - }, - - getEnvironmentVars: function() { - w.log('func: getEnvironmentVars'); - - var i, env = []; - - for ( i in window ) { - env.push(i); - } - - w.analyze(domain, url, { html: d.documentElement.innerHTML, env: env }); - }, - - getResponseHeaders: function() { - w.log('func: getResponseHeaders'); - - var xhr = new XMLHttpRequest(); - - xhr.open('GET', url, true); - - xhr.onreadystatechange = function() { - if ( xhr.readyState === 4 && xhr.status ) { - var headers = xhr.getAllResponseHeaders().split("\n"); - - if ( headers.length > 0 && headers[0] != '' ) { - w.log('responseHeaders: ' + xhr.getAllResponseHeaders()); - - var responseHeaders = {}; - - headers.forEach(function(line) { - var name, value; - - if ( line ) { - name = line.substring(0, line.indexOf(': ')); - value = line.substring(line.indexOf(': ') + 2, line.length - 1); - - responseHeaders[name.toLowerCase()] = value; - } - }); - - w.analyze(domain, url, { headers: responseHeaders }); - } - } - } - - xhr.send(); - }, - - /** - * Display apps - */ - displayApps: function() { - w.log('func: diplayApps'); - - var - i, - first = true, - app, - category, - html; - - html = - '' + - 'Close' + - '' + - '
'; - - if ( detected[url] != null && Object.keys(detected[url]).length ) { - for ( app in detected[url] ) { - if ( !hasOwn.call(detected[url], app) ) { - continue; - } - - html += - '
' + - '' + - '' + - ' ' + app + - '' + - ''; - - for ( i in w.apps[app].cats ) { - if ( !hasOwn.call(w.apps[app].cats, i) ) { - continue; - } - - category = w.categories[w.apps[app].cats[i]].name; - - html += '' + category + ''; - } + const container = document.getElementById('wappalyzer-container'); + const domain = top.location.host; + const url = top.location.href.replace(/#.*$/, ''); + const hasOwn = Object.prototype.hasOwnProperty; + + /** + * Log messages to console + */ + wappalyzer.driver.log = (message, source, type) => { + console.log('[wappalyzer ' + type + ']', '[' + source + ']', message); + }; + + function getEnvironmentVars() { + wappalyzer.log('func: getEnvironmentVars'); - html += '
'; + var env = []; + + for ( let i in window ) { + env.push(i); + } + + wappalyzer.analyze(domain, url, { + html: document.documentElement.innerHTML, + env: env + }); + } + + function getResponseHeaders() { + wappalyzer.log('func: getResponseHeaders'); + + var xhr = new XMLHttpRequest(); + + xhr.open('GET', url, true); + + xhr.onreadystatechange = () => { + if ( xhr.readyState === 4 && xhr.status ) { + var headers = xhr.getAllResponseHeaders().split("\n"); + + if ( headers.length > 0 && headers[0] != '' ) { + wappalyzer.log('responseHeaders: ' + xhr.getAllResponseHeaders()); + + var responseHeaders = {}; + + headers.forEach(line => { + var name, value; + + if ( line ) { + name = line.substring(0, line.indexOf(': ')); + value = line.substring(line.indexOf(': ') + 2, line.length - 1); + + responseHeaders[name.toLowerCase()] = value; + } + }); + + wappalyzer.analyze(domain, url, { + headers: responseHeaders + }); + } + } + } + + xhr.send(); + } + + /** + * Display apps + */ + wappalyzer.driver.displayApps = detected => { + wappalyzer.log('func: diplayApps'); + + var first = true; + var app; + var category; + var html; + + html = + '' + + 'Close' + + '' + + '
'; + + if ( detected != null && Object.keys(detected).length ) { + for ( app in detected ) { + if ( !hasOwn.call(detected, app) ) { + continue; + } + + html += + '
' + + '' + + '' + + ' ' + app + + '' + + ''; + + for ( let i in wappalyzer.apps[app].cats ) { + if ( !hasOwn.call(wappalyzer.apps[app].cats, i) ) { + continue; + } + + category = wappalyzer.categories[wappalyzer.apps[app].cats[i]].name; + + html += '' + category + ''; + } - first = false; - } - } else { - html += '
No applications detected
'; - } + html += '
'; + + first = false; + } + } else { + html += '
No applications detected
'; + } - html += '
'; + html += '
'; - container.innerHTML = html; - }, + container.innerHTML = html; + }, + + /** + * Open a tab + */ + function openTab(args) { + open(args.url); + } - /** - * Go to URL - */ - goToURL: function(args) { - window.open(args.url); - }, + function slugify(string) { + return string.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/--+/g, '-').replace(/(?:^-|-$)/, ''); + } - slugify: function(string) { - return string.toLowerCase().replace(/ /g, '-').replace(/[^\w-]/g, ''); - } - }; - - w.driver.init(); + getEnvironmentVars(); + getResponseHeaders(); })(); diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 921016f88..39d9e17ac 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.1.2", + "version": "5.1.3", "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 e9c6c97a6..0c2cd2ff6 100644 --- a/src/drivers/webextension/js/driver.js +++ b/src/drivers/webextension/js/driver.js @@ -101,7 +101,7 @@ getOption('version') .then(upgradeMessage => { if ( upgradeMessage ) { openTab({ - url: wappalyzer.config.websiteURL + 'upgraded', + url: wappalyzer.config.websiteURL + 'upgraded?v' + version, background: true }); } diff --git a/src/drivers/webextension/manifest.edge.json b/src/drivers/webextension/manifest.edge.json index 50cb00946..38876c9f6 100644 --- a/src/drivers/webextension/manifest.edge.json +++ b/src/drivers/webextension/manifest.edge.json @@ -4,7 +4,7 @@ "author": "Elbert Alias", "homepage_url": "https://wappalyzer.com/", "description": "Identify web technologies", - "version": "5.1.2", + "version": "5.1.3", "default_locale": "en", "manifest_version": 2, "icons": { diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index 957da7969..c679dd923 100644 --- a/src/drivers/webextension/manifest.json +++ b/src/drivers/webextension/manifest.json @@ -4,7 +4,7 @@ "author": "Elbert Alias", "homepage_url": "https://wappalyzer.com/", "description": "Identify web technologies", - "version": "5.1.2", + "version": "5.1.3", "default_locale": "en", "manifest_version": 2, "icons": { diff --git a/yarn.lock b/yarn.lock index 74c1d9e1f..c87638c01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,813 +2,26 @@ # yarn lockfile v1 -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -async@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - dependencies: - tweetnacl "^0.14.3" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - -chalk@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -colors@1.0.x: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" - dependencies: - delayed-stream "~1.0.0" - -commander@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" - -concat-stream@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" - dependencies: - inherits "~2.0.1" - readable-stream "~2.0.0" - typedarray "~0.0.5" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -cycle@1.0.x: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -debug@0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" - -decamelize@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - dependencies: - is-arrayish "^0.2.1" - -es6-promise@~4.0.3: - version "4.0.5" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.0.5.tgz#7882f30adde5b240ccfa7f7d78c548330951ae42" - -escape-string-regexp@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -extend@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -extract-zip@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.5.0.tgz#92ccf6d81ef70a9fa4c1747114ccef6d8688a6c4" - dependencies: - concat-stream "1.5.0" - debug "0.7.4" - mkdirp "0.5.0" - yauzl "2.4.1" - -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" - -eyes@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - -fd-slicer@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" - dependencies: - pend "~1.2.0" - file-type@3.8.*: version "3.8.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.8.0.tgz#bcadf6a8f624ebe4a10e5ad26727b6b93f16d78d" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -fs-extra@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -hasha@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1" - dependencies: - is-stream "^1.0.1" - pinkie-promise "^2.0.0" - -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hosted-git-info@^2.1.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" - 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" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -inherits@~2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-my-json-valid@^2.12.4: - version "2.16.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - -is-stream@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - is-svg@2.0.*: version "2.0.1" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.0.1.tgz#f93ab3bf1d6bbca30e9753cd3485b1300eebc013" dependencies: html-comment-regex "^1.1.0" -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isstream@0.1.x, isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - -jsprim@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" - dependencies: - assert-plus "1.0.0" - extsprintf "1.0.2" - json-schema "0.2.3" - verror "1.3.6" - -kew@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: - graceful-fs "^4.1.9" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -linerstream@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/linerstream/-/linerstream-0.1.4.tgz#5de7bf69faa2b0f9d85e8332099b70e419a845d5" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -lodash.assign@^4.0.3, lodash.assign@^4.0.6: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - -mime-db@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" - -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.15" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" - dependencies: - mime-db "~1.27.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -mkdirp@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" - dependencies: - minimist "0.0.8" - -normalize-package-data@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - -phantom@^2.0.x: - version "2.1.21" - resolved "https://registry.yarnpkg.com/phantom/-/phantom-2.1.21.tgz#76b7790ff62cf09fbe922ae844b9fb745ce8bb28" - dependencies: - linerstream "^0.1.4" - phantomjs-prebuilt "^2.1.4" - winston "^2.2.0" - -phantomjs-prebuilt@^2.1.4: - version "2.1.14" - resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz#d53d311fcfb7d1d08ddb24014558f1188c516da0" - dependencies: - es6-promise "~4.0.3" - extract-zip "~1.5.0" - fs-extra "~1.0.0" - hasha "~2.2.0" - kew "~0.7.0" - progress "~1.1.8" - request "~2.79.0" - request-progress "~2.0.1" - which "~1.2.10" - -pify@^2.0.0, pify@^2.3.0: +pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -progress@~1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -qs@~6.3.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" - read-chunk@2.0.*: version "2.0.0" resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.0.0.tgz#3246e877829116cec059674c4d5f300f7a9261f3" dependencies: pify "^2.3.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readable-stream@~2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -request-progress@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08" - dependencies: - throttleit "^1.0.0" - -request@~2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - -"semver@2 || 3 || 4 || 5": - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" - dependencies: - spdx-license-ids "^1.0.2" - -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" - -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" - -sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -svg2png-many@*: - version "0.0.7" - resolved "https://registry.yarnpkg.com/svg2png-many/-/svg2png-many-0.0.7.tgz#e478f65fa38ca0f23a21f9519a85025e054b5552" - dependencies: - phantom "^2.0.x" - yargs "^4.6.0" - -throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - -tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" - dependencies: - punycode "^1.4.1" - -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -typedarray@~0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -uuid@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" - -validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" - dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" - -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" - dependencies: - extsprintf "1.0.2" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - -which@~1.2.10: - version "1.2.14" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" - dependencies: - isexe "^2.0.0" - -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - -winston@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/winston/-/winston-2.3.1.tgz#0b48420d978c01804cf0230b648861598225a119" - dependencies: - async "~1.0.0" - colors "1.0.x" - cycle "1.0.x" - eyes "0.1.x" - isstream "0.1.x" - stack-trace "0.0.x" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -xtend@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.0.6" - -yargs@^4.6.0: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.0.3" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.1" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^2.4.1" - -yauzl@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" - dependencies: - fd-slicer "~1.0.1" From 8b7c32438b090c37df60e9e19d9f92227e79f3f7 Mon Sep 17 00:00:00 2001 From: Shayan Araghi Date: Sun, 8 Oct 2017 10:05:38 +0330 Subject: [PATCH 012/117] update rayo cats and implies --- src/apps.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/apps.json b/src/apps.json index 9ab09dcfb..0d9782d7f 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6870,12 +6870,11 @@ }, "Rayo": { "cats": [ - "6" + "1" ], "env": "^Rayo", "icon": "Rayo.png", - "implies": [ "AngularJS", "Microsoft ASP.NET", "Twitter Bootstrap", "jQuery", "Underscore.js", "Moment.js", - "Font Awesome", "Google Maps", "Modernizr", "Semantic-ui" ], + "implies": [ "AngularJS", "Microsoft ASP.NET" ], "meta": { "generator": "^Rayo" }, From 3a75c73087530d51d4eb794fc637b29a2f9e4c4e Mon Sep 17 00:00:00 2001 From: Robert Went Date: Mon, 9 Oct 2017 18:39:23 +0100 Subject: [PATCH 013/117] adds env for MauticTrackingObject --- src/apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps.json b/src/apps.json index 2c5f673a7..44fcef1b4 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10787,6 +10787,7 @@ "cats": [ "32" ], + "env": "^MauticTrackingObject$", "icon": "mautic.svg", "script": "[^a-z]mtc.*\\.js", "website": "https://www.mautic.org/" From 5b6c06a81bc60d08d50121171495a7a794dc0ce2 Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Fri, 13 Oct 2017 13:01:08 +1100 Subject: [PATCH 014/117] Fix WooCommerce detection --- bin/build | 17 ++++++++++++++++- src/apps.json | 4 ++-- src/drivers/npm/package.json | 2 +- src/drivers/webextension/css/popup.css | 1 + src/drivers/webextension/images/icon_64.png | Bin 2406 -> 0 bytes src/drivers/webextension/manifest.edge.json | 2 +- src/drivers/webextension/manifest.json | 2 +- src/wappalyzer.js | 1 + 8 files changed, 23 insertions(+), 6 deletions(-) delete mode 100644 src/drivers/webextension/images/icon_64.png diff --git a/bin/build b/bin/build index 9f38e3454..5ca0968a0 100755 --- a/bin/build +++ b/bin/build @@ -49,7 +49,22 @@ pushd $webextension_dir > /dev/null sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$version\"/" manifest.json -zip -qr ../../../build/wappalyzer_webextension.zip . +zip -qr ../../../build/wappalyzer_webextension.zip . \ + -x images/icon_44.png \ + -x images/icon_50.png \ + -x images/icon_150.png \ + -x js/ms_\*.js \ + -x manifest.edge.json \ + -x \*.log \ + -x \*.lock \ + -x \*.gitignore \ + -x \*.gitkeep \ + -x \*.js.map \ + -x \*.min.js \ + -x \*.yarn-integrity \ + -x \*package.json \ + -x \*LICENSE \ + -x \*README.md popd > /dev/null diff --git a/src/apps.json b/src/apps.json index 9ab09dcfb..4cbf26b43 100644 --- a/src/apps.json +++ b/src/apps.json @@ -5272,7 +5272,7 @@ "1", "6" ], - "html": "(?:]*mg-(?:core|plugins|templates)", + "html": "(?:]*(?:src=|href=)[\"'][^\"]*mg-(?:core|plugins|templates)", "icon": "Moguta.CMS.png", "implies": "PHP", "website": "http://moguta.ru" @@ -9333,7 +9333,7 @@ "cats": [ "6" ], - "env": "woocommerce", + "env": "^woocommerce_params$", "html": " + + + + + + + + From 04c81b8c763acd1cfbbabf164f322a94c6ef5db6 Mon Sep 17 00:00:00 2001 From: Junior Dussouillez Date: Fri, 13 Oct 2017 19:14:36 +0200 Subject: [PATCH 020/117] Fix RaphaelJS website --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 7d2ef58b6..408790c45 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6864,7 +6864,7 @@ "env": "^Raphael$", "icon": "Raphael.png", "script": "raphael.*\\.js", - "website": "http://raphaeljs.com" + "website": "http://dmitrybaranovskiy.github.io/raphael/" }, "Rapid Logic": { "cats": [ From ac3577f8b3127ec0040d2b88d6ebce5809708ead Mon Sep 17 00:00:00 2001 From: enginkartal Date: Sat, 14 Oct 2017 00:07:24 +0300 Subject: [PATCH 021/117] Added Turkish translation --- .../webextension/_locales/tr/messages.json | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/drivers/webextension/_locales/tr/messages.json diff --git a/src/drivers/webextension/_locales/tr/messages.json b/src/drivers/webextension/_locales/tr/messages.json new file mode 100644 index 000000000..1bb2aa9b5 --- /dev/null +++ b/src/drivers/webextension/_locales/tr/messages.json @@ -0,0 +1,66 @@ +{ + "github": { "message": "GitHub'da Wappalyzer'ı Forkla!" }, + "twitter": { "message": "Wappalyzer'ı Twitter'da takip et" }, + "website": { "message": "Wappalyzer.com'a git" }, + "options": { "message": "Ayarlar" }, + "optionsSave": { "message": "Ayarları kaydet" }, + "optionsSaved": { "message": "Kaydedildi" }, + "optionUpgradeMessage": { "message": "Güncellemeleri göster" }, + "optionDynamicIcon": { "message": "Wappalyzer logosu yerine uygulama simgesi kullan" }, + "optionTracking": { "message": "Anonim olarak tespit edilen uygulamalar hakkında wappalyzer.com'a araştırma raporları gönderin" }, + "nothingToDo": { "message": "Burada yapacak birşey yok." }, + "noAppsDetected": { "message": "Uygulamalar tespit edilemedi." }, + "categoryName1": { "message": "CMS" }, + "categoryName2": { "message": "Mesaj Tahtası" }, + "categoryName3": { "message": "Veritabanı Yöneticisi" }, + "categoryName4": { "message": "Doküman Aracı" }, + "categoryName5": { "message": "Widget" }, + "categoryName6": { "message": "E-Ticaret" }, + "categoryName7": { "message": "Foto Galerisi" }, + "categoryName8": { "message": "Wikis" }, + "categoryName9": { "message": "Hosting Panelleri" }, + "categoryName10": { "message": "Analitik" }, + "categoryName11": { "message": "Blog" }, + "categoryName12": { "message": "JavaScript Framework" }, + "categoryName13": { "message": "Hata Takibi" }, + "categoryName14": { "message": "Video Oynatıcı" }, + "categoryName15": { "message": "Yorum Sistemi" }, + "categoryName16": { "message": "Captcha" }, + "categoryName17": { "message": "Font Script" }, + "categoryName18": { "message": "Web Framework" }, + "categoryName19": { "message": "Çeşitli" }, + "categoryName20": { "message": "Editor" }, + "categoryName21": { "message": "LMS" }, + "categoryName22": { "message": "Web Server" }, + "categoryName23": { "message": "Öncellek Aracı" }, + "categoryName24": { "message": "Zengin Metin Editörü" }, + "categoryName25": { "message": "JavaScript Grafikleri" }, + "categoryName26": { "message": "Mobil Framework" }, + "categoryName27": { "message": "Programlama Dilleri" }, + "categoryName28": { "message": "İşletim sistemi" }, + "categoryName29": { "message": "Arama Motoru" }, + "categoryName30": { "message": "Web Posta" }, + "categoryName31": { "message": "CDN" }, + "categoryName32": { "message": "Pazarlama Otomasyonu" }, + "categoryName33": { "message": "Web Sunucu Eklentileri" }, + "categoryName34": { "message": "Veritabanı" }, + "categoryName35": { "message": "Harita" }, + "categoryName36": { "message": "Reklamcılık Ağı" }, + "categoryName37": { "message": "Ağ Servisi" }, + "categoryName38": { "message": "Medya Sunucusu" }, + "categoryName39": { "message": "Bilgisayar Kamerası" }, + "categoryName40": { "message": "Yazıcı" }, + "categoryName41": { "message": "Ödeme İşlemcisi" }, + "categoryName42": { "message": "Etiket Yöneticisi" }, + "categoryName43": { "message": "Ödeme Duvarı" }, + "categoryName44": { "message": "Build/CI Sistemi" }, + "categoryName45": { "message": "SCADA Sistemi" }, + "categoryName46": { "message": "Uzaktan Erişim" }, + "categoryName47": { "message": "Geliştirme Aracı" }, + "categoryName48": { "message": "Ağ Depolama" }, + "categoryName49": { "message": "Besleme Okuyucuları" }, + "categoryName50": { "message": "Doküman Yönetim Sistemleri" }, + "categoryName51": { "message": "Açılış Sayfası Oluşturucu" }, + "categoryName52": { "message": "Canlı Sohbet" }, + "categoryName53": { "message": "CRM" } +} From db038421b864e8fe0e3fc431d36c92a1578fdf52 Mon Sep 17 00:00:00 2001 From: Robert Went Date: Sat, 14 Oct 2017 04:05:09 +0100 Subject: [PATCH 022/117] Adds new SEO category Related to #1499 Adds SEO category and moves Yoast (wordpress plugin) from marketing automation to seo. I can think of another - sh404sef for Joomla that will fit in the same category, as well as all-in-one-seo for wp --- src/apps.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/apps.json b/src/apps.json index 9ab09dcfb..2f5d66f33 100644 --- a/src/apps.json +++ b/src/apps.json @@ -9641,7 +9641,7 @@ }, "Yoast SEO": { "cats": [ - "32" + "54" ], "html": [ " + + +ac + + + + From 3aa8828217ca92a5d3a725bdd37c2c31e67ac8dc Mon Sep 17 00:00:00 2001 From: Robert Went Date: Thu, 19 Oct 2017 02:35:59 +0100 Subject: [PATCH 026/117] Adds Color Mautic Icon --- src/icons/mautic.svg | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/src/icons/mautic.svg b/src/icons/mautic.svg index 9ddd782af..b0f5170b6 100644 --- a/src/icons/mautic.svg +++ b/src/icons/mautic.svg @@ -1,22 +1,17 @@ - + - - - - - - - - + width="468px" height="468px" viewBox="0 0 468 468" enable-background="new 0 0 468 468" xml:space="preserve"> + + + + From e1c74e6ae5a3642932f188d93276657a1b933b8c Mon Sep 17 00:00:00 2001 From: Arnaud Ligny Date: Fri, 20 Oct 2017 17:32:18 +0200 Subject: [PATCH 027/117] Add PHPoole. --- src/apps.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/apps.json b/src/apps.json index 7d2ef58b6..c7d7edf1e 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6352,6 +6352,17 @@ "script": "/phenomic.browser.[a-f0-9]+.js", "website": "https://phenomic.io/" }, + "PHPoole": { + "cats": [ + "1", + "11" + ], + "icon": "PHPoole.png", + "meta": { + "generator": "PHPoole" + }, + "website": "https://phpoole.org" + }, "Phusion Passenger": { "cats": [ "22" From 9aa3029ee168ad7c9495d07e6a523406fdfc4c70 Mon Sep 17 00:00:00 2001 From: Arnaud Ligny Date: Fri, 20 Oct 2017 17:34:50 +0200 Subject: [PATCH 028/117] Add files via upload --- src/icons/PHPoole.png | Bin 0 -> 68189 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/icons/PHPoole.png diff --git a/src/icons/PHPoole.png b/src/icons/PHPoole.png new file mode 100644 index 0000000000000000000000000000000000000000..7926249818fb7937cb41cc2f20d104bff8ca8cf5 GIT binary patch literal 68189 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 O-!T=9!>NbNZ~O-b(t8^K literal 0 HcmV?d00001 From 7ad3681ae661f88a9c3d25ed65f19e88f6d877e7 Mon Sep 17 00:00:00 2001 From: Arnaud Ligny Date: Tue, 24 Oct 2017 12:31:32 +0200 Subject: [PATCH 029/117] "PHPoole" -> "^PHPoole$" --- src/apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps.json b/src/apps.json index c7d7edf1e..a8e1ef78b 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6352,14 +6352,14 @@ "script": "/phenomic.browser.[a-f0-9]+.js", "website": "https://phenomic.io/" }, - "PHPoole": { + "PHPoole": { "cats": [ "1", "11" ], "icon": "PHPoole.png", "meta": { - "generator": "PHPoole" + "generator": "^PHPoole$" }, "website": "https://phpoole.org" }, From 9842624ecc62bd72bc39efecce2c454021845fe9 Mon Sep 17 00:00:00 2001 From: q-- Date: Wed, 25 Oct 2017 12:58:49 +0200 Subject: [PATCH 030/117] Add CoinHive and CoinHive Captcha --- src/apps.json | 19 +++++++++++++++++++ src/icons/CoinHive.svg | 10 ++++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/icons/CoinHive.svg diff --git a/src/apps.json b/src/apps.json index 7d2ef58b6..39c2ebe6f 100644 --- a/src/apps.json +++ b/src/apps.json @@ -1571,6 +1571,25 @@ "icon": "CodeMirror.png", "website": "http://codemirror.net" }, + "CoinHive": { + "cats": [ + "19" + ], + "env": "^CoinHive$", + "script": "\\/(?:coinhive|(authedmine))(?:\\.min)?\\.js\\;version:\\1?opt-in:", + "url": "https?://cnhv.co/", + "icon": "CoinHive.svg", + "website": "https://coinhive.com" + }, + "CoinHive Captcha": { + "cats": [ + "16" + ], + "html": "(?:]+class=\"coinhive-captcha[^>]+data-key|]+data-key[^>]+class=\"coinhive-captcha)", + "script": "https?://authedmine.com/(?:lib/captcha|captcha)", + "icon": "CoinHive.svg", + "website": "https://coinhive.com" + }, "Comandia": { "cats": [ "6" diff --git a/src/icons/CoinHive.svg b/src/icons/CoinHive.svg new file mode 100644 index 000000000..d61cede8b --- /dev/null +++ b/src/icons/CoinHive.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file From fddc2c91ce06263200eea2cd3da88950b32c4acb Mon Sep 17 00:00:00 2001 From: biezhi Date: Thu, 26 Oct 2017 13:04:26 +0800 Subject: [PATCH 031/117] Add Blade --- src/apps.json | 10 ++++++++++ src/icons/Blade.png | Bin 0 -> 2127 bytes 2 files changed, 10 insertions(+) create mode 100644 src/icons/Blade.png diff --git a/src/apps.json b/src/apps.json index 7d2ef58b6..956951802 100644 --- a/src/apps.json +++ b/src/apps.json @@ -947,6 +947,16 @@ "icon": "bizweb.png", "website": "https://www.bizweb.vn" }, + "Blade": { + "cats": [ + "18", "22" + ], + "headers": { + "X-Powered-By": "blade-(?:/([\\d.]+))" + }, + "icon": "Blade.png", + "website": "https://lets-blade.com" + }, "Blesta": { "cats": [ "6" diff --git a/src/icons/Blade.png b/src/icons/Blade.png new file mode 100644 index 0000000000000000000000000000000000000000..64ec225c57fd38d8e8db4d97e4a82a1b83787458 GIT binary patch literal 2127 zcmZ{keK^zWAIHBOWDERMB^BHMSyX2fVhSRO{o|${K3{he3PGcq$!Aa!hMyYXA^jP+X?TLuVx2-pv^R;&uT*QVIY_pirlB%({GQRsK9PnEs?et4&9E_k^$sIiT732U$V8uVv6+l8)L>VP_{4(toREI z?xLR*`vuXlHHmaPhi^yGY#{hPblE>ES1twJA4JZT*uDCA9B^6KpLGP-B`>h?AZ1k< zcx^^aBpUNZY=+AYZ=5OB8jct83=IaNJ`D8D*K) ztbZEN-KQ{u<==+lXe__Dxu|d6-cyzW z`pSqx*zX(P6^OKTdJ(RPak6QfV6yU0;HO(1FI&6||5AIn$V@s+PqZXNMT|ydj?@-= z-U_Pi)Syf!1k70T!TpAJy~rl^;ZI5?KMXJ|l}qI47HWV4<(^;qfMl$PfBu42{BoUw zUpV4iI;#BOrard&$Y@o4-VqO~Dp$7o>-Y`;UTLX*K(!_#U!}9s@u6pCoX>S{X8Aqc z%JFJOzB$&m;k>Q67w(y%ec(&vropTb7neU&wVO(HjuDX)zV{!2T5doUWFy6NSvgxQPp*qJeFZ z0~c3$7r}VzZ)s^ZF-Dm5rvegLm7t1Ye>c)k_&IcYbBEEVu9k*({pjV;Pn|;L`O;GS z!pZECeW>2<$MkxYmJZo$Bvw(=pkQw2#|QAc#i#b}X^c*YT8x&)&5gfmm>RsXvv1Vv zzS*0?>m#tg~A9Wj;#bJH@a1QNnJuaJ^AL zA?-!20nPY!-vb>z%^H$sj3pdji;I;^RHL;Gf9bo^y0OuBccUa_Wzn5~ziRo?(a^Ml zZ%41ZweW>!RAb-&{C(~0_c z)dX|h8!^1@(2NiK_de-)>@8J4w+K*NicVk$>O7Y<;zVEE{#~zVyr~KQRFY6#XE7$i zc)k}*O@3&v_)MwZsvDY`5p|}4g1x4vkzUDmFbMG*u9!!OsO-B&Ic}$Hk1a718zkm1 zM5*;E3zI-*wD~D`dd9b?TvH_DHe`xtJFDK42$8I6i z_`bx^acaC?ckVTk({rgTw2Sx%qZq%g*D&zSy?)HERlnYBYrS0a`b;UB>L-4r+nvUj z15$nO?TL36R*EN(Y~pC$O3|29QMlTk>ee`WiV(N7G9wFDl3!Kyd?r}w2eGTrudmCq z_2LE5cnl&voB<^OivjU_LCjvPDHSv(Vz5LEXn-LQF_`-Ne%${E!Z<;!;Mo5!Xlr4l zK?2I!ga}SBFPaw4035<-OolU!$)dB7rbcE)AT$f<3YsEg2&Vp~IOKoFn;=7YJT4K9 zj*gBtVy&s5fK*1DaHih4_cY|ZZOxe)5*ZdqB$7Gw$S}rn9+Bt*p%DOBE^R>ngZX@j}*+qCftHfDnxz5NB2xgBQzX0Ds>K%{|Vv zy6Z{#hmSKAq96kd!ORQ?V!`p@OG*%;_JfZ*D-L>Yf{~e{jSY4{>lxH0|Iqeua{z)_ zp$zB=(9xW5b_AD3XP|juTyz+R8IJWg^EWmzqZ< Date: Thu, 26 Oct 2017 13:11:33 +0800 Subject: [PATCH 032/117] Add Blade --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 956951802..7b9fcc1f9 100644 --- a/src/apps.json +++ b/src/apps.json @@ -952,7 +952,7 @@ "18", "22" ], "headers": { - "X-Powered-By": "blade-(?:/([\\d.]+))" + "X-Powered-By": "blade-(?:\\s([\\w.]+))?\\;version:\\1" }, "icon": "Blade.png", "website": "https://lets-blade.com" From 031ebadda901d3124740aefd0abe9fce4dd6312b Mon Sep 17 00:00:00 2001 From: biezhi Date: Thu, 26 Oct 2017 13:12:21 +0800 Subject: [PATCH 033/117] Add Blade --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 7b9fcc1f9..f29860e12 100644 --- a/src/apps.json +++ b/src/apps.json @@ -952,7 +952,7 @@ "18", "22" ], "headers": { - "X-Powered-By": "blade-(?:\\s([\\w.]+))?\\;version:\\1" + "X-Powered-By": "blade-([\\w.]+)?\\;version:\\1" }, "icon": "Blade.png", "website": "https://lets-blade.com" From fa659a52f852fdac56cf0ec362bad0bc10f9fa67 Mon Sep 17 00:00:00 2001 From: biezhi Date: Thu, 26 Oct 2017 13:19:40 +0800 Subject: [PATCH 034/117] Add Blade --- src/apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps.json b/src/apps.json index f29860e12..1891a3000 100644 --- a/src/apps.json +++ b/src/apps.json @@ -955,6 +955,7 @@ "X-Powered-By": "blade-([\\w.]+)?\\;version:\\1" }, "icon": "Blade.png", + "implies": "Java", "website": "https://lets-blade.com" }, "Blesta": { From eaeb02727aca2d86f3f89e279e767871178a40f8 Mon Sep 17 00:00:00 2001 From: Arnaud Ligny Date: Fri, 27 Oct 2017 17:33:49 +0200 Subject: [PATCH 035/117] Update PHPoole icon. Switch to 64x64. --- src/icons/PHPoole.png | Bin 68189 -> 4842 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/icons/PHPoole.png b/src/icons/PHPoole.png index 7926249818fb7937cb41cc2f20d104bff8ca8cf5..14d1ad3c464af8c151b05a6eaf53dc8c1eb7b7d8 100644 GIT binary patch delta 3831 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 O-!T=9!>NbNZ~O-b(t8^K From 873e9ae2d478b801baf05a2ea455b02e2f274620 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Sat, 28 Oct 2017 14:29:43 -0500 Subject: [PATCH 036/117] Add Amber (web framework) --- src/apps.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/apps.json b/src/apps.json index 7d2ef58b6..06a9d5201 100644 --- a/src/apps.json +++ b/src/apps.json @@ -78,6 +78,17 @@ "icon": "ebis.png", "website": "http://www.ebis.ne.jp" }, + "Amber": { + "cats": [ + "18", + "22" + ], + "headers": { + "X-Powered-By": "Amber" + }, + "icon": "amber.png", + "website": "http://amberframework.org" + }, "AMPcms": { "cats": [ "1" From 1a09a3924b4a506606acea7286d39496e5fbe281 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Sat, 28 Oct 2017 14:30:31 -0500 Subject: [PATCH 037/117] Add Amber (web framework) icon --- src/icons/amber.png | Bin 0 -> 1280 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/icons/amber.png diff --git a/src/icons/amber.png b/src/icons/amber.png new file mode 100644 index 0000000000000000000000000000000000000000..2012e0c00cc21a310c3e632f09dcc4846563f105 GIT binary patch literal 1280 zcmV+b1^@bqP)yZDM^t;7(^F=T3~jU z7?B8FB+<`B^n+jM>tbv8vpc)9^Y_in_j67c z-;Oiie6zD^iajtF^SeL|j}$sB207zYt(tw&%(3-MQcQZ}Lz5Y`Dwr zdEb3tv~)Sg(52QuVe*(o6W^_ssJ1mceRu^I&mk(!92e8wF}&{S&#_{oe{}@pa;kh{ z-%1Y3BVbt_70>GM%uxUU2X#m}7XflWWrwyc*|hr*2AA^{6X1`1bYrbBHA09s2*{Dp zhkxovAgErj;kpMd&p;r)Qu`@5rHs6{2Ih7 zK)gcYDq>iPZyiRlfXg#b*+CEygc;%a6AM;70DvP%P=nN~ah7<##taL}a=~FO<=aI7 zAoU8wuYl|q?Y$}G5e23*QP{3;Ly-3i;FZO}X) znVEPv5!y?ji-1}IJUbazaTG3OwjjvtiL(Fz$^f(lMCq&Q_#hEsaA_(|vo-;z4=|l( zUoXn80i#*{L=+3^fX)J{1;F>>FY~I&Z~&(luriAaF>O$r4Vex|rTx+?62;NCBC10G z5Gjyh#~HC)K!}*xaxQ&W!f_F56CjEwonb+=32+#9MPqs@BeqK` zfU+_`$cau!WWYdAMZEm6j$v^CY3pSo0%;RuX8}7K6Pr#faGo^rvEARO|CYp1NxcVV z#}8@$v**^6Ul|dRWo=>16D&{zL?Fja-!;*MwldrMS8e$iEkDH_1vF6pYNuNn+q+pJ z|5*ToO%Dwib~DP>!|WbF8?AeJGVM2dmaf_D-up~B<Lxntcuch6%DRq~C*5d!50Xcl18A>z{7tU(};?dU~4lo=0! literal 0 HcmV?d00001 From dfca45fb87814ed38d0d747443592e78f99bc84c Mon Sep 17 00:00:00 2001 From: Shahrokh Niakan Date: Sun, 29 Oct 2017 12:18:21 +0330 Subject: [PATCH 038/117] Added Anetwork to apps.json --- src/apps.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 7d2ef58b6..c331a1113 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10806,7 +10806,15 @@ "icon": "mautic.svg", "script": "[^a-z]mtc.*\\.js", "website": "https://www.mautic.org/" - } + }, + "Anetwork": { + "cats": [ + "36" + ], + "icon": "Anetwork.png", + "script": "static-cdn\\.anetwork\\.ir/", + "website": "https://www.anetwork.com" + } }, "categories": { "1": { From 78b5aca378e40768f1b6cedad4b63bb763d05679 Mon Sep 17 00:00:00 2001 From: Shahrokh Niakan Date: Sun, 29 Oct 2017 17:23:54 +0330 Subject: [PATCH 039/117] Added anetwork icon --- src/icons/Anetwork.png | Bin 0 -> 15493 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/icons/Anetwork.png diff --git a/src/icons/Anetwork.png b/src/icons/Anetwork.png new file mode 100644 index 0000000000000000000000000000000000000000..e04cfd1154305706a743581d9ec413b4b4f23696 GIT binary patch literal 15493 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 IoN?g)0T#SOU;qFB literal 0 HcmV?d00001 From 63640e266a526ee201c32e0efef32fbd82904004 Mon Sep 17 00:00:00 2001 From: Shahrokh Niakan Date: Mon, 30 Oct 2017 14:23:21 +0330 Subject: [PATCH 040/117] Fix some minor problem for add anetowrk --- src/apps.json | 2 +- src/icons/Anetwork.png | Bin 15493 -> 3224 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index c331a1113..03a5441fe 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10813,7 +10813,7 @@ ], "icon": "Anetwork.png", "script": "static-cdn\\.anetwork\\.ir/", - "website": "https://www.anetwork.com" + "website": "https://www.anetwork.ir" } }, "categories": { diff --git a/src/icons/Anetwork.png b/src/icons/Anetwork.png index e04cfd1154305706a743581d9ec413b4b4f23696..f28e95dc5a0ba043217d8c53a55d320168c36980 100644 GIT binary patch delta 3218 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 Ef_hRE=Kufz literal 15493 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 IoN?g)0T#SOU;qFB From 24e7620aea21d1c3b4bd8b04cf62ecc8aa691a1a Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Mon, 30 Oct 2017 07:05:23 -0500 Subject: [PATCH 041/117] Use https instead --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 06a9d5201..59ccee7ca 100644 --- a/src/apps.json +++ b/src/apps.json @@ -87,7 +87,7 @@ "X-Powered-By": "Amber" }, "icon": "amber.png", - "website": "http://amberframework.org" + "website": "https://amberframework.org" }, "AMPcms": { "cats": [ From 20f45b36b85b0f6cb826c8d059c9a6d95a798880 Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Mon, 30 Oct 2017 07:06:43 -0500 Subject: [PATCH 042/117] Use regex --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 59ccee7ca..c126cadfa 100644 --- a/src/apps.json +++ b/src/apps.json @@ -84,7 +84,7 @@ "22" ], "headers": { - "X-Powered-By": "Amber" + "X-Powered-By": "^Amber$" }, "icon": "amber.png", "website": "https://amberframework.org" From fbf481ca63c9c19cbd1d6b0da19b76a2ef8da730 Mon Sep 17 00:00:00 2001 From: mattcoady Date: Mon, 30 Oct 2017 10:44:01 -0700 Subject: [PATCH 043/117] Unbounce Embed Script --- src/apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps.json b/src/apps.json index 7d2ef58b6..a232753df 100644 --- a/src/apps.json +++ b/src/apps.json @@ -8748,6 +8748,7 @@ "X-Unbounce-PageId": "" }, "icon": "Unbounce.png", + "script": "ubembed\\.com", "website": "http://unbounce.com" }, "Underscore.js": { From 3c50e3d1a0ffc46183ceb8dcdfe83399454ded5f Mon Sep 17 00:00:00 2001 From: Hyder Bangash Date: Mon, 30 Oct 2017 21:46:57 +0400 Subject: [PATCH 044/117] Switch to svg icon --- src/apps.json | 2 +- src/icons/Joomla.svg | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/icons/Joomla.svg diff --git a/src/apps.json b/src/apps.json index 7d2ef58b6..896ecec51 100644 --- a/src/apps.json +++ b/src/apps.json @@ -4177,7 +4177,7 @@ "X-Content-Encoded-By": "Joomla! ([\\d.]+)\\;version:\\1" }, "html": "(?:]+id=\"wrapper_r\"|<[^>]+(?:feed|components)/com_|]+class=\"pill)\\;confidence:50", - "icon": "Joomla.png", + "icon": "Joomla.svg", "implies": "PHP", "meta": { "generator": "Joomla!(?: ([\\d.]+))?\\;version:\\1" diff --git a/src/icons/Joomla.svg b/src/icons/Joomla.svg new file mode 100644 index 000000000..2d92dffde --- /dev/null +++ b/src/icons/Joomla.svg @@ -0,0 +1,15 @@ + + + + Joomla!-Logo + Created with Sketch. + + + + + \ No newline at end of file From b081dd2a706405b9b9efc319a718bd79915f9597 Mon Sep 17 00:00:00 2001 From: Hyder Bangash Date: Mon, 30 Oct 2017 21:47:43 +0400 Subject: [PATCH 045/117] remove old joomla png icon --- src/icons/Joomla.png | Bin 929 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/icons/Joomla.png diff --git a/src/icons/Joomla.png b/src/icons/Joomla.png deleted file mode 100644 index 9952bb3da96887cab037c628041b39f211798f9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 zcmV;S177@zP)n)9O-wbO;~#haP$b9ZN!9Cu3uga8K^0AIlq zkm+;DWSO9Ab%P1e4;)0hAX)+50EL5d8RRaYaQLJJlnUe;+m;}Y6v#EoX+WPrz%4bh z0;B_zKo$z3K`|%;r-0iaz()hV8wBw90>X6iGy_qYR1S_m?22$VA+U7!)Co&&6~7KE!~QjX$`P^#s6!J^N= zCiT5Y0zWuo>Oj2y9MHqcy-M|V!cfJN`)lR4w1$zVm z9Yz5aOn?%Re~*5wyu66ChMh9TjQukQe29w|?G96*fLUg-S>4My{MWnCn0yX#ldN3j zs`_H?<^-G(1+3&O|r0Dt!j Date: Mon, 30 Oct 2017 22:00:17 +0400 Subject: [PATCH 046/117] replaced prestashop png icon to svg --- src/apps.json | 2 +- src/icons/PrestaShop.png | Bin 1421 -> 0 bytes src/icons/PrestaShop.svg | 119 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+), 1 deletion(-) delete mode 100644 src/icons/PrestaShop.png create mode 100644 src/icons/PrestaShop.svg diff --git a/src/apps.json b/src/apps.json index 896ecec51..beeaea624 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6581,7 +6581,7 @@ "", "" ], - "icon": "PrestaShop.png", + "icon": "PrestaShop.svg", "implies": "PHP", "meta": { "generator": "PrestaShop" diff --git a/src/icons/PrestaShop.png b/src/icons/PrestaShop.png deleted file mode 100644 index 61e163051f88dbdabdf10cd6a74ead0ff6842c1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1421 zcmV;81#gxmZj#7!c|-j1BcqzIEu*I z7`|Z0%Zh}WASAEtu)+eyuq^}_P=F$?A@cg~oXf)8z1)RGK6qyS?6UVf&;NJsdG0yq zt^%;?Woq`10j;QO#E3{hBq7QssvweURiXV&qU~d3NKS(QNHSxhP@)bZ7^n_yjPZ&9 zNCHQq&Se;LMPnUb2!I4iiDp({J|~((x-0+^khWOT3ko$(msB7rw+P8U7c<{4HFhoq zl4cNqcH|2Z6sR8}Iah{YNjQXFp1cYUlQ2-UuO0~Lq5#@CUvS&AtCa{k5T@6dE7~`! zs!88;IPwB$t9?PirQWE5$j94Y^Er8o_TfzFZ~6+;m=7S7Z{%Ea4-a=Z?QzE^yIru; z#SO0He|->M!oA46+sFqIsso^1WIDKW&b{r9yPWab>u=zdHO4x6Z>udlJas{=ZSAny z_*K~Nc18Z5LwxIm5gS0jrKAPNPH6A6n=!NeU@Lq=!yrALjJRXpV}C>xZ0sDd!E!S^ zwGg}Ze2#ZFTH)x4AK^>-MyI6n-30*~K*H_7u68$fci7l($E7QIsIRNn(e3J54EFay zp-|vt(pT6gBmf>lba$wk->GD`@9+Ug*Z|qw=bSzIBPUW&S6jEhoa$nJAzIto7^D7% zZ_rijh}+kS=gq0A>gBku9^?XKvjHmD7wN(>XMQp@jn|l}s=5a0KjomLypl2cM;?Qz z5({)E9KyeU%-(^%-aZuFD#OjT9xgxy8$iy!NEZ`o9vK_Iz_k2MB`y}oa560el9+fj zwW}ct2*v;%ZM8oG(EfubI&F_&K;4Cg=2o1$a2dbeU$9cj^#ai4)z8ldnz3VlnZkV2)C^;jQ_z&#F#w5PpP_ec2s&L(LEhYkkjN-B4QLhx zDCbT={x3JMRGT0`rIpp_dpL~A(O$;9=DZzTZJZbYs_y8kn3|b^VrY~LP|gO(Vqc^i z%imUNU|2q15gdh?xDQzDHkA%4G_+KOh%qh8ty*z41=XxA=qRA zQ*#S+m@$qrw70Q@T+LSdJ*kbh-QxDQDUOMJ; zYIpb!vd&?)$7b$QtYQOP>mGq-Vp=c61M+z7baun>Q)giPku78X_PPz|SsTO)ptg*` z4cYv@pwd~2wVRQcdlxGEpE3ocuRVF9!Kbe7^Lv8lHdiP=PDG3CtnS$-qRJr-#UFl& z{Ja`=ZZY3(xSDS}t{)g(6k=>_Y#w0S`c0#k*SmqOE4!jlSl7Ybj#ukDkT`G;B!y(& zE|lC-J=HvZt`8zmd|-?Mn3$MMX1wFf80T0C$FH6%MbTf6xd#%5rH*8=a{;-{J^%R! z2CC?)Sd<>scE7$DLqmhSh0)U53TZ<8 + + + development + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 99ad8c609ce7853c9bc47cd056e8cd913153c9d2 Mon Sep 17 00:00:00 2001 From: q-- Date: Tue, 31 Oct 2017 10:31:12 +0100 Subject: [PATCH 047/117] Add Fingerprintjs --- src/apps.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/apps.json b/src/apps.json index 7d2ef58b6..f7bb49000 100644 --- a/src/apps.json +++ b/src/apps.json @@ -2636,6 +2636,14 @@ "icon": "Fedora.png", "website": "http://fedoraproject.org" }, + "Fingerprintjs": { + "cats": [ + "12" + ], + "env": "^Fingerprint(\\d)?$\\;version:\\1", + "script": "fingerprint(\\d)?(?:\\.min)?\\.js\\;version:\\1", + "website": "https://valve.github.io/fingerprintjs2/" + }, "Firebase": { "cats": [ "34" From 133af84e1e72fdee11426f7f109e5fe4a529c322 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 31 Oct 2017 17:54:57 +0100 Subject: [PATCH 048/117] Implement version detection for SMF This can be tested [here](https://forum.pfsense.org/) or [here](https://forums.planetvampire.com/bloodlines-tech-support/) --- src/apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps.json b/src/apps.json index 7d2ef58b6..f0d5ee966 100644 --- a/src/apps.json +++ b/src/apps.json @@ -7196,6 +7196,7 @@ "env": "^smf_", "icon": "SMF.png", "implies": "PHP", + "html": "credits/?\" title=\"Simple Machines Forum\" target=\"_blank\" class=\"new_win\">SMF ([0-9.]+)\\;version:\\1", "website": "http://www.simplemachines.org" }, "SOBI 2": { From 65b0d9e150c846ad44202d9a11997f9fc1a35cfd Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 31 Oct 2017 17:57:08 +0100 Subject: [PATCH 049/117] unfuck the indentation --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index f0d5ee966..217bf458e 100644 --- a/src/apps.json +++ b/src/apps.json @@ -7196,7 +7196,7 @@ "env": "^smf_", "icon": "SMF.png", "implies": "PHP", - "html": "credits/?\" title=\"Simple Machines Forum\" target=\"_blank\" class=\"new_win\">SMF ([0-9.]+)\\;version:\\1", + "html": "credits/?\" title=\"Simple Machines Forum\" target=\"_blank\" class=\"new_win\">SMF ([0-9.]+)\\;version:\\1", "website": "http://www.simplemachines.org" }, "SOBI 2": { From 456098b9d97402339fb272aa920fac0f138e9b87 Mon Sep 17 00:00:00 2001 From: Hyder Bangash Date: Thu, 2 Nov 2017 21:02:55 +0400 Subject: [PATCH 050/117] removed sketch meta data --- src/icons/Joomla.svg | 3 --- src/icons/PrestaShop.svg | 3 --- 2 files changed, 6 deletions(-) diff --git a/src/icons/Joomla.svg b/src/icons/Joomla.svg index 2d92dffde..874c0b886 100644 --- a/src/icons/Joomla.svg +++ b/src/icons/Joomla.svg @@ -1,8 +1,5 @@ - - Joomla!-Logo - Created with Sketch.
' + '' + '' + ' ' + app + '' + + ( version ? ' ' + version : '' ) + ( confidence < 100 ? ' (' + confidence + '% sure)' : '' ) + ''; for ( let i in wappalyzer.apps[app].cats ) { From 0de9002cb5a90bc7a4afb505656858e2363aa24e Mon Sep 17 00:00:00 2001 From: jvoisin Date: Fri, 10 Nov 2017 04:35:32 +0100 Subject: [PATCH 066/117] Add a way to fingerprint bitbucket version. (#1810) Sorry, I don't have a publicly exposed version to provide a showcase, but here is the relevant snippet: ```html />CLIENTtestJenk
``` --- src/apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps.json b/src/apps.json index 669ae01a7..0f3ed72b1 100644 --- a/src/apps.json +++ b/src/apps.json @@ -736,6 +736,7 @@ "env": "^bitbucket$", "icon": "Atlassian Bitbucket.svg", "implies": "Python", + "html": "
  • Atlassian Bitbucket v([\\d.]+)<\\;version:\\1", "meta": { "application-name": "Bitbucket" }, From ad10bb3e7e1964ae24f041def0171d12bbf6f280 Mon Sep 17 00:00:00 2001 From: q-- Date: Fri, 10 Nov 2017 04:35:45 +0100 Subject: [PATCH 067/117] Fix Now false positves (#1813) Fixes #1793 --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 0f3ed72b1..4e5c9a506 100644 --- a/src/apps.json +++ b/src/apps.json @@ -5802,7 +5802,7 @@ "22" ], "headers": { - "server": "now" + "server": "^now$" }, "icon": "zeit.svg", "website": "https://zeit.co/now" From b52f833762e366392c0e60852dd1ce561eac071f Mon Sep 17 00:00:00 2001 From: Marc Bodmer Date: Thu, 9 Nov 2017 19:35:57 -0800 Subject: [PATCH 068/117] Update CloudFlare.svg to new logo (#1815) --- src/icons/CloudFlare.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/icons/CloudFlare.svg b/src/icons/CloudFlare.svg index d3cddf486..7ab2a4ede 100644 --- a/src/icons/CloudFlare.svg +++ b/src/icons/CloudFlare.svg @@ -1 +1 @@ - \ No newline at end of file +cloud \ No newline at end of file From 72760596f65c0b61b982af869fb8e4b3ae01969c Mon Sep 17 00:00:00 2001 From: Fernando Poumian Date: Thu, 9 Nov 2017 20:36:58 -0700 Subject: [PATCH 069/117] Add Gatsby.js (#1816) --- src/apps.json | 15 +++++++++++++++ src/icons/Gatsby.svg | 16 ++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/icons/Gatsby.svg diff --git a/src/apps.json b/src/apps.json index 4e5c9a506..f1f55f0c9 100644 --- a/src/apps.json +++ b/src/apps.json @@ -2910,6 +2910,21 @@ "implies": "PHP", "script": "gm_javascript\\.js\\.php", "website": "http://gambio.de" + }, + "Gatsby": { + "cats": [ + "12" + ], + "html": [ + "
    ", + " + + From 4d43eb5f6e6442a0a33d83198b90bef499679e59 Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Sun, 12 Nov 2017 10:41:45 +1100 Subject: [PATCH 079/117] Build v5.1.6 --- src/drivers/npm/package.json | 2 +- src/drivers/webextension/manifest.edge.json | 2 +- src/drivers/webextension/manifest.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 4cd2f6d53..4bf8607a4 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.1.5", + "version": "5.1.6", "author": "Elbert Alias", "license": "GPL-3.0", "repository": { diff --git a/src/drivers/webextension/manifest.edge.json b/src/drivers/webextension/manifest.edge.json index 779c61e40..6c5d4c690 100644 --- a/src/drivers/webextension/manifest.edge.json +++ b/src/drivers/webextension/manifest.edge.json @@ -4,7 +4,7 @@ "author": "Elbert Alias", "homepage_url": "https://www.wappalyzer.com/", "description": "Identify web technologies", - "version": "5.1.5", + "version": "5.1.6", "default_locale": "en", "manifest_version": 2, "icons": { diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index 952c4653b..0abf8abdd 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.1.5", + "version": "5.1.6", "default_locale": "en", "manifest_version": 2, "icons": { From 8db38ca79ad2545b0eeb31f201a0cdb8b5279c8f Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Mon, 13 Nov 2017 13:44:17 +1100 Subject: [PATCH 080/117] Correctly check server response in NPM driver --- src/drivers/npm/driver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 2c3913f75..6d277d511 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -60,7 +60,7 @@ const driver = options => { const browser = new Browser(); browser.visit(url, error => { - if ( !browser.resources['0'].response ) { + if ( !browser.resources['0'] || !browser.resources['0'].response ) { return wappalyzer.log('No response from server', 'driver', 'error'); } From 0ee638d9d33db61213c040dde70941c671c9f5de Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Mon, 13 Nov 2017 16:19:00 +1100 Subject: [PATCH 081/117] Add Travic CI Slack notifications --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 7009b2ce8..2b27a8fa7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,3 +23,6 @@ deploy: env: - CXX=g++-4.8 + +notifications: + slack: wappalyzer:ppXlJRMBDxrKYS9vgVxT7FuH From dcce776156aa0b05d4f22266408cebb80759ebf7 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Mon, 13 Nov 2017 06:21:51 +0100 Subject: [PATCH 082/117] Improve a bit ikiwiki detection (#1824) * Improve a bit ikiwiki detection This can be verified [here](http://blog.spang.cc/posts/hledger_rocks_my_world/). Apparently people may put ikiwiki in the good ol' `/cgi-bin` folder instead of the root of their website. This makes sense, since ikiwiki is a big pile of Perl. * Fix a typo --- src/apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps.json b/src/apps.json index c0159d34e..e42896aa1 100644 --- a/src/apps.json +++ b/src/apps.json @@ -10223,8 +10223,8 @@ "8" ], "html": [ - " Date: Mon, 13 Nov 2017 06:22:03 +0100 Subject: [PATCH 083/117] Add detection of Prism (#1825) This can be tested on its [official website](http://prismjs.com/), and on [this blog](http://matthewturland.com/2014/03/29/ledger-basics-and-habits/) --- src/apps.json | 9 +++++++++ src/icons/Prism.svg | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/icons/Prism.svg diff --git a/src/apps.json b/src/apps.json index e42896aa1..05471b92a 100644 --- a/src/apps.json +++ b/src/apps.json @@ -6716,6 +6716,15 @@ }, "website": "http://www.prestashop.com" }, + "Prism": { + "cats": [ + "19" + ], + "env": "^Prism$", + "icon": "Prism.svg", + "script": "prism\\.js", + "website": "http://prismjs.com" + }, "Project Wonderful": { "cats": [ "36" diff --git a/src/icons/Prism.svg b/src/icons/Prism.svg new file mode 100644 index 000000000..b3257ac00 --- /dev/null +++ b/src/icons/Prism.svg @@ -0,0 +1,22 @@ + + + From dbbb8b7d5f0b64864f1cf3f80a3920430a35ecc8 Mon Sep 17 00:00:00 2001 From: TotPeRo Date: Mon, 13 Nov 2017 07:22:23 +0200 Subject: [PATCH 084/117] fix romanian transaltion (#1826) --- .../webextension/_locales/ro/messages.json | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/drivers/webextension/_locales/ro/messages.json b/src/drivers/webextension/_locales/ro/messages.json index f3987a30a..4723810c0 100644 --- a/src/drivers/webextension/_locales/ro/messages.json +++ b/src/drivers/webextension/_locales/ro/messages.json @@ -6,7 +6,7 @@ "optionsSave": { "message": "Salvează opțiuni" }, "optionsSaved": { "message": "Salvat" }, "optionUpgradeMessage": { "message": "Anunță-mă dacă sunt actualizări" }, - "optionDynamicIcon": { "message": "Use application icon instead of Wappalyzer logo" }, + "optionDynamicIcon": { "message": "Foloseşte icon-ul aplicaţiei în locul logo-ului Wappalyzer" }, "optionTracking": { "message": "Trimite rapoarte anonime despre aplicațiile detectate către wappalyzer.com pentru cercetare" }, "nothingToDo": { "message": "Nimic de făcut pe pagina curentă." }, "noAppsDetected": { "message": "Nici o aplicație detectată." }, @@ -49,15 +49,16 @@ "categoryName41": { "message": "Sistem de plată" }, "categoryName42": { "message": "Manager cuvinte cheie" }, "categoryName43": { "message": "Paywall" }, - "categoryName44": { "message": "Build/CI System" }, - "categoryName45": { "message": "SCADA System" }, - "categoryName46": { "message": "Remote Access" }, - "categoryName47": { "message": "Development Tool" }, - "categoryName48": { "message": "Network Storage" }, - "categoryName49": { "message": "Feed Readers" }, - "categoryName50": { "message": "Document Management Systems" }, + "categoryName44": { "message": "Sistem Build/CI" }, + "categoryName45": { "message": "Sistem SCADA" }, + "categoryName46": { "message": "Acces de la distanță" }, + "categoryName47": { "message": "Instrument de dezvoltare" }, + "categoryName48": { "message": "Stocare în rețea" }, + "categoryName49": { "message": "Cititor de Feed-uri" }, + "categoryName50": { "message": "Sistem de management al documentelor" }, "categoryName51": { "message": "Landing Page Builder" }, - "categoryName52": { "message": "Live Chat" }, + "categoryName52": { "message": "Chat Live" }, "categoryName53": { "message": "CRM" }, - "categoryName54": { "message": "SEO" } + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Contabilitate" } } From 43448d4366b3edab51ad219607cde5b787ebaf35 Mon Sep 17 00:00:00 2001 From: Shaun B Date: Mon, 13 Nov 2017 13:40:44 +0800 Subject: [PATCH 085/117] Added SeamlessCMS (#1828) * Added SeamlessCMS * Fixed json escaping --- src/apps.json | 10 ++++++++++ src/icons/SeamlessCMS.png | Bin 0 -> 1704 bytes 2 files changed, 10 insertions(+) create mode 100644 src/icons/SeamlessCMS.png diff --git a/src/apps.json b/src/apps.json index 05471b92a..ba29a20c0 100644 --- a/src/apps.json +++ b/src/apps.json @@ -7531,6 +7531,16 @@ "icon": "Scientific Linux.png", "website": "http://scientificlinux.org" }, + "SeamlessCMS": { + "cats": [ + "1" + ], + "icon": "SeamlessCMS.png", + "meta": { + "generator": "^Seamless\\.?CMS" + }, + "website": "http://www.seamlesscms.com" + }, "Segment": { "cats": [ "10" diff --git a/src/icons/SeamlessCMS.png b/src/icons/SeamlessCMS.png new file mode 100644 index 0000000000000000000000000000000000000000..1a98b69c9af4300d139984912203dc703754b60c GIT binary patch literal 1704 zcmZ{lc~DbH5QhhFSMe;@wT!!#q8!SR~I2yugNA170Aa z+%Bw$C{iM)AVg3+;sJsniinDeqL5M)1R)S$U#zWK*Q))ar>m#G{&i2yRLx;`H>U-2 zf13*cSm3;w;fZ38j7?5zMn}ho zhDI)3x+9kts8pZMook4S$`uGwcI`^sxl``p5##HdFfj1x{{5#uKKs_K^EWiy_4TWo z!#P5y@3piPC=|_IUA+{FFeT-}g9p#>cwSP{`HBiCVU~ z-?T}(W{t0@>7MoLgT1}?g@t97mED}0n(FB2;qj8UZ;w+dA89mG)zx=1Gb<1zi%Jb- zFc7)?42`xoJUpke@^)X}hlvS|LUBJQr;5co6cCW|`SVC&;T1mrXl(4Mw6wCGp7(0? zWKGRoC#P^4Ey%`31jEUvPuC3%jSdV98X4`9O0%=GD@#jn+S-auO#G?TAbb0;t5+Y$ zWPh5Pvh3_aU0h__wna%KS-H8@ot>|Hdj~#!`r_gei6GhI+MZVT@w?NK0f>F>sy+eyPBGwkVpXus+3yo zQ{-%QVvu`ko(7?TzIgLa2>|n!XiW#4%*CKUt24unNp0q`^37O04xbI{>4q=lTRdE0 zk-Pi3b$xVnv_^NoeYP1j!I7c7Wo&e|u&@y3^UQAaj3)W?*|R?giKJ*BDE>&g+EvHKRxpIb9We*yP3i__a!U~6u@=HYrXx=H3* zw>I;YNzTdohn-z47Tz;07IG>FmhaEOTu;rw{*~68nzhG$N4on84^Q6%AwN6G9ASo+ z^k^j3VWop#3?p)NBoCsHDCEmb-z}GFs;k~fk#IKSXUio~ei7U7+xA?0nsC@cH#V*O zj~w|u`SFr;WnZ|- zb1hZ>#aqXutoZAmci?89Lr)9VZsBLBGI|RP%9~0&z3;$eg^o*5=kU7{y?vvRr=4Lk@Gg8&2()A9I-hzOieOQVL;I8m73`GJq9Ai!u9 znE}#Z4xP>raizg<2tud3qo@QBie|3he_+1#q|*anp&$SO1R8M>2unnnW#8%i!}th! zNPrgUC|NxRMV5buxC(<|L?(v8x2f>r5W&VuZ?_+GT$v~Z2qa4~m1qf(39%UEaTHnf zoz8Y)Bn%*X`}6{v4`|B!yOfuwGvEvN!szkw!6C?AkpRzUhYPu)5DEU@i@{sbNL)UV u3z2D76rv@Ys%=K)6DWKxjm_hbI5@NdhtBuj_%ix)0O0KC#wfLC?f)An$myK` literal 0 HcmV?d00001 From 42226d76220e74d62c91bac810083dc0d4604c9e Mon Sep 17 00:00:00 2001 From: dabenzel Date: Mon, 13 Nov 2017 21:59:41 +0100 Subject: [PATCH 086/117] Added German Language (#1830) * Added german folder - copy en * Translations to german --- .../webextension/_locales/de/messages.json | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/drivers/webextension/_locales/de/messages.json diff --git a/src/drivers/webextension/_locales/de/messages.json b/src/drivers/webextension/_locales/de/messages.json new file mode 100644 index 000000000..26efd8acf --- /dev/null +++ b/src/drivers/webextension/_locales/de/messages.json @@ -0,0 +1,68 @@ +{ + "github": { "message": "Forke Wappalyzer bei GitHub!" }, + "twitter": { "message": "Folge Wappalyzer bei Twitter" }, + "website": { "message": "Gehe zu wappalyzer.com" }, + "options": { "message": "Optionen" }, + "optionsSave": { "message": "Optionen speichern" }, + "optionsSaved": { "message": "Gespeichert" }, + "optionUpgradeMessage": { "message": "Benachrichtige mich bei Upgrades" }, + "optionDynamicIcon": { "message": "Applikations Icon anstatt des Wappalyzer Icons verwenden" }, + "optionTracking": { "message": "Anonyme Statistiken an wappalyzer.com übermitteln" }, + "nothingToDo": { "message": "Nichts zu tun." }, + "noAppsDetected": { "message": "Keine Applikation entdeckt." }, + "categoryName1": { "message": "CMS" }, + "categoryName2": { "message": "Nachrichten Bord" }, + "categoryName3": { "message": "Datenbankverwaltung" }, + "categoryName4": { "message": "Dokumentations Tool" }, + "categoryName5": { "message": "Widget" }, + "categoryName6": { "message": "Ecommerce" }, + "categoryName7": { "message": "Fotogalerien" }, + "categoryName8": { "message": "Wikis" }, + "categoryName9": { "message": "Hosting Panels" }, + "categoryName10": { "message": "Statistiken" }, + "categoryName11": { "message": "Blog" }, + "categoryName12": { "message": "JavaScript Framework" }, + "categoryName13": { "message": "Issue Tracker" }, + "categoryName14": { "message": "Videospieler" }, + "categoryName15": { "message": "Kommentarsystem" }, + "categoryName16": { "message": "Captcha" }, + "categoryName17": { "message": "Schrift Script" }, + "categoryName18": { "message": "Web Framework" }, + "categoryName19": { "message": "Sonstiges" }, + "categoryName20": { "message": "Editor" }, + "categoryName21": { "message": "LMS" }, + "categoryName22": { "message": "Web Server" }, + "categoryName23": { "message": "Cache Tool" }, + "categoryName24": { "message": "Rich Text Editor" }, + "categoryName25": { "message": "JavaScript Graphics" }, + "categoryName26": { "message": "Mobile Framework" }, + "categoryName27": { "message": "Programmiersprache" }, + "categoryName28": { "message": "Betriebssystem" }, + "categoryName29": { "message": "Suchmaschine" }, + "categoryName30": { "message": "Webmail" }, + "categoryName31": { "message": "CDN" }, + "categoryName32": { "message": "Marketing Automation" }, + "categoryName33": { "message": "Web Server Erweiterung" }, + "categoryName34": { "message": "Datenbank" }, + "categoryName35": { "message": "Map" }, + "categoryName36": { "message": "Werbenetzwerk" }, + "categoryName37": { "message": "Netzwerkdienst" }, + "categoryName38": { "message": "Medienserver" }, + "categoryName39": { "message": "Webcam" }, + "categoryName40": { "message": "Drucker" }, + "categoryName41": { "message": "Zahlungsverarbeiter" }, + "categoryName42": { "message": "Schlagwort Manager" }, + "categoryName43": { "message": "Bezahlblockade" }, + "categoryName44": { "message": "Build/CI System" }, + "categoryName45": { "message": "SCADA System" }, + "categoryName46": { "message": "Fernzugriff" }, + "categoryName47": { "message": "Entwicklungswerkzeug" }, + "categoryName48": { "message": "Netzwerkspeicher" }, + "categoryName49": { "message": "Feedleser" }, + "categoryName50": { "message": "Dokumentmanagementsysteme" }, + "categoryName51": { "message": "Startseitenersteller" }, + "categoryName52": { "message": "Live Chat" }, + "categoryName53": { "message": "CRM" }, + "categoryName54": { "message": "SEO" }, + "categoryName55": { "message": "Buchhaltung" } +} From 8a166daa96b548b3e4401e9e45f32f37d3c00dbd Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Fri, 17 Nov 2017 08:42:19 +1100 Subject: [PATCH 087/117] Fix Shopware pattern --- src/apps.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index c0159d34e..a93e50e72 100644 --- a/src/apps.json +++ b/src/apps.json @@ -7738,7 +7738,11 @@ "meta": { "application-name": "Shopware" }, - "script": "(?:(shopware)|/web/cache/[0-9]{10}_.+)\\.js\\;version:\\1?4:5", + "script": [ + "(?:(shopware)|/web/cache/[0-9]{10}_.+)\\.js\\;version:\\1?4:5", + "/jquery\.shopware\.min\.js", + "/engine/Shopware/" + ], "website": "http://shopware.com" }, "Silva": { From 99cf4d11940e2e82768269d9b475b2aa6b18b423 Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Fri, 17 Nov 2017 08:42:32 +1100 Subject: [PATCH 088/117] Update NPM README --- src/drivers/npm/README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/drivers/npm/README.md b/src/drivers/npm/README.md index 8028e0281..23227a613 100644 --- a/src/drivers/npm/README.md +++ b/src/drivers/npm/README.md @@ -38,9 +38,13 @@ const wappalyzer = require('wappalyzer')(options); wappalyzer.analyze('https://www.wappalyzer.com') .then(json => { - console.log(JSON.stringify(json, null, 2)); + process.stdout.write(JSON.stringify(json, null, 2) + '\n') + + process.exit(0); }) .catch(error => { - console.error(error); - }); + process.stderr.write(error + '\n') + + process.exit(1); +}); ``` From c282831f6253f6090680ff239d7122cabdf32ca6 Mon Sep 17 00:00:00 2001 From: Masoud Nikoomanesh Date: Fri, 17 Nov 2017 01:13:31 +0330 Subject: [PATCH 089/117] Update (#1823) * add arvancloud.com icon add arvancloud.com icon * add arvancloud.com add arvancloud.com * update to last version --- src/icons/ArvanCloud.png | Bin 1851 -> 19640 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/icons/ArvanCloud.png b/src/icons/ArvanCloud.png index c9ec8e0edc46f18f6edef4db33c898d0915e4f06..debf6aea98efd487c699b450f0ca13f96745f273 100644 GIT binary patch literal 19640 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 From 3c707bd423fd142bf2601e41f63112066578ff3e Mon Sep 17 00:00:00 2001 From: q-- Date: Thu, 16 Nov 2017 22:43:52 +0100 Subject: [PATCH 090/117] Low confidence for 2-character environment variables (#1831) These can be automatically generated by the Google Closure Compiler (which will, if configured, replace global variables with auto-generated ones such as aa, ab, ac et cetera.) Hence, they are a less reliable indication that a library which would also set said variable is present. --- src/apps.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/apps.json b/src/apps.json index c7a399418..983e46721 100644 --- a/src/apps.json +++ b/src/apps.json @@ -2322,7 +2322,10 @@ "12" ], "icon": "ef.js.svg", - "env": "^ef|efCore$", + "env": [ + "^ef$\\;confidence:20", + "^efCore$" + ], "script": "/ef(?:-core)?(?:\\.min|\\.dev)?\\.js", "website": "http://ef.js.org" }, @@ -4401,7 +4404,7 @@ "cats": [ "12" ], - "env": "^ko$", + "env": "^ko$\\;confidence:20", "icon": "Knockout.js.png", "website": "http://knockoutjs.com" }, @@ -7963,7 +7966,7 @@ "cats": [ "12" ], - "env": "^io$", + "env": "^io$\\;confidence:20", "icon": "Socket.io.png", "implies": "Node.js", "script": "socket.io.*\\.js", From aa80c2cf199e391300369a8b2eb0fc6246342129 Mon Sep 17 00:00:00 2001 From: dabenzel Date: Thu, 16 Nov 2017 22:44:09 +0100 Subject: [PATCH 091/117] Changed german translations (#1832) * Added german folder - copy en * Translations to german * Changed few translations Yesterday I may have missed some. Also I did some rethinking on better translations. --- src/drivers/webextension/_locales/de/messages.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/drivers/webextension/_locales/de/messages.json b/src/drivers/webextension/_locales/de/messages.json index 26efd8acf..698326cd4 100644 --- a/src/drivers/webextension/_locales/de/messages.json +++ b/src/drivers/webextension/_locales/de/messages.json @@ -11,18 +11,18 @@ "nothingToDo": { "message": "Nichts zu tun." }, "noAppsDetected": { "message": "Keine Applikation entdeckt." }, "categoryName1": { "message": "CMS" }, - "categoryName2": { "message": "Nachrichten Bord" }, + "categoryName2": { "message": "Nachrichten Board" }, "categoryName3": { "message": "Datenbankverwaltung" }, "categoryName4": { "message": "Dokumentations Tool" }, "categoryName5": { "message": "Widget" }, "categoryName6": { "message": "Ecommerce" }, "categoryName7": { "message": "Fotogalerien" }, "categoryName8": { "message": "Wikis" }, - "categoryName9": { "message": "Hosting Panels" }, + "categoryName9": { "message": "Hosting-Panels" }, "categoryName10": { "message": "Statistiken" }, "categoryName11": { "message": "Blog" }, "categoryName12": { "message": "JavaScript Framework" }, - "categoryName13": { "message": "Issue Tracker" }, + "categoryName13": { "message": "Fehlertracker" }, "categoryName14": { "message": "Videospieler" }, "categoryName15": { "message": "Kommentarsystem" }, "categoryName16": { "message": "Captcha" }, @@ -53,7 +53,7 @@ "categoryName41": { "message": "Zahlungsverarbeiter" }, "categoryName42": { "message": "Schlagwort Manager" }, "categoryName43": { "message": "Bezahlblockade" }, - "categoryName44": { "message": "Build/CI System" }, + "categoryName44": { "message": "Build/CI-System" }, "categoryName45": { "message": "SCADA System" }, "categoryName46": { "message": "Fernzugriff" }, "categoryName47": { "message": "Entwicklungswerkzeug" }, @@ -61,7 +61,7 @@ "categoryName49": { "message": "Feedleser" }, "categoryName50": { "message": "Dokumentmanagementsysteme" }, "categoryName51": { "message": "Startseitenersteller" }, - "categoryName52": { "message": "Live Chat" }, + "categoryName52": { "message": "Live-Chat" }, "categoryName53": { "message": "CRM" }, "categoryName54": { "message": "SEO" }, "categoryName55": { "message": "Buchhaltung" } From 2ba532031c63fa9924336e11024a4dfe4d77d8fb Mon Sep 17 00:00:00 2001 From: q-- Date: Thu, 16 Nov 2017 22:44:24 +0100 Subject: [PATCH 092/117] Add Microsoft Publisher and PowerPoint (#1833) * Add Microsoft Publisher * Add Microsoft PowerPoint --- src/apps.json | 24 ++++++++ src/icons/Microsoft PowerPoint.svg | 99 ++++++++++++++++++++++++++++++ src/icons/Microsoft Publisher.svg | 80 ++++++++++++++++++++++++ 3 files changed, 203 insertions(+) create mode 100644 src/icons/Microsoft PowerPoint.svg create mode 100644 src/icons/Microsoft Publisher.svg diff --git a/src/apps.json b/src/apps.json index 983e46721..d437e6aa0 100644 --- a/src/apps.json +++ b/src/apps.json @@ -5262,6 +5262,30 @@ }, "website": "https://office.microsoft.com/excel" }, + "Microsoft PowerPoint": { + "cats": [ + "20" + ], + "icon": "Microsoft PowerPoint.svg", + "html": "(?:]*xmlns:w=\"urn:schemas-microsoft-com:office:powerpoint\"||[^<]+[^!]+\\d+(?:[^!]+([\\d.]+))?)\\;version:\\1", + "meta": { + "generator": "Microsoft PowerPoint ( [\\d.]+)?\\;version:\\1", + "ProgId": "^PowerPoint\\." + }, + "website": "https://office.microsoft.com/powerpoint" + }, + "Microsoft Publisher": { + "cats": [ + "20" + ], + "icon": "Microsoft Publisher.svg", + "html": "(?:]*xmlns:w=\"urn:schemas-microsoft-com:office:publisher\"| + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/icons/Darwin.png b/src/icons/Darwin.png deleted file mode 100644 index 65606bf259d8569843215a4aead36c4167d41f16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAm`Z~Df*BafCZDwc@>)Dy9780g zCMPsByYpx~2nvy03`@vz<=RyDcUfdUc9eczT&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^ + + + diff --git a/src/icons/LiteSpeed.png b/src/icons/LiteSpeed.png deleted file mode 100644 index 33f30a8aa93a17cc394d38f85979c60bb51088a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv5AX?bWib8^1cEOAUDEz{tor}% z|9>Ty|EqTYFQ57U%-#QK9sg&p`oH_k{})UAy?|Q6JY5_^D&mqGnB5#59XXmE112<{ zlsHu&!ozGlgH^lhAP=AC3MsunR*vSxM=Bc5!9k3xY9Fxx6^3%1Nl1Dyg~3QdBBESI ngw42u#Z}xvC)6yVftjIr3FlFP;`?)fHZXX)`njxgN@xNAHp4~u diff --git a/src/icons/LiteSpeed.svg b/src/icons/LiteSpeed.svg new file mode 100644 index 000000000..7c841b8c1 --- /dev/null +++ b/src/icons/LiteSpeed.svg @@ -0,0 +1,101 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/src/icons/Modernizr.png b/src/icons/Modernizr.png deleted file mode 100644 index 41a2b0db42e9f8aa3b74d1ce242febc7d27c0067..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T!HjWxiT+_m}Ni~V@Z%- zFoVOh8)-m}gr|#RNX4z>goK3u=N;G-|Ic@M^uNA{gMrcA$5L1Lh7?c@gQu&X%Q~lo FCIEwe9ftq_ diff --git a/src/icons/Modernizr.svg b/src/icons/Modernizr.svg new file mode 100644 index 000000000..9253469fc --- /dev/null +++ b/src/icons/Modernizr.svg @@ -0,0 +1,62 @@ + + + + + + image/svg+xml + + Modernizr logo + + + + + + + + + + Modernizr logo + + + + + + diff --git a/src/icons/Outlook Web App.png b/src/icons/Outlook Web App.png deleted file mode 100644 index e5aaa325080fe68f2dc94b1b22411ee8b7845c59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1543 zcmV+i2Kf1jP)aAFT?g>j`+I)(kF)Dqw&83{%x0L?y5|Zq*J`XiQ0Sl5gF!tjs6a}K7*Ufg0<{PI zp{STK3-KF2&!Opx2|KUa2 z_#fQ#-ltzbncbV-^Te5UcDwdWJC}6^WkP5x%IcDAZuyOQ<-{90vunDmbEf8%rrJ1A zTPagogp9UQ8q&rk*mTL~(~_vFNTaDktzb%vgc$@?N1DVXSmH=jLW0zhcuqn>l!R0~ ztC7VeS%jn{4h2Dotq@zmLW6i#SRzX$J?|3amfvc%I>nf^Shch(GdiO)bj%b(tF<+P zb)A2k%ziqgk|Bc;gCV0GSt_ZW#lst0wG}!@b!=4{wG|TDh*F9a;o@39`x-(@>G2B-1yUfJnu7)td<6)B-K^~t63c?f;tiu z314{pq91+Vzk1_qzQzM*pRrMDs~BeLhrVOSJ8#`sr;^ac51f9PJ3jcNzy8#Dltf#~ zC^OcTA`S#~C~OiRec&lS_s5^}tGB(%b+0(-BcJ}VrEw$J_e<{h;8}n6)8FiSzU6Wk_QruF zwi2-w-tw*N@2zI)w%@_?z7MM%iFJW%@rH#x@s$lMTlyca^003?<4?wkO=z?ZHMU~9 zni(@=oz=RIbse*=W?il8m>Dx;omHm}Y*MO-qz-)Mu^m5n&t-PMVb7`Kb@qw+#6xvF zmC#g*(vr}rnN=H!tvXOaQPVmQF)E2o7t)|=D+D_WAOHMDyE1iRvuf$s3M~n-Ra8V$ zFH{xJivyLGvWWwwSg<-&G^JEMuM~-PP{(%S?vL&{wka*CC@Ctc21OPSi*Ng0$n zQlTYPp(Xvb`|i5-pS?(n5)=(u5vC3e5$aG|ltzVC(8=NwEb76rRSa!(Xrgs!ltc$b zsnSZRQkP`&H$RhC+q(JJ_g{+C{+fRC- z?|jd>(>kZScDFOT?d;-&j<%>Mdi{NOU30$|DgGC3`js#F*e|`@bKdmsFTP~XuV)gw tZBI+z6#e1*?!4xc{y$xR=UM+({{_$q*&RjcdE@{9002ovPDHLkV1o5SEja)H diff --git a/src/icons/Outlook.svg b/src/icons/Outlook.svg new file mode 100644 index 000000000..197e79925 --- /dev/null +++ b/src/icons/Outlook.svg @@ -0,0 +1,19 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/icons/PayPal.png b/src/icons/PayPal.png deleted file mode 100644 index d935d281bd9958aa7340a0603dc840adcc5630e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1221 zcmV;$1UmbPP)6h1Te?y}1+OHrTz@|S`L&@|C%BF40-RjU%BZG1Dn7^{y)(+6WxA8cddgE6WP zYK_K6f-g;5LnNuDsj)R$sI^o?DlFX<+|mVhmu2srbDWub_m5EA*6`rra59<6eBU{9 zzO$FX>)*jP`X?o;6?=N<-nPAX2^d4 z9W?TK}5*;M)3p4B5Ge|~gvSth5u&QOJX4{~bBKfUA-1W(^ng}@C1 z42`dQ;W7{r2SP+kkjLvi+TX!x;)6>`&KcLrBFZa;99L@L+Eo$i^8TJXQ1WRr4Z~v^ zKSq*2gcDiFfDJazK>n1zu>BaNUyfn1sK!l+Q#Qo$&ARMBS3Gp*K2U+lxuCIR&Afx z>oZk?R4h|>?g_KM0fKt#f(|rjJO1n6N`!9nsM$|%_jl&!-6&cX? ze1S~K8CZkxo&F92mgAV7TbzoW}g)kX=H5qRK>(GU{{9%z}lk^aU>A8GyHBGd;Y@QLmk6bLuZJ#FK)#q{vy`D5RQ z_in4~>uz37Wn}uc(D|-cL0%rMTfBa+iA3Bbpm2Qkg$TZ5M(OGmyQM+YgVK&~Unun_^SA-K0OfPxsHzD7f% z(Sr}S9XmUnZ#yfReYGsL0;0O0*<9sMSPnWQQ>$a)_|{VAi8w|C?H@k9$juddbXvUdkjVdL7(~JuJ)0M7;rs^w{8qx z9$LF+;d{?^Rro!izm!Pu{^_f~M3&&TjKNETYxf9hLuK_9Wm+99nGut*Bmmtm!NEb; jMAJ>)WCEc7cLo0d4}Ve+rzBF{00000NkvXXu0mjf + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/icons/git.png b/src/icons/git.png deleted file mode 100644 index 5ff1d2b095db737e6d30493f79ca0e76dcd5147b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy#{zspT!Hj|APNorAFBP|Q{{1} zPV}Qx~ zKocMv#0WBaA87mmf&z>`0@VZJAXp_x0ZbOC*XTn4%mkqM zNTwm!$l@>svoE_B0)66G666=mz{t$T&dJNiFCZu+A)~0Oqif?G92u9DQ&3b=URhV) z+SxmC=7J?F*6crU@bHlnr_Noxar^H52M=Gq`}pO@&)tW3fB5n`Y2685K>mCevbN5De%ZL5{y(<}6Qq+p`zHb*ZUSs*8o=N_>OQl)KSC=5c zUAw*4*qqQT`#47_@Qq04k{Mesf6m{nabBGHcJOSC-SZgM>Bg_zb#Gb&_h*^X>3!1| z+P~~t=FQB7-qd(bauYbivq1NO$D}W>AEv9_VBu5s+{v#j zJjdaE+$0gk7FY2X-`==RnlkNrMz>JN~r>to&Q~J{_Wn*+^p&;x)X2B{~EKTTWqn=%STtaxXarUr@6oT`fb +image/svg+xml \ No newline at end of file diff --git a/src/icons/iWeb.png b/src/icons/iWeb.png index 160b433ff534f589764e77a30b182683067fc49f..cc7ad01620f74e5f2cda746b48cea4c8339e086a 100644 GIT binary patch literal 9240 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 From 5c5fcc92c54d884b52f387205c12d9aa25e3da38 Mon Sep 17 00:00:00 2001 From: avasilkov Date: Fri, 17 Nov 2017 00:45:04 +0300 Subject: [PATCH 094/117] fixed userAgent param not being initialized correctly on Browser creation (#1836) --- src/drivers/npm/driver.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 6d277d511..271dd57b1 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -4,9 +4,7 @@ const driver = options => { const Wappalyzer = require('./wappalyzer'); const request = require('request'); const fs = require('fs'); - const Browser = require('zombie', { - userAgent: options.userAgent - }); + const Browser = require('zombie'); const json = JSON.parse(fs.readFileSync(__dirname + '/apps.json')); @@ -57,7 +55,7 @@ const driver = options => { resolve(apps); }; - const browser = new Browser(); + const browser = new Browser({userAgent: options.userAgent}); browser.visit(url, error => { if ( !browser.resources['0'] || !browser.resources['0'].response ) { From ae64e6ab009dd74f55fe475fdde872e87674eff9 Mon Sep 17 00:00:00 2001 From: q-- Date: Thu, 16 Nov 2017 22:45:52 +0100 Subject: [PATCH 095/117] Detect stray icons in src/icons/ (#1838) * Detect stray icons * Remove stray icons --- bin/validate-icons | 25 +++++++++++++++++++++---- src/icons/Elm.png | Bin 582 -> 0 bytes src/icons/Seoshop.png | Bin 772 -> 0 bytes src/icons/Vinala.png | Bin 1664 -> 0 bytes src/icons/aaa.png | Bin 1050 -> 0 bytes 5 files changed, 21 insertions(+), 4 deletions(-) delete mode 100644 src/icons/Elm.png delete mode 100644 src/icons/Seoshop.png delete mode 100644 src/icons/Vinala.png delete mode 100644 src/icons/aaa.png diff --git a/bin/validate-icons b/bin/validate-icons index 467f6df19..8a6913a46 100755 --- a/bin/validate-icons +++ b/bin/validate-icons @@ -4,18 +4,24 @@ var app, fs = require('fs'), fileType = require('../node_modules/file-type'), - readChunk = require('../node_modules/read-chunk') - isSvg = require('../node_modules/is-svg') - json = require('../src/apps.json'); + readChunk = require('../node_modules/read-chunk'), + isSvg = require('../node_modules/is-svg'), + json = require('../src/apps.json'), + + basePath = 'src/icons/', + + iconPaths = [];//Will be used to check for stray icons + for (app in json.apps) { (function(app) { var - basePath = 'src/icons/'; iconPath = json.apps[app].icon || 'default.svg'; path = basePath + iconPath, ext = iconPath.substr(iconPath.length - 4); + iconPaths.push(iconPath) + if ( ext !== '.png' && ext !== '.svg' ) { throw err = new Error('Icon file extension specified for app "' + app + '" is not ".png" or ".svg": src/icons/' + iconPath); } @@ -41,3 +47,14 @@ for (app in json.apps) { }); }(app)); } + + +// Check for stray files in icons folder + fs.readdirSync(basePath).forEach(function(file) { + if (!fs.statSync(basePath + file).isDirectory()) { + if(iconPaths.indexOf(file) === -1){ + throw new Error('Stray file (no associated app): ' + basePath + file); + } + } + }); + diff --git a/src/icons/Elm.png b/src/icons/Elm.png deleted file mode 100644 index 855bd9b6775fdb08ec3c6f895a691696979db9e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582 zcmV-M0=fN(P)@~9NbtAPu8$;{L z4y>&2bdw~kMC0I4iiq+c3X_|8T<}5yaQ_O?wAL>W0>A`;iya6NIMo&*1OP39&P1(U zAl6d*qZD8oQQQ9y2p&L)r`r*H!?~4AdtCiQi1GkJ81o7TG(!jhV1l^o!zPX`H3RtQ z9Lzf5J-dG%cYn4F3GK77T6-Ae|)?PRX*;nh5UJQw5OOPC~;)uA0Q03CwjiGxa% z*G}nB62fH0BLoAGA#QtcRKzjZr7(jafDXaOrx6(MGXNIRc?JyNG|Qma^OLC{gCKwy zF+0v9-lypT0YnHJFZs@bPe0v)r~I=5u-mU2;~8hX_Bc3`09vEkwhXYb(+R_*f_vC) zq}S)Mjs22O`Ct5g^LGr3po-IdMnrL_UW^z8AO0M}o4X!df+W5=ygH%yYy=-KZV+hV z41$dlKol>Fz(;ATh-35@#R;H@^N5*o0x04<;>OJ56qmFN^CDaoqGD0Fdp> Uq#DnFnE(I)07*qoM6N<$f}5@Yvj6}9 diff --git a/src/icons/Seoshop.png b/src/icons/Seoshop.png deleted file mode 100644 index b201673b7250380442582ae099f18b7749d92ce0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 772 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 Date: Thu, 16 Nov 2017 22:46:45 +0100 Subject: [PATCH 096/117] Warn about unescaped periods in patterns (#1840) --- bin/validate-regex | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bin/validate-regex b/bin/validate-regex index 423aa2c69..380ffdb15 100755 --- a/bin/validate-regex +++ b/bin/validate-regex @@ -75,6 +75,18 @@ for ( app in json.apps ) { throw new Error('HTML patterns must contain "<" or ">".\n' + app + ': ' + type + ': ' + pattern); } } + + //Warn about suspicious periods (".") in patterns which should probably have been escaped + // Periods inside character classes (such as [\d.]) don't count as wildcard, so we'll replace + // the character classes in the pattern with "_". (We could remove them entirely, but then + // we'd have to deal with leftover * and + characters; for example, removing the character + // class entirely from the pattern /test.[a-z]+/ would yield the pattern /test.+/, which + // would mean not detecting the un-escaped ".". Replacing the character class with an + // underscore instead gives /test._+/, which WOULD yield a warning about the unescaped ".".) + if ( /(?:^\/|[^\\])\.(?:[^*+]|\/$)/.test(regex.replace(/([^\\]|^)\[[^\]]+\]/g,'$1_') ) ) { + console.warn('Suspicious period (".") in pattern. Should this have been escaped?\n\tApp: ' + app + '\n\tPattern: ' + type + ': ' + pattern); + } + }); } }); From dbe42b62f9965df9f05cbfbd25d4f360bd960af0 Mon Sep 17 00:00:00 2001 From: Gijs Boddeus Date: Thu, 16 Nov 2017 22:47:16 +0100 Subject: [PATCH 097/117] Add Afosto Ecommerce software (#1841) * added afosto to apps.js added afosto to the apps list * add icon added afosto icon to icons directory * capitalize icon name * capitalize icon reference * fix travis error: trailing comma * edit url to https * added implies php * remove Twitter reference * revert accindentaly merged bootstrap naming on master * fix error --- src/apps.json | 10 ++++++++++ src/icons/Afosto.svg | 1 + 2 files changed, 11 insertions(+) create mode 100644 src/icons/Afosto.svg diff --git a/src/apps.json b/src/apps.json index 5599b7291..64bd0e484 100644 --- a/src/apps.json +++ b/src/apps.json @@ -387,6 +387,16 @@ "script": "shop-static\\.afterbuy\\.de", "website": "http://www.afterbuy.de" }, + "Afosto": { + "cats": [ + "6" + ], + "headers": { + "X-Powered-By": "Afosto SaaS BV" + }, + "icon": "Afosto.svg", + "website": "http://afosto.com" + }, "Aircall": { "cats": [ "52" diff --git a/src/icons/Afosto.svg b/src/icons/Afosto.svg new file mode 100644 index 000000000..882f7d91d --- /dev/null +++ b/src/icons/Afosto.svg @@ -0,0 +1 @@ + From aa72ab08c4b3d219b464c971ab7a172a10054698 Mon Sep 17 00:00:00 2001 From: q-- Date: Fri, 17 Nov 2017 02:02:06 +0100 Subject: [PATCH 098/117] Fix invalid JSON (#1844) apps.json got broken in 8a166daa9 --- src/apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps.json b/src/apps.json index 64bd0e484..5f5e23fbf 100644 --- a/src/apps.json +++ b/src/apps.json @@ -7796,7 +7796,7 @@ }, "script": [ "(?:(shopware)|/web/cache/[0-9]{10}_.+)\\.js\\;version:\\1?4:5", - "/jquery\.shopware\.min\.js", + "/jquery\\.shopware\\.min\\.js", "/engine/Shopware/" ], "website": "http://shopware.com" From 3eeaeb95796395ac49a3f6ad2e9ebb6eef02588b Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Sat, 18 Nov 2017 09:45:20 +1100 Subject: [PATCH 099/117] Formatting --- src/drivers/npm/driver.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 271dd57b1..487200a2d 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -55,7 +55,9 @@ const driver = options => { resolve(apps); }; - const browser = new Browser({userAgent: options.userAgent}); + const browser = new Browser({ + userAgent: options.userAgent + }); browser.visit(url, error => { if ( !browser.resources['0'] || !browser.resources['0'].response ) { From 43911f62c574ee9e7bf218bb33ece9feec21cbea Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Sat, 18 Nov 2017 09:46:36 +1100 Subject: [PATCH 100/117] Disable Edge build --- bin/build | 80 +++++++++++++++++++++++++++---------------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/bin/build b/bin/build index 5ca0968a0..ea7ad0cc8 100755 --- a/bin/build +++ b/bin/build @@ -69,45 +69,45 @@ zip -qr ../../../build/wappalyzer_webextension.zip . \ popd > /dev/null # Edge -echo "Building Edge application..." - -pushd build > /dev/null - -webextension_dir="../$webextension_dir" -manifest_dir="Wappalyzer/edgeextension/manifest" - -mv $webextension_dir/manifest.json $webextension_dir/manifest.webextension.json -mv $webextension_dir/manifest.edge.json $webextension_dir/manifest.json - -sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$version\"/" $webextension_dir/manifest.json - -manifoldjs -l debug -p edgeextension -f edgeextension -m $webextension_dir/manifest.json - -# Replace symlinks with actual files -rm $manifest_dir/Extension/images/icons - -cp ../src/apps.json $manifest_dir/Extension -cp ../src/wappalyzer.js $manifest_dir/Extension/js -cp -r ../src/icons $manifest_dir/Extension/images - -mv $webextension_dir/manifest.json $webextension_dir/manifest.edge.json -mv $webextension_dir/manifest.webextension.json $webextension_dir/manifest.json - -sed -i 's/INSERT-YOUR-PACKAGE-IDENTITY-NAME-HERE/1591Wappalyzer.Wappalyzer/' $manifest_dir/appxmanifest.xml -sed -i 's/INSERT-YOUR-PACKAGE-IDENTITY-PUBLISHER-HERE/D240C22F-A6C1-45DF-BF7B-4C835064DF51/' $manifest_dir/appxmanifest.xml -sed -i 's/INSERT-YOUR-PACKAGE-PROPERTIES-PUBLISHERDISPLAYNAME-HERE/Wappalyzer/' $manifest_dir/appxmanifest.xml -sed -i 's/Version="0.\([^"]\+\)/Version="\1.0/' $manifest_dir/appxmanifest.xml - -cp $webextension_dir/images/icon_44.png $manifest_dir/Assets/Square44x44Logo.png -cp $webextension_dir/images/icon_150.png $manifest_dir/Assets/Square150x150Logo.png -cp $webextension_dir/images/icon_50.png $manifest_dir/Assets/StoreLogo.png - -manifoldjs -l debug -p edgeextension package $manifest_dir - -mv Wappalyzer/edgeextension/package/edgeExtension.appx wappalyzer_edge.appx - -rm -rf Wappalyzer - -popd > /dev/null +#echo "Building Edge application..." +# +#pushd build > /dev/null +# +#webextension_dir="../$webextension_dir" +#manifest_dir="Wappalyzer/edgeextension/manifest" +# +#mv $webextension_dir/manifest.json $webextension_dir/manifest.webextension.json +#mv $webextension_dir/manifest.edge.json $webextension_dir/manifest.json +# +#sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$version\"/" $webextension_dir/manifest.json +# +#manifoldjs -l debug -p edgeextension -f edgeextension -m $webextension_dir/manifest.json +# +## Replace symlinks with actual files +#rm $manifest_dir/Extension/images/icons +# +#cp ../src/apps.json $manifest_dir/Extension +#cp ../src/wappalyzer.js $manifest_dir/Extension/js +#cp -r ../src/icons $manifest_dir/Extension/images +# +#mv $webextension_dir/manifest.json $webextension_dir/manifest.edge.json +#mv $webextension_dir/manifest.webextension.json $webextension_dir/manifest.json +# +#sed -i 's/INSERT-YOUR-PACKAGE-IDENTITY-NAME-HERE/1591Wappalyzer.Wappalyzer/' $manifest_dir/appxmanifest.xml +#sed -i 's/INSERT-YOUR-PACKAGE-IDENTITY-PUBLISHER-HERE/D240C22F-A6C1-45DF-BF7B-4C835064DF51/' $manifest_dir/appxmanifest.xml +#sed -i 's/INSERT-YOUR-PACKAGE-PROPERTIES-PUBLISHERDISPLAYNAME-HERE/Wappalyzer/' $manifest_dir/appxmanifest.xml +#sed -i 's/Version="0.\([^"]\+\)/Version="\1.0/' $manifest_dir/appxmanifest.xml +# +#cp $webextension_dir/images/icon_44.png $manifest_dir/Assets/Square44x44Logo.png +#cp $webextension_dir/images/icon_150.png $manifest_dir/Assets/Square150x150Logo.png +#cp $webextension_dir/images/icon_50.png $manifest_dir/Assets/StoreLogo.png +# +#manifoldjs -l debug -p edgeextension package $manifest_dir +# +#mv Wappalyzer/edgeextension/package/edgeExtension.appx wappalyzer_edge.appx +# +#rm -rf Wappalyzer +# +#popd > /dev/null echo "Done (v$version)." From a23b4e5ea2357b1dd1249d72ccbe9b91866de62b Mon Sep 17 00:00:00 2001 From: Tuna Celik <24642056+freakmaxi@users.noreply.github.com> Date: Sat, 18 Nov 2017 00:49:39 +0100 Subject: [PATCH 101/117] Xeora Webserver / Web Framework Addition (#1845) * Xeora Webserver / Web Framework Addition http://ufal.io http://jpap.mayadroomajans.com.tr http://www.mayadroomajans.com.tr/ http://www.resimlerimnette.com/ http://www.mesajkutum.com/ http://www.offlineradio.club/ << it is only used in rest micro service side http://www.beyinpilim.com/ http://www.jakpark.com/ http://www.bolispirlanta.com/ http://www.xeora.org/ * Regex fix of html and script fields --- src/apps.json | 15 +++++++++++++++ src/icons/xeora.png | Bin 0 -> 3010 bytes 2 files changed, 15 insertions(+) create mode 100644 src/icons/xeora.png diff --git a/src/apps.json b/src/apps.json index 5f5e23fbf..10791e7a6 100644 --- a/src/apps.json +++ b/src/apps.json @@ -9698,6 +9698,21 @@ "icon": "XenForo.png", "website": "http://xenforo.com" }, + "Xeora": { + "cats": [ + "18", + "22", + "27" + ], + "html": "", + "headers": { + "Server": "XeoraEngine", + "X-Powered-By": "XeoraCube" + }, + "icon": "xeora.png", + "script": "/_bi_sps_v.+\\.js", + "website": "http://www.xeora.org" + }, "Xitami": { "cats": [ "22" diff --git a/src/icons/xeora.png b/src/icons/xeora.png new file mode 100644 index 0000000000000000000000000000000000000000..36151f12ff591b31b41e0e28dcfb561e4970e5cd GIT binary patch literal 3010 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 Date: Sat, 18 Nov 2017 16:42:30 +1100 Subject: [PATCH 102/117] Add crawler functionality in NPM driver --- src/drivers/npm/README.md | 6 +- src/drivers/npm/driver.js | 155 ++++++++++++++++++++++++-------------- src/drivers/npm/index.js | 8 +- 3 files changed, 110 insertions(+), 59 deletions(-) diff --git a/src/drivers/npm/README.md b/src/drivers/npm/README.md index 23227a613..e3fc682dd 100644 --- a/src/drivers/npm/README.md +++ b/src/drivers/npm/README.md @@ -31,7 +31,11 @@ $ node index.js https://www.wappalyzer.com const options = { userAgent: 'Wappalyzer', maxWait: 3000, - debug: false + debug: false, + recursive: true, + maxDepth: 3, + maxUrls: 10, + delay: 500, }; const wappalyzer = require('wappalyzer')(options); diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 487200a2d..95325b011 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -3,45 +3,44 @@ const driver = options => { const Wappalyzer = require('./wappalyzer'); const request = require('request'); + const url = require('url'); const fs = require('fs'); const Browser = require('zombie'); const json = JSON.parse(fs.readFileSync(__dirname + '/apps.json')); return { - analyze: url => { + analyze: pageUrl => { + const origPageUrl = url.parse(pageUrl); + const analyzedPageUrls = []; + const apps = []; + const wappalyzer = new Wappalyzer(); wappalyzer.apps = json.apps; wappalyzer.categories = json.categories; - return new Promise((resolve, reject) => { - wappalyzer.driver.log = (message, source, type) => { - if ( type === 'error' ) { - return reject(message); - } - - if ( Boolean(options.debug) ) { - console.log('[wappalyzer ' + type + ']', '[' + source + ']', message); - } - }; - - wappalyzer.driver.displayApps = detected => { - var apps = []; + wappalyzer.driver.log = (message, source, type) => { + if ( Boolean(options.debug) ) { + console.log('[wappalyzer ' + type + ']', '[' + source + ']', message); + } + }; - Object.keys(detected).forEach(appName => { - const app = detected[appName]; + wappalyzer.driver.displayApps = detected => { + Object.keys(detected).forEach(appName => { + const app = detected[appName]; - var categories = []; + var categories = []; - app.props.cats.forEach(id => { - var category = {}; + app.props.cats.forEach(id => { + var category = {}; - category[id] = wappalyzer.categories[id].name; + category[id] = wappalyzer.categories[id].name; - categories.push(category) - }); + categories.push(category) + }); + if ( !apps.some(detectedApp => detectedApp.name === app.name) ) { apps.push({ name: app.name, confidence: app.confidenceTotal.toString(), @@ -50,52 +49,96 @@ const driver = options => { website: app.props.website, categories }); - }); + } + }); + }; - resolve(apps); - }; + const browser = new Browser({ + userAgent: options.userAgent, + waitDuration: options.maxWait + 'ms', + }); - const browser = new Browser({ - userAgent: options.userAgent - }); + const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); - browser.visit(url, error => { - if ( !browser.resources['0'] || !browser.resources['0'].response ) { - return wappalyzer.log('No response from server', 'driver', 'error'); + const fetch = (pageUrl, index, depth) => { + return new Promise(async (resolve, reject) => { + // Return when the URL is a duplicate or maxUrls has been reached + if ( analyzedPageUrls.indexOf(pageUrl.href) !== -1 || analyzedPageUrls.length >= options.maxUrls ) { + return resolve(); } - browser.wait(options.maxWait) - .catch(error => wappalyzer.log(error.message, 'browser')) - .finally(() => { - wappalyzer.driver.document = browser.document; + analyzedPageUrls.push(pageUrl.href); - const headers = {}; + wappalyzer.log('depth: ' + depth + '; delay: ' + ( options.delay * index ) + 'ms; url: ' + pageUrl.href, 'driver'); - browser.resources['0'].response.headers._headers.forEach(header => { - if ( !headers[header[0]] ){ - headers[header[0]] = []; - } - headers[header[0]].push(header[1]); - }); + // Be nice + if ( options.delay ) { + await sleep(options.delay * index); + } + + browser.visit(pageUrl.href, error => { + if ( !browser.resources['0'] || !browser.resources['0'].response ) { + wappalyzer.log('No response from server', 'browser', 'error'); - const vars = Object.getOwnPropertyNames(browser.window); - const html = browser.html(); - const scripts = Array.prototype.slice - .apply(browser.document.scripts) - .filter(s => s.src) - .map(s => s.src); + return resolve(); + } - const hostname = wappalyzer.parseUrl(url).hostname; + browser.wait() + .catch(error => wappalyzer.log(error.message, 'browser')) + .finally(() => { + wappalyzer.driver.document = browser.document; - wappalyzer.analyze(hostname, url, { - headers, - html, - env: vars, - scripts + const headers = {}; + + browser.resources['0'].response.headers._headers.forEach(header => { + if ( !headers[header[0]] ){ + headers[header[0]] = []; + } + + headers[header[0]].push(header[1]); + }); + + const vars = Object.getOwnPropertyNames(browser.window); + const html = browser.html(); + const scripts = Array.prototype.slice + .apply(browser.document.scripts) + .filter(s => s.src) + .map(s => s.src); + + wappalyzer.analyze(pageUrl.hostname, pageUrl.href, { + headers, + html, + env: vars, + scripts + }); + + resolve(browser); }); - }); + }); }); - }); + }; + + const crawl = async (pageUrl, index, depth) => { + try { + const browser = await fetch(pageUrl, index, depth); + + if ( options.recursive && depth < options.maxDepth && browser ) { + const links = Array.from(browser.body.getElementsByTagName('a')).filter(link => link.hostname === origPageUrl.hostname); + + await Promise.all(links.map(async (link, index) => { + link.hash = ''; + + return crawl(link, index, depth + 1); + })); + } + + return Promise.resolve(apps); + } catch (error) { + return Promise.reject(error); + } + }; + + return crawl(origPageUrl, 1, 1); } }; }; diff --git a/src/drivers/npm/index.js b/src/drivers/npm/index.js index 31f4dc954..494fa9f43 100644 --- a/src/drivers/npm/index.js +++ b/src/drivers/npm/index.js @@ -1,9 +1,13 @@ 'use strict'; const options = { - userAgent: null, + userAgent: 'Mozilla/5.0 (compatible; Wappalyzer)', maxWait: 3000, - debug: false + debug: true, + recursive: true, + maxDepth: 3, + maxUrls: 10, + delay: 500, }; const args = process.argv.slice(2); From 3bda8533b228419bf3e04ac80fc2e088d4560c07 Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Sun, 19 Nov 2017 09:32:50 +1100 Subject: [PATCH 103/117] Refactor NPM driver into class --- src/drivers/npm/README.md | 28 +++-- src/drivers/npm/driver.js | 243 ++++++++++++++++++++------------------ src/drivers/npm/index.js | 17 +-- 3 files changed, 154 insertions(+), 134 deletions(-) diff --git a/src/drivers/npm/README.md b/src/drivers/npm/README.md index e3fc682dd..3875fdbf9 100644 --- a/src/drivers/npm/README.md +++ b/src/drivers/npm/README.md @@ -20,8 +20,20 @@ $ npm i wappalyzer ## Run from the command line -```shell -$ node index.js https://www.wappalyzer.com +``` +node index.js [url] [options] +``` + +### Options + +``` + --debug=0|1 Output debug messages. + --delay=ms Wait for ms milliseconds between requests. + --max-depth=num Don't analyze pages more than num levels deep. + --max-urls=num Exit when num URLs have been analyzed. + --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. ``` @@ -29,18 +41,18 @@ $ node index.js https://www.wappalyzer.com ```javascript const options = { - userAgent: 'Wappalyzer', - maxWait: 3000, debug: false, - recursive: true, + delay: 500, maxDepth: 3, maxUrls: 10, - delay: 500, + maxWait: 3000, + recursive: true, + userAgent: 'Wappalyzer', }; -const wappalyzer = require('wappalyzer')(options); +const wappalyzer = new Wappalyzer('https://www.wappalyzer.com', options); -wappalyzer.analyze('https://www.wappalyzer.com') +wappalyzer.analyze() .then(json => { process.stdout.write(JSON.stringify(json, null, 2) + '\n') diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 95325b011..2101fee92 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -1,146 +1,161 @@ 'use strict'; -const driver = options => { - const Wappalyzer = require('./wappalyzer'); - const request = require('request'); - const url = require('url'); - const fs = require('fs'); - const Browser = require('zombie'); +const Wappalyzer = require('./wappalyzer'); +const request = require('request'); +const url = require('url'); +const fs = require('fs'); +const Browser = require('zombie'); + +const json = JSON.parse(fs.readFileSync(__dirname + '/apps.json')); + +class Driver { + constructor(pageUrl, options) { + this.options = Object.assign({}, { + debug: false, + delay: 500, + maxDepth: 3, + maxUrls: 10, + maxWait: 3000, + recursive: false, + userAgent: 'Mozilla/5.0 (compatible; Wappalyzer)', + }, options || {}); + + this.origPageUrl = url.parse(pageUrl); + this.analyzedPageUrls = []; + this.apps = []; + + this.wappalyzer = new Wappalyzer(); + + this.wappalyzer.apps = json.apps; + this.wappalyzer.categories = json.categories; + + this.wappalyzer.driver.log = (message, source, type) => this.log(message, source, type); + this.wappalyzer.driver.displayApps = detected => this.displayApps(detected); + } + + analyze() { + return this.crawl(this.origPageUrl); + } + + log(message, source, type) { + if ( Boolean(this.options.debug) ) { + console.log('[wappalyzer ' + type + ']', '[' + source + ']', message); + } + } - const json = JSON.parse(fs.readFileSync(__dirname + '/apps.json')); + displayApps(detected) { + Object.keys(detected).forEach(appName => { + const app = detected[appName]; - return { - analyze: pageUrl => { - const origPageUrl = url.parse(pageUrl); - const analyzedPageUrls = []; - const apps = []; + var categories = []; - const wappalyzer = new Wappalyzer(); + app.props.cats.forEach(id => { + var category = {}; - wappalyzer.apps = json.apps; - wappalyzer.categories = json.categories; + category[id] = json.categories[id].name; - wappalyzer.driver.log = (message, source, type) => { - if ( Boolean(options.debug) ) { - console.log('[wappalyzer ' + type + ']', '[' + source + ']', message); - } - }; + categories.push(category) + }); - wappalyzer.driver.displayApps = detected => { - Object.keys(detected).forEach(appName => { - const app = detected[appName]; + if ( !this.apps.some(detectedApp => detectedApp.name === app.name) ) { + this.apps.push({ + name: app.name, + confidence: app.confidenceTotal.toString(), + version: app.version, + icon: app.props.icon || 'default.svg', + website: app.props.website, + categories + }); + } + }); + } - var categories = []; + fetch(pageUrl, index, depth) { + return new Promise(async resolve => { + // Return when the URL is a duplicate or maxUrls has been reached + if ( this.analyzedPageUrls.indexOf(pageUrl.href) !== -1 || this.analyzedPageUrls.length >= this.options.maxUrls ) { + return resolve(); + } - app.props.cats.forEach(id => { - var category = {}; + this.analyzedPageUrls.push(pageUrl.href); - category[id] = wappalyzer.categories[id].name; + this.wappalyzer.log('depth: ' + depth + '; delay: ' + ( this.options.delay * index ) + 'ms; url: ' + pageUrl.href, 'driver'); - categories.push(category) - }); - - if ( !apps.some(detectedApp => detectedApp.name === app.name) ) { - apps.push({ - name: app.name, - confidence: app.confidenceTotal.toString(), - version: app.version, - icon: app.props.icon || 'default.svg', - website: app.props.website, - categories - }); - } - }); - }; + // Be nice + if ( this.options.delay ) { + await this.sleep(this.options.delay * index); + } const browser = new Browser({ - userAgent: options.userAgent, - waitDuration: options.maxWait + 'ms', + userAgent: this.options.userAgent, + waitDuration: this.options.maxWait + 'ms', }); - const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); - - const fetch = (pageUrl, index, depth) => { - return new Promise(async (resolve, reject) => { - // Return when the URL is a duplicate or maxUrls has been reached - if ( analyzedPageUrls.indexOf(pageUrl.href) !== -1 || analyzedPageUrls.length >= options.maxUrls ) { - return resolve(); - } - - analyzedPageUrls.push(pageUrl.href); - - wappalyzer.log('depth: ' + depth + '; delay: ' + ( options.delay * index ) + 'ms; url: ' + pageUrl.href, 'driver'); + browser.visit(pageUrl.href, error => { + if ( !browser.resources['0'] || !browser.resources['0'].response ) { + this.wappalyzer.log('No response from server', 'browser', 'error'); - // Be nice - if ( options.delay ) { - await sleep(options.delay * index); - } - - browser.visit(pageUrl.href, error => { - if ( !browser.resources['0'] || !browser.resources['0'].response ) { - wappalyzer.log('No response from server', 'browser', 'error'); - - return resolve(); - } - - browser.wait() - .catch(error => wappalyzer.log(error.message, 'browser')) - .finally(() => { - wappalyzer.driver.document = browser.document; + return resolve(); + } - const headers = {}; + browser.wait() + .catch(error => this.wappalyzer.log(error.message, 'browser', 'error')) + .finally(() => { + const headers = {}; - browser.resources['0'].response.headers._headers.forEach(header => { - if ( !headers[header[0]] ){ - headers[header[0]] = []; - } + browser.resources['0'].response.headers._headers.forEach(header => { + if ( !headers[header[0]] ){ + headers[header[0]] = []; + } - headers[header[0]].push(header[1]); - }); + headers[header[0]].push(header[1]); + }); - const vars = Object.getOwnPropertyNames(browser.window); - const html = browser.html(); - const scripts = Array.prototype.slice - .apply(browser.document.scripts) - .filter(s => s.src) - .map(s => s.src); + const vars = Object.getOwnPropertyNames(browser.window); + const html = browser.html(); + const scripts = Array.prototype.slice + .apply(browser.document.scripts) + .filter(s => s.src) + .map(s => s.src); + + this.wappalyzer.analyze(pageUrl.hostname, pageUrl.href, { + headers, + html, + env: vars, + scripts + }); - wappalyzer.analyze(pageUrl.hostname, pageUrl.href, { - headers, - html, - env: vars, - scripts - }); + const links = browser.body.getElementsByTagName('a'); - resolve(browser); - }); + resolve(links); }); - }); - }; + }); + }); + } - const crawl = async (pageUrl, index, depth) => { - try { - const browser = await fetch(pageUrl, index, depth); + async crawl(pageUrl, index = 1, depth = 1) { + try { + var links = await this.fetch(pageUrl, index, depth); - if ( options.recursive && depth < options.maxDepth && browser ) { - const links = Array.from(browser.body.getElementsByTagName('a')).filter(link => link.hostname === origPageUrl.hostname); + if ( this.options.recursive && depth < this.options.maxDepth && links ) { + links = Array.from(links).filter(link => link.hostname === this.origPageUrl.hostname); - await Promise.all(links.map(async (link, index) => { - link.hash = ''; + await Promise.all(links.map(async (link, index) => { + link.hash = ''; - return crawl(link, index, depth + 1); - })); - } + return this.crawl(link, index + 1, depth + 1); + })); + } - return Promise.resolve(apps); - } catch (error) { - return Promise.reject(error); - } - }; - - return crawl(origPageUrl, 1, 1); + return Promise.resolve(this.apps); + } catch (error) { + return Promise.reject(error); } - }; + } + + sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } }; -module.exports = driver; +module.exports = Driver; diff --git a/src/drivers/npm/index.js b/src/drivers/npm/index.js index 494fa9f43..c8c254850 100644 --- a/src/drivers/npm/index.js +++ b/src/drivers/npm/index.js @@ -1,14 +1,6 @@ 'use strict'; -const options = { - userAgent: 'Mozilla/5.0 (compatible; Wappalyzer)', - maxWait: 3000, - debug: true, - recursive: true, - maxDepth: 3, - maxUrls: 10, - delay: 500, -}; +const Wappalyzer = require('./driver'); const args = process.argv.slice(2); @@ -20,6 +12,7 @@ if ( !url ) { process.exit(1); } +var options = {}; var arg; while ( arg = args.shift() ) { @@ -29,13 +22,13 @@ while ( arg = args.shift() ) { var key = matches[1].replace(/-\w/g, matches => matches[1].toUpperCase()); var value = matches[2]; - options.hasOwnProperty(key) && ( options[key] = value ); + options[key] = value; } } -const wappalyzer = require('./driver')(options); +const wappalyzer = new Wappalyzer(url, options); -wappalyzer.analyze(url) +wappalyzer.analyze() .then(json => { process.stdout.write(JSON.stringify(json) + '\n') From 50818de3b81f4cb58d82afd730f0d6becd939348 Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Sun, 19 Nov 2017 15:25:06 +1100 Subject: [PATCH 104/117] Remove async/await in NPM driver for ES6 compatibility --- src/drivers/npm/driver.js | 133 +++++++++++++++++++------------------- 1 file changed, 67 insertions(+), 66 deletions(-) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 2101fee92..709e60355 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -20,6 +20,13 @@ class Driver { userAgent: 'Mozilla/5.0 (compatible; Wappalyzer)', }, options || {}); + this.options.debug = Boolean(this.options.debug); + this.options.recursive = Boolean(this.options.recursive); + this.options.delay = this.options.recursive ? parseInt(this.options.delay, 10) : 0; + 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.origPageUrl = url.parse(pageUrl); this.analyzedPageUrls = []; this.apps = []; @@ -38,9 +45,7 @@ class Driver { } log(message, source, type) { - if ( Boolean(this.options.debug) ) { - console.log('[wappalyzer ' + type + ']', '[' + source + ']', message); - } + this.options.debug && console.log('[wappalyzer ' + type + ']', '[' + source + ']', message); } displayApps(detected) { @@ -71,7 +76,7 @@ class Driver { } fetch(pageUrl, index, depth) { - return new Promise(async resolve => { + return new Promise(resolve => { // Return when the URL is a duplicate or maxUrls has been reached if ( this.analyzedPageUrls.indexOf(pageUrl.href) !== -1 || this.analyzedPageUrls.length >= this.options.maxUrls ) { return resolve(); @@ -81,80 +86,76 @@ class Driver { this.wappalyzer.log('depth: ' + depth + '; delay: ' + ( this.options.delay * index ) + 'ms; url: ' + pageUrl.href, 'driver'); - // Be nice - if ( this.options.delay ) { - await this.sleep(this.options.delay * index); - } - const browser = new Browser({ userAgent: this.options.userAgent, waitDuration: this.options.maxWait + 'ms', }); - browser.visit(pageUrl.href, error => { - if ( !browser.resources['0'] || !browser.resources['0'].response ) { - this.wappalyzer.log('No response from server', 'browser', 'error'); - - return resolve(); - } - - browser.wait() - .catch(error => this.wappalyzer.log(error.message, 'browser', 'error')) - .finally(() => { - const headers = {}; - - browser.resources['0'].response.headers._headers.forEach(header => { - if ( !headers[header[0]] ){ - headers[header[0]] = []; - } - - headers[header[0]].push(header[1]); - }); - - const vars = Object.getOwnPropertyNames(browser.window); - const html = browser.html(); - const scripts = Array.prototype.slice - .apply(browser.document.scripts) - .filter(s => s.src) - .map(s => s.src); - - this.wappalyzer.analyze(pageUrl.hostname, pageUrl.href, { - headers, - html, - env: vars, - scripts - }); - - const links = browser.body.getElementsByTagName('a'); - - resolve(links); + this.sleep(this.options.delay * index) + .then(() => { + browser.visit(pageUrl.href, error => { + if ( !browser.resources['0'] || !browser.resources['0'].response ) { + this.wappalyzer.log('No response from server', 'browser', 'error'); + + return resolve(); + } + + browser.wait() + .catch(error => this.wappalyzer.log(error.message, 'browser', 'error')) + .finally(() => { + const headers = {}; + + browser.resources['0'].response.headers._headers.forEach(header => { + if ( !headers[header[0]] ){ + headers[header[0]] = []; + } + + headers[header[0]].push(header[1]); + }); + + const vars = Object.getOwnPropertyNames(browser.window); + const html = browser.html(); + const scripts = Array.prototype.slice + .apply(browser.document.scripts) + .filter(s => s.src) + .map(s => s.src); + + this.wappalyzer.analyze(pageUrl.hostname, pageUrl.href, { + headers, + html, + env: vars, + scripts + }); + + const links = browser.body.getElementsByTagName('a'); + + resolve(links); + }); }); - }); + }); }); } - async crawl(pageUrl, index = 1, depth = 1) { - try { - var links = await this.fetch(pageUrl, index, depth); - - if ( this.options.recursive && depth < this.options.maxDepth && links ) { - links = Array.from(links).filter(link => link.hostname === this.origPageUrl.hostname); - - await Promise.all(links.map(async (link, index) => { - link.hash = ''; - - return this.crawl(link, index + 1, depth + 1); - })); - } - - return Promise.resolve(this.apps); - } catch (error) { - return Promise.reject(error); - } + crawl(pageUrl, index = 1, depth = 1) { + return new Promise(resolve => { + this.fetch(pageUrl, index, depth) + .then(links => { + if ( links && Boolean(this.options.recursive) && depth < this.options.maxDepth ) { + links = Array.from(links) + .filter(link => link.hostname === this.origPageUrl.hostname) + .map(link => { link.hash = ''; return link }); + + return Promise.all(links.map((link, index) => this.crawl(link, index + 1, depth + 1))); + } else { + return Promise.resolve(); + } + }) + .then(() => resolve(this.apps)); + }); } sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); + return ms ? new Promise(resolve => setTimeout(resolve, ms)) : Promise.resolve(); } }; From b1672820cedaa1ed40478960fa046ea794ea2904 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 21 Nov 2017 22:43:58 +0100 Subject: [PATCH 105/117] Improve a bit the demandware detection (#1846) This can be tested [here](view-source:https://www.undiz.com/en/home) --- src/apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps.json b/src/apps.json index 10791e7a6..27f5b810d 100644 --- a/src/apps.json +++ b/src/apps.json @@ -7495,6 +7495,7 @@ "Server": "Demandware eCommerce Server" }, "html": "<[^>]+demandware\\.edgesuite", + "script": "/demandware\\.static/", "icon": "Salesforce.svg", "website": "http://demandware.com" }, From bab0daf214c5a7d5d24b8251dd7803629b8b36d3 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 21 Nov 2017 22:44:15 +0100 Subject: [PATCH 106/117] Add svbtle detection (#1847) * Add svbtle detection This can be tested on any svbtle blog, likes [this one](https://blog.dijit.sh/). * Fix some minor issues, courtesy of @gadcam --- src/apps.json | 11 +++++++++++ src/icons/svbtle.png | Bin 0 -> 1699 bytes 2 files changed, 11 insertions(+) create mode 100644 src/icons/svbtle.png diff --git a/src/apps.json b/src/apps.json index 27f5b810d..35d3db596 100644 --- a/src/apps.json +++ b/src/apps.json @@ -8345,6 +8345,17 @@ "script": "supersized(?:\\.([\\d.]*[\\d]))?.*\\.js\\;version:\\1", "website": "http://buildinternet.com/project/supersized" }, + "Svbtle": { + "cats": [ + "11" + ], + "icon": "svbtle.png", + "meta": { + "generator": "^Svbtle\\.com$" + }, + "url": "\\.svbtle\\.com", + "website": "https://www.svbtle.com" + }, "SweetAlert": { "cats": [ "12" diff --git a/src/icons/svbtle.png b/src/icons/svbtle.png new file mode 100644 index 0000000000000000000000000000000000000000..235e1eb028e59702fe4cdbc8f9ae0efae89a4e86 GIT binary patch literal 1699 zcmV;U23+}xP)`$i^~Ya#1|72i4SfuZfx1I>|td1BFR?N zXpBZw489nmM#QlZt)PYuv}A5Cg{cH%pd}hh>_|Fhzddlt7IW`C=eGCOn(<3cn%tZ7 zedqT(f9^TocM7ax6|49^Lr9XJGyo!iI_b9zfE_@N)P@LvSpZW2`~YqP_yxerH(7v> z0K6-e+Bj{D0=OfUt8c=H$^fuO>P6DI{0`s~0G3oG{~3Tu1Bky`W&nJhO2prh<|`$+ z_!F2~y5ZB;K>XG6&Fdik7Jwg9fc#4N8Gs{M zm6es)x^*i=QAAl;8SHjDa&mGY2m&IJ2xezzF*P*>zu%AH;bGjpdl#`-Oe>!#fDffM z8ZzuP^?XrL5gj;ifF3=1L|XCq@nh=j?4)(;*2Oat44Dqxb3Q*mpSrrbXmN3o5=Ar` zrQ^qslhta~x+duUjpuUS($Ye6b91COo<4m_J9qBXB0{@f_XtgI}uSS(anSV)^UZ>IhG_tW6uAh!sdBjMXb4mJUngRZVFW@CGMduijw zjokCs<#N%PGiR7~PoF-`V{cCDXL|*$EaT11&8l;Le0-c58XDr>+-%vhg>K!tr7FU% zUAuT}eHxDdV`@fob8~5Sc2==rmoHzYwQJWVyu-`P%%r})K1DyzpFgL9f&!MEKs><= zRihq{N3l^CFJ2@;5Om$@s)^9u-OXd8S&IOjYQ_o+3l%pxV`F2Kot>@wUf*ms)5yq( ztk0#TB`PT?VcGazivV}jjJ3D7EA~brbDmX1QB?Hn@pxGE$F&476%7f3Ko1@~kZr{I z^XCme^_@C(O4fHU7^F38*0Abl@(3WR87VI>SL}uI@^ZrkSigR~qW}8(dRG1Sv#lkt66Zn-HHMv3s;k06u1`x*0!LkeH3Hu3WT(Ikb20^Zp;r6F3;EZ%xw%OrnV+98`#chfV0jQI z;!glEmH;6&3!#wwYlkCgVR@94l*m3027|1sL7qi$Qq98T~p{0&#LO@vA;=e6|JbKP+WmGY}jD<>R(z~n#fl8eO(Si zN{No%-d@86IC=7EL9pU+1Yi$!eI2%zDqd% zz;a@-Sm@fdYe`Fv4i69W9=~;o(YbjStD{Gc8cx2ar-#gDGw*b2)NA|w1@HXbv1124 zd-hCs;tLB4w0rk%EsJP}-e(Z*D>7EAm5v=dM$u?AVd6_mOVr)nO~u8YkGp!H6u?g@ME<&#VXr5?Oaby8c+J=(h0&5t{5Jp%NFjU$U^)rJ=dgV9OF#<3 z0^nn*cl0J6!186MY&{!nq>4@W_fJzb37kVlq!3-dA(^BkjSLf(|K3uE Date: Tue, 21 Nov 2017 22:44:43 +0100 Subject: [PATCH 107/117] Improve a bit our Bootstrap handling (#1848) - It's "Bootstrap", not "twitter bootstrap" - The `env` was funky - Factorize a bit the `script` section - Rename the icon - The website is in https --- src/apps.json | 13 ++++++------- src/icons/{Twitter Bootstrap.png => Bootstrap.png} | Bin 2 files changed, 6 insertions(+), 7 deletions(-) rename src/icons/{Twitter Bootstrap.png => Bootstrap.png} (100%) diff --git a/src/apps.json b/src/apps.json index 35d3db596..b1a8979d7 100644 --- a/src/apps.json +++ b/src/apps.json @@ -461,7 +461,7 @@ "env": "^AUI$", "icon": "AlloyUI.png", "implies": [ - "Twitter Bootstrap", + "Bootstrap", "YUI" ], "script": "^https?://cdn\\.alloyui\\.com/", @@ -8259,7 +8259,7 @@ ], "icon": "strapdown.js.png", "implies": [ - "Twitter Bootstrap", + "Bootstrap", "Google Code Prettify" ], "script": "strapdown\\.js", @@ -8797,19 +8797,18 @@ "script": "//platform\\.twitter\\.com/widgets\\.js", "website": "http://twitter.com" }, - "Twitter Bootstrap": { + "Bootstrap": { "cats": [ "18" ], - "env": "^Twipsy$\\;confidence:50", "html": [ "" + "\\.cm-noscript[^>]+" ], "icon": "CS Cart.png", "implies": "PHP", @@ -1480,7 +1480,7 @@ ], "headers": { "Access-Control-Allow-Headers": "X-CKAN-API-KEY", - "Link": "; rel=shortlink" + "Link": "; rel=shortlink" }, "icon": "Ckan.png", "implies": [ @@ -1605,7 +1605,7 @@ "16" ], "html": "(?:]+class=\"coinhive-captcha[^>]+data-key|]+data-key[^>]+class=\"coinhive-captcha)", - "script": "https?://authedmine.com/(?:lib/captcha|captcha)", + "script": "https?://authedmine\\.com/(?:lib/captcha|captcha)", "icon": "CoinHive.svg", "website": "https://coinhive.com" }, @@ -2207,7 +2207,7 @@ "36" ], "icon": "DoubleClick.svg", - "script": "https?://fls.doubleclick.net", + "script": "https?://fls\\.doubleclick\\.net", "website": "http://support.google.com/ds/answer/6029713?hl=en" }, "DoubleClick for Publishers (DFP)": { @@ -3071,7 +3071,7 @@ ], "html": [ "", "icon": "Lightspeed.svg", - "script": "http://assets.webshopapp.com", + "script": "http://assets\\.webshopapp\\.com", "url": "seoshop.webshopapp.com", "website": "http://www.lightspeedhq.com/products/ecommerce/" }, @@ -4811,10 +4811,10 @@ "]*>[^]{0,128}?src\\s*=\\s*['\"]//counter\\.yadro\\.ru/hit(?:;\\S+)?\\?(?:t\\d+\\.\\d+;)?r", "", "", - "]*.css" + "s3\\.amazonaws\\.com/downloads\\.mailchimp\\.com/js/mc-validate\\.js", + "cdn-images\\.mailchimp\\.com/[^>]*\\.css" ], "website": "http://mailchimp.com" }, @@ -5094,7 +5094,7 @@ "2" ], "env": "mm_(?:config|license|user|current_user_id)", - "html": "", + "html": "", "icon": "mattermost.png", "implies": [ "Go", @@ -5277,7 +5277,7 @@ "20" ], "icon": "Microsoft PowerPoint.svg", - "html": "(?:]*xmlns:w=\"urn:schemas-microsoft-com:office:powerpoint\"||[^<]+[^!]+\\d+(?:[^!]+([\\d.]+))?)\\;version:\\1", + "html": "(?:]*xmlns:w=\"urn:schemas-microsoft-com:office:powerpoint\"||[^<]+[^!]+\\d+(?:[^!]+([\\d.]+))?)\\;version:\\1", "meta": { "generator": "Microsoft PowerPoint ( [\\d.]+)?\\;version:\\1", "ProgId": "^PowerPoint\\." @@ -5329,7 +5329,7 @@ "cats": [ "6" ], - "html": "", + "html": "Powered by ", "icon": "octopress.png", "implies": "Jekyll", "meta": { @@ -6865,7 +6865,7 @@ "cats": [ "19" ], - "html": "]+pygments.css[\"']", + "html": "]+pygments\\.css[\"']", "icon": "pygments.png", "website": "http://pygments.org" }, @@ -7028,7 +7028,7 @@ "icon": "Rakuten DBCore.png", "meta": { "generator": "Rakuten DBCore", - "generator:site": "http://ecservice.rakuten.com.br" + "generator:site": "http://ecservice\\.rakuten\\.com\\.br" }, "website": "http://ecservice.rakuten.com.br" }, @@ -7584,7 +7584,7 @@ "10" ], "env": "^analytics$", - "html": "", + "html": "", "icon": "Segment.png", "script": "cdn\\.segment\\.com/analytics\\.js", "website": "http://segment.com" @@ -8004,7 +8004,7 @@ "env": "^io$\\;confidence:20", "icon": "Socket.io.png", "implies": "Node.js", - "script": "socket.io.*\\.js", + "script": "socket\\.io.*\\.js", "website": "http://socket.io" }, "Solodev": { @@ -8269,7 +8269,7 @@ "cats": [ "6" ], - "html": "", + "html": "", "icon": "strato.png", "website": "http://shop.strato.com" }, @@ -8721,7 +8721,7 @@ ], "env": "^TrackJs$", "icon": "TrackJs.png", - "script": "tracker.js", + "script": "tracker\\.js", "website": "http://trackjs.com" }, "Translucide": { @@ -8961,7 +8961,7 @@ "1" ], "headers": { - "X-Generated-By": "UMI.CMS" + "X-Generated-By": "UMI\\.CMS" }, "icon": "UMI.CMS.png", "implies": "PHP", @@ -9297,7 +9297,7 @@ "6" ], "env": "^WEBXPAY$", - "html": "Powered by WEBXPAY<", + "html": "Powered by WEBXPAY<", "icon": "WEBXPAY.png", "website": "https://webxpay.com" }, @@ -9760,7 +9760,7 @@ "6" ], "html": [ - "Powered by xonic-solutions Shopsoftware" + "Powered by xonic-solutions Shopsoftware" ], "icon": "xonic.png", "meta": { @@ -9888,7 +9888,7 @@ ], "env": "^yii$", "html": [ - "Powered by Yii Framework", + "Powered by Yii Framework", "", "]+id='cgit'", - "generated by cgit v([\\d.a-z-]+)\\;version:\\1" + "generated by cgit v([\\d.a-z-]+)\\;version:\\1" ], "icon": "cgit.png", "implies": "git", @@ -10213,7 +10213,7 @@ "47" ], "headers": { - "X-Powered-By": "^enduro.js$" + "X-Powered-By": "^enduro\\.js$" }, "icon": "enduro.js.svg", "implies": "Node.js", @@ -10253,7 +10253,7 @@ "meta": { "generator": "gitweb(?:/([\\d.]+\\d))?\\;version:\\1" }, - "script": "static/gitweb.js$", + "script": "static/gitweb\\.js$", "website": "http://git-scm.com" }, "govCMS": { @@ -10672,7 +10672,7 @@ "cats": [ "19" ], - "html": "ownCloud Inc.
    Your Cloud, Your Data, Your Way!", + "html": "ownCloud Inc\\.
    Your Cloud, Your Data, Your Way!", "icon": "ownCloud.png", "implies": "PHP", "meta": { @@ -10774,8 +10774,8 @@ ], "html": [ " v([0-9.]+)<\\;version:\\1", - "", - "Powered by ", + "Powered by Date: Sat, 25 Nov 2017 12:12:11 +1100 Subject: [PATCH 114/117] Catch browser.html() exceptions in NPM driver --- src/drivers/npm/driver.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 349071184..b54b88a02 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -114,8 +114,15 @@ class Driver { headers[header[0]].push(header[1]); }); + try { + const html = browser.html(); + } catch ( e ) { + this.wappalyzer.log(error.message, 'browser', 'error'); + + return resolve(); + } + const vars = Object.getOwnPropertyNames(browser.window); - const html = browser.html(); const scripts = Array.prototype.slice .apply(browser.document.scripts) .filter(s => s.src) From 85ec4c694594808058ac37b48258d06dcbe39326 Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Sat, 25 Nov 2017 12:12:38 +1100 Subject: [PATCH 115/117] Catch browser.html() exceptions in NPM driver --- src/drivers/npm/driver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index b54b88a02..8e41b6d65 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -119,7 +119,7 @@ class Driver { } catch ( e ) { this.wappalyzer.log(error.message, 'browser', 'error'); - return resolve(); + const html = ''; } const vars = Object.getOwnPropertyNames(browser.window); From 727215463c98c30f2da42480fbc1a7a407e2e9c8 Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Sat, 25 Nov 2017 12:44:42 +1100 Subject: [PATCH 116/117] Fix incorrect object iteration --- src/drivers/npm/driver.js | 6 +++--- src/wappalyzer.js | 12 ++++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 8e41b6d65..5cbf30242 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -114,12 +114,12 @@ class Driver { headers[header[0]].push(header[1]); }); + let html = ''; + try { - const html = browser.html(); + html = browser.html(); } catch ( e ) { this.wappalyzer.log(error.message, 'browser', 'error'); - - const html = ''; } const vars = Object.getOwnPropertyNames(browser.window); diff --git a/src/wappalyzer.js b/src/wappalyzer.js index 9936e6b9e..a3f714e56 100644 --- a/src/wappalyzer.js +++ b/src/wappalyzer.js @@ -68,7 +68,7 @@ class Wappalyzer { if ( data.scripts ) { this.analyzeScripts(app, data.scripts); } - + if ( data.headers ) { this.analyzeHeaders(app, data.headers); } @@ -181,13 +181,17 @@ class Wappalyzer { * Enclose string in array */ asArray(value) { - return typeof value === 'string' ? [ value ] : value; + return value instanceof Array ? value : [ value ]; } /** * Parse apps.json patterns */ parsePatterns(patterns) { + if ( !patterns ) { + return []; + } + var parsed = {}; // Convert string to object containing array containing string @@ -197,7 +201,7 @@ class Wappalyzer { }; } - for ( var key in patterns ) { + Object.keys(patterns).forEach(key => { parsed[key] = []; this.asArray(patterns[key]).forEach(pattern => { @@ -226,7 +230,7 @@ class Wappalyzer { parsed[key].push(attrs); }); - } + }); // Convert back to array if the original pattern list was an array (or string) if ( 'main' in parsed ) { From aebf15b841e0e28b2041b7dc19e6368f447bd94d Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Thu, 30 Nov 2017 09:06:01 +1100 Subject: [PATCH 117/117] Add requestTimeout option, timer for debugging --- src/drivers/npm/README.md | 18 ++++++------ src/drivers/npm/driver.js | 40 +++++++++++++++++++++++--- src/drivers/npm/package.json | 2 +- src/drivers/webextension/manifest.json | 2 +- 4 files changed, 48 insertions(+), 14 deletions(-) diff --git a/src/drivers/npm/README.md b/src/drivers/npm/README.md index 3875fdbf9..c13078019 100644 --- a/src/drivers/npm/README.md +++ b/src/drivers/npm/README.md @@ -27,13 +27,14 @@ node index.js [url] [options] ### Options ``` - --debug=0|1 Output debug messages. - --delay=ms Wait for ms milliseconds between requests. - --max-depth=num Don't analyze pages more than num levels deep. - --max-urls=num Exit when num URLs have been analyzed. - --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. + --debug=0|1 Output debug messages. + --delay=ms Wait for ms milliseconds between requests. + --max-depth=num Don't analyze pages more than num levels deep. + --max-urls=num Exit when num URLs have been analyzed. + --max-wait=ms Wait no more than ms milliseconds for page resources to load. + --recursive=0|1 Follow links on pages (crawler). + --request-timeout=ms Wait no more than ms millisecond for the page to load. + --user-agent=str Set the user agent string. ``` @@ -45,8 +46,9 @@ const options = { delay: 500, maxDepth: 3, maxUrls: 10, - maxWait: 3000, + maxWait: 1000, recursive: true, + requestTimeout: 3000, userAgent: 'Wappalyzer', }; diff --git a/src/drivers/npm/driver.js b/src/drivers/npm/driver.js index 5cbf30242..d15961ac9 100644 --- a/src/drivers/npm/driver.js +++ b/src/drivers/npm/driver.js @@ -15,8 +15,9 @@ class Driver { delay: 500, maxDepth: 3, maxUrls: 10, - maxWait: 3000, + maxWait: 1000, recursive: false, + requestTimeout: 3000, userAgent: 'Mozilla/5.0 (compatible; Wappalyzer)', }, options || {}); @@ -41,6 +42,11 @@ class Driver { } analyze() { + this.time = { + start: new Date().getTime(), + last: new Date().getTime(), + } + return this.crawl(this.origPageUrl); } @@ -49,6 +55,8 @@ class Driver { } displayApps(detected) { + this.timer('displayApps'); + Object.keys(detected).forEach(appName => { const app = detected[appName]; @@ -76,6 +84,8 @@ class Driver { } fetch(pageUrl, index, depth) { + this.timer('fetch'); + return new Promise(resolve => { // Return when the URL is a duplicate or maxUrls has been reached if ( this.analyzedPageUrls.indexOf(pageUrl.href) !== -1 || this.analyzedPageUrls.length >= this.options.maxUrls ) { @@ -94,16 +104,22 @@ class Driver { this.sleep(this.options.delay * index) .then(() => { - browser.visit(pageUrl.href, error => { + this.timer('browser.visit start'); + + browser.visit(pageUrl.href, this.options.requestTimeout, error => { + this.timer('browser.visit end'); + if ( !browser.resources['0'] || !browser.resources['0'].response ) { this.wappalyzer.log('No response from server', 'browser', 'error'); return resolve(); } - browser.wait() + browser.wait(this.options.maxWait) .catch(error => this.wappalyzer.log(error.message, 'browser', 'error')) .finally(() => { + this.timer('browser.wait end'); + const headers = {}; browser.resources['0'].response.headers._headers.forEach(header => { @@ -145,6 +161,8 @@ class Driver { } crawl(pageUrl, index = 1, depth = 1) { + this.timer('crawl'); + return new Promise(resolve => { this.fetch(pageUrl, index, depth) .then(links => { @@ -158,13 +176,27 @@ class Driver { return Promise.resolve(); } }) - .then(() => resolve(this.apps)); + .then(() => { + this.timer('done'); + + resolve(this.apps) + }); }); } sleep(ms) { return ms ? new Promise(resolve => setTimeout(resolve, ms)) : Promise.resolve(); } + + timer(step) { + const time = new Date().getTime(); + const sinceStart = ( Math.round(( time - this.time.start ) / 10) / 100) + 's'; + const sinceLast = ( Math.round(( time - this.time.last ) / 10) / 100) + 's'; + + this.wappalyzer.log('[' + step + '] Time lapsed: ' + sinceLast + ' / ' + sinceStart, 'driver'); + + this.time.last = time; + } }; module.exports = Driver; diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 4bf8607a4..7515906fa 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.1.6", + "version": "5.2.0", "author": "Elbert Alias", "license": "GPL-3.0", "repository": { diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index 0abf8abdd..b46567b82 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.1.6", + "version": "5.2.0", "default_locale": "en", "manifest_version": 2, "icons": {