diff --git a/.gitignore b/.gitignore
index 9e926bfbc..8343ce16c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,8 @@
/npm-debug.log
/npm-debug.log
+package-lock.json
+
!.gitkeep
# Junk files
diff --git a/Dockerfile b/Dockerfile
index f2a28e638..d781318ad 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -8,7 +8,6 @@ RUN apk update && apk add --no-cache \
bash \
curl \
fontconfig \
- nodejs \
nodejs-npm \
optipng \
zip
@@ -17,14 +16,15 @@ RUN apk update && apk add --no-cache \
# https://github.com/dustinblackman/phantomized
RUN curl -Ls "https://github.com/dustinblackman/phantomized/releases/download/2.1.1a/dockerized-phantomjs.tar.gz" | tar xz -C /
-RUN apk del \
- curl
+RUN apk del curl
-RUN npm i -g \
+RUN npm i -g n npm@latest
+
+RUN n stable
+
+RUN npm i --unsafe-perm --silent -g \
jsonlint-cli \
- manifoldjs \
- svg2png-many \
- yarn
+ svg2png-many
RUN mkdir -p $WAPPALYZER_DIR
diff --git a/bin/build b/bin/build
index 2bdd89fa1..7ddc048d7 100755
--- a/bin/build
+++ b/bin/build
@@ -22,7 +22,7 @@ find . -name ".DS_Store" -exec rm {} \;
echo "Prettifying apps.json..."
-jsonlint-cli -ist $'\t' src/apps.json
+sed -e 's/\\\\/{{ESCAPE}}/g' src/apps.json | jsonlint-cli -ps | sed -e 's/{{ESCAPE}}/\\\\/g' > /tmp/apps.json && cat /tmp/apps.json > src/apps.json
echo "Converting SVG icons to PNG..."
diff --git a/bin/validate b/bin/validate
index dd9b12729..1d6587600 100755
--- a/bin/validate
+++ b/bin/validate
@@ -6,7 +6,7 @@ set -eu
echo "Validating apps.json..."
-jsonlint-cli -tps schema.json src/apps.json > /tmp/apps.json && mv /tmp/apps.json src/apps.json
+jsonlint-cli -s schema.json src/apps.json
echo "Validating regular expressions..."
diff --git a/package-lock.json b/npm-shrinkwrap.json
similarity index 82%
rename from package-lock.json
rename to npm-shrinkwrap.json
index 4fcb441c4..86c50adb4 100644
--- a/package-lock.json
+++ b/npm-shrinkwrap.json
@@ -20,7 +20,7 @@
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
- "balanced-match": "1.0.0",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
@@ -36,12 +36,12 @@
"integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
"dev": true,
"requires": {
- "assertion-error": "1.1.0",
- "check-error": "1.0.2",
- "deep-eql": "3.0.1",
- "get-func-name": "2.0.0",
- "pathval": "1.1.0",
- "type-detect": "4.0.8"
+ "assertion-error": "^1.0.1",
+ "check-error": "^1.0.1",
+ "deep-eql": "^3.0.0",
+ "get-func-name": "^2.0.0",
+ "pathval": "^1.0.0",
+ "type-detect": "^4.0.0"
}
},
"check-error": {
@@ -51,9 +51,9 @@
"dev": true
},
"commander": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
- "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
"dev": true
},
"concat-map": {
@@ -77,7 +77,7 @@
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
"dev": true,
"requires": {
- "type-detect": "4.0.8"
+ "type-detect": "^4.0.0"
}
},
"diff": {
@@ -115,24 +115,24 @@
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"growl": {
- "version": "1.10.3",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz",
- "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==",
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
"dev": true
},
"has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"he": {
@@ -152,8 +152,8 @@
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
"inherits": {
@@ -167,7 +167,7 @@
"resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
"integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
"requires": {
- "html-comment-regex": "1.1.1"
+ "html-comment-regex": "^1.1.0"
}
},
"minimatch": {
@@ -176,7 +176,7 @@
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.11"
+ "brace-expansion": "^1.1.7"
}
},
"minimist": {
@@ -195,22 +195,22 @@
}
},
"mocha": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.0.tgz",
- "integrity": "sha512-d6RWgYPILd+AoWVOxiD0UwUqRicnE1inTxMr40CXOgqYve1MvnKntoLAtLIcxjEeVjEoYYTe5QAq3mUc6/ySjQ==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
+ "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
"dev": true,
"requires": {
"browser-stdout": "1.3.1",
- "commander": "2.11.0",
+ "commander": "2.15.1",
"debug": "3.1.0",
"diff": "3.5.0",
"escape-string-regexp": "1.0.5",
"glob": "7.1.2",
- "growl": "1.10.3",
+ "growl": "1.10.5",
"he": "1.1.1",
"minimatch": "3.0.4",
"mkdirp": "0.5.1",
- "supports-color": "4.4.0"
+ "supports-color": "5.4.0"
}
},
"ms": {
@@ -225,7 +225,7 @@
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"path-is-absolute": {
@@ -250,22 +250,22 @@
"resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz",
"integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=",
"requires": {
- "pify": "3.0.0",
- "safe-buffer": "5.1.1"
+ "pify": "^3.0.0",
+ "safe-buffer": "^5.1.1"
}
},
"safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"supports-color": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
- "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
- "has-flag": "2.0.0"
+ "has-flag": "^3.0.0"
}
},
"type-detect": {
diff --git a/package.json b/package.json
index 2d49eb014..7f1cc55b6 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,7 @@
},
"devDependencies": {
"chai": "^4.1.2",
- "mocha": "^5.0.1"
+ "mocha": "^5.2.0"
},
"scripts": {
"test": "mocha -R spec ./test"
diff --git a/run b/run
index ae85b6344..06556bb07 100755
--- a/run
+++ b/run
@@ -10,7 +10,16 @@ fi
cmd="docker run --rm -v "$(pwd):/opt/wappalyzer" -it wappalyzer/dev"
-$cmd sh -c "yarn install; cd src/drivers/webextension; yarn install"
+$cmd sh -c "\
+ npm i; \
+ npm shrinkwrap; \
+ cd src/drivers/webextension; \
+ npm i; \
+ npm shrinkwrap; \
+ cd ../npm; \
+ npm i; \
+ npm shrinkwrap"
+
$cmd sh -c "cat patches/*.patch | patch -p0"
$cmd ./bin/run links
diff --git a/schema.json b/schema.json
index e66f71303..1d4ddb67d 100644
--- a/schema.json
+++ b/schema.json
@@ -38,6 +38,12 @@
},
"required": true
},
+ "cookies": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
"js": {
"type": "object",
"additionalProperties": {
diff --git a/src/apps.json b/src/apps.json
index 1b6e6f30f..a1c90b997 100644
--- a/src/apps.json
+++ b/src/apps.json
@@ -1,24 +1,13 @@
{
"$schema": "../schema.json",
"apps": {
- "1&1": {
- "cats": [
- 6
- ],
- "icon": "1and1.svg",
- "implies": "PHP",
- "url": "/shop/catalog/browse\\?sessid=",
- "website": "http://1and1.com"
- },
"1C-Bitrix": {
"cats": [
1
],
- "cookies": {
- "BITRIX_": ""
- },
"headers": {
- "X-Powered-CMS": "^Bitrix Site Manager"
+ "Set-Cookie": "BITRIX_",
+ "X-Powered-CMS": "Bitrix Site Manager"
},
"html": "(?:]+components/bitrix|(?:src|href)=\"/bitrix/(?:js|templates))",
"icon": "1C-Bitrix.png",
@@ -26,16 +15,6 @@
"script": "1c-bitrix",
"website": "http://www.1c-bitrix.ru"
},
- "2z Project": {
- "cats": [
- 1
- ],
- "icon": "2z Project.png",
- "meta": {
- "generator": "2z project ([\\d.]+)\\;version:\\1"
- },
- "website": "http://2zproject-cms.ru"
- },
"3dCart": {
"cats": [
1,
@@ -51,25 +30,6 @@
"script": "(?:twlh(?:track)?\\.asp|3d_upsell\\.js)",
"website": "http://www.3dcart.com"
},
- "3DM": {
- "cats": [
- 19
- ],
- "html": "
3ware 3DM([\\d\\.]+)?\\;version:\\1",
- "icon": "3DM.png",
- "implies": "3ware",
- "website": "http://www.3ware.com"
- },
- "3ware": {
- "cats": [
- 22
- ],
- "headers": {
- "Server": "3ware\\/?([\\d\\.]+)?\\;version:\\1"
- },
- "icon": "3ware.png",
- "website": "http://www.3ware.com"
- },
"A-Frame": {
"cats": [
25
@@ -96,43 +56,10 @@
"icon": "ebis.png",
"website": "http://www.ebis.ne.jp"
},
- "Accelerated Mobile Pages": {
- "cats": [
- 12
- ],
- "html": "]* (?:amp|⚡)",
- "icon": "Accelerated-Mobile-Pages.svg",
- "website": "https://www.ampproject.org"
- },
- "Acquia Cloud": {
- "cats": [
- 22
- ],
- "headers": {
- "X-AH-Environment": "^\\w+$"
- },
- "icon": "acquia-cloud.png",
- "implies": "Drupal\\;confidence:95",
- "website": "https://www.acquia.com/"
- },
- "Amber": {
- "cats": [
- 18,
- 22
- ],
- "headers": {
- "X-Powered-By": "^Amber$"
- },
- "icon": "amber.png",
- "website": "https://amberframework.org"
- },
"AMPcms": {
"cats": [
1
],
- "js": {
- "amp_js_init": ""
- },
"cookies": {
"AMP": ""
},
@@ -141,17 +68,11 @@
},
"icon": "AMPcms.png",
"implies": "PHP",
+ "js": {
+ "amp_js_init": ""
+ },
"website": "http://www.ampcms.org"
},
- "animate.css": {
- "cats": [
- 18
- ],
- "html": [
- "]+(?:/([\\d.]+)/)?animate\\.(?:min\\.)?css\\;version:\\1"
- ],
- "website": "https://daneden.github.io/animate.css/"
- },
"AOLserver": {
"cats": [
22
@@ -166,34 +87,24 @@
"cats": [
10
],
+ "icon": "AT Internet.png",
"js": {
- "xtsite": "",
- "ATInternet": ""
+ "ATInternet": "",
+ "xtsite": ""
},
- "icon": "AT Internet.png",
"website": "http://atinternet.com/en"
},
"AT Internet XiTi": {
"cats": [
10
],
+ "icon": "AT Internet.png",
"js": {
"xt_click": ""
},
- "icon": "AT Internet.png",
"script": "xiti\\.com/hit\\.xiti",
"website": "http://atinternet.com/en"
},
- "ATEN": {
- "cats": [
- 22
- ],
- "headers": {
- "Server": "ATEN HTTP Server(?:\\(?V?([\\d\\.]+)\\)?)?\\;version:\\1"
- },
- "icon": "ATEN.png",
- "website": "http://www.aten.com"
- },
"AWStats": {
"cats": [
10
@@ -205,6 +116,14 @@
},
"website": "http://awstats.sourceforge.net"
},
+ "Accelerated Mobile Pages": {
+ "cats": [
+ 12
+ ],
+ "html": "]* (?:amp|⚡)",
+ "icon": "Accelerated-Mobile-Pages.svg",
+ "website": "https://www.ampproject.org"
+ },
"Accessible Portal": {
"cats": [
1
@@ -216,14 +135,25 @@
},
"website": "http://www.accessibleportal.com"
},
+ "Acquia Cloud": {
+ "cats": [
+ 22
+ ],
+ "headers": {
+ "X-AH-Environment": "^\\w+$"
+ },
+ "icon": "acquia-cloud.png",
+ "implies": "Drupal\\;confidence:95",
+ "website": "https://www.acquia.com/"
+ },
"Act-On": {
"cats": [
32
],
+ "icon": "ActOn.png",
"js": {
"ActOn": ""
},
- "icon": "ActOn.png",
"website": "http://act-on.com"
},
"AdInfinity": {
@@ -238,11 +168,11 @@
"cats": [
36
],
+ "html": "(?: