@ -1,16 +1,14 @@
|
||||
.vagrant
|
||||
|
||||
build/*
|
||||
src/icons/converted/*
|
||||
|
||||
node_modules
|
||||
npm-debug.log
|
||||
|
||||
tags
|
||||
/build/*
|
||||
/src/icons/converted/*
|
||||
/node_modules
|
||||
/npm-debug.log
|
||||
|
||||
!.gitkeep
|
||||
|
||||
# Junk files
|
||||
Thumbs.db
|
||||
Desktop.ini
|
||||
*.DS_Store
|
||||
._*
|
||||
tags
|
||||
tags.*
|
||||
|
@ -1,3 +0,0 @@
|
||||
# Contributing
|
||||
|
||||
You can find our contribution guide [in our wiki](https://github.com/AliasIO/Wappalyzer/wiki/Contributing).
|
@ -0,0 +1,32 @@
|
||||
FROM alpine
|
||||
|
||||
MAINTAINER Elbert Alias <elbert@alias.io>
|
||||
|
||||
ENV WAPPALYZER_DIR=/opt/wappalyzer
|
||||
|
||||
RUN apk add --no-cache \
|
||||
bash \
|
||||
curl \
|
||||
fontconfig \
|
||||
nodejs \
|
||||
optipng \
|
||||
zip
|
||||
|
||||
RUN mkdir -p /usr/share && \
|
||||
cd /usr/share \
|
||||
&& curl -L https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 | tar xj \
|
||||
&& ln -s /usr/share/phantomjs/phantomjs /usr/bin/phantomjs
|
||||
|
||||
RUN apk del \
|
||||
curl
|
||||
|
||||
RUN npm i -g \
|
||||
jsonlint-cli \
|
||||
manifoldjs \
|
||||
svg2png-many
|
||||
|
||||
RUN mkdir -p $WAPPALYZER_DIR
|
||||
|
||||
WORKDIR $WAPPALYZER_DIR
|
||||
|
||||
CMD [ "./bin/run" ]
|
@ -1,20 +0,0 @@
|
||||
ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker'
|
||||
|
||||
SYNCED_FOLDER = "/home/wappalyzer/synced"
|
||||
|
||||
Vagrant.configure("2") do |config|
|
||||
config.vm.synced_folder ".", SYNCED_FOLDER
|
||||
|
||||
config.vm.provider "docker" do |d|
|
||||
d.image = "wappalyzer/dev"
|
||||
d.has_ssh = true
|
||||
d.remains_running = true
|
||||
end
|
||||
|
||||
config.ssh.port = "22"
|
||||
config.ssh.username = "wappalyzer"
|
||||
config.ssh.private_key_path = "docker/ssh/insecure.key"
|
||||
|
||||
config.vm.provision "shell", inline: "su - wappalyzer -c 'wappalyzer links'"
|
||||
config.vm.provision "shell", inline: "echo Finished. Run \\`vagrant ssh\\` to access the environment."
|
||||
end
|
@ -0,0 +1,77 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd "$(dirname $0)/.."
|
||||
|
||||
set -eu
|
||||
|
||||
./bin/validate
|
||||
|
||||
echo "Prettifying apps.json..."
|
||||
|
||||
jsonlint-cli -ist $'\t' src/apps.json
|
||||
|
||||
echo "Converting SVG icons to PNG..."
|
||||
|
||||
#svg2png-many -i src/icons/ -o src/icons/converted/ --width=32 --height=32
|
||||
|
||||
echo "Compressing PNG icons..."
|
||||
|
||||
set +e
|
||||
|
||||
optipng -quiet "src/icons/*.png"
|
||||
optipng -quiet "src/icons/converted/*.png"
|
||||
|
||||
set -e
|
||||
|
||||
# WebExtension
|
||||
echo "Building WebExtension..."
|
||||
|
||||
webextension_dir=src/drivers/webextension
|
||||
|
||||
pushd $webextension_dir > /dev/null
|
||||
|
||||
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
|
||||
|
||||
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."
|
@ -1,11 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
cat << 'EOF'
|
||||
usage: wappalyzer <command> [<args>]
|
||||
usage: ./run <command> [<args>]
|
||||
|
||||
The following commands are available:
|
||||
build Package drivers
|
||||
help This help text
|
||||
links Create hard links to shared files in each driver
|
||||
links Create symlinks to shared files in each driver
|
||||
validate Validate apps.json
|
||||
EOF
|
@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd "$(dirname $0)/../src"
|
||||
|
||||
echo "Creating links..."
|
||||
|
||||
ln -nsf ../../apps.json drivers/npm
|
||||
ln -nsf ../../wappalyzer.js drivers/npm
|
||||
|
||||
ln -nsf ../../apps.json drivers/webextension
|
||||
ln -nsf ../../../wappalyzer.js drivers/webextension/js
|
||||
ln -nsf ../../../icons/ drivers/webextension/images/icons
|
||||
|
||||
echo "Done."
|
@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd "$(dirname $0)"
|
||||
|
||||
if [[ -f "$1" ]]; then
|
||||
./$1 $@
|
||||
else
|
||||
./help
|
||||
|
||||
exit 1
|
||||
fi
|
@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd "$(dirname $0)/.."
|
||||
|
||||
set -eu
|
||||
|
||||
echo "Validating apps.json..."
|
||||
|
||||
jsonlint-cli -s schema.json src/apps.json
|
||||
|
||||
echo "Validating regular expressions..."
|
||||
|
||||
./bin/validate-regex
|
||||
|
||||
echo "Validating icons..."
|
||||
|
||||
./bin/validate-icons
|
@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
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');
|
||||
|
||||
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);
|
||||
|
||||
if ( ext !== '.png' && ext !== '.svg' ) {
|
||||
throw err = new Error('Icon file extension specified for app "' + app + '" is not ".png" or ".svg": src/icons/' + iconPath);
|
||||
}
|
||||
|
||||
fs.exists(path, function(exists) {
|
||||
if ( exists ) {
|
||||
if ( ext === '.png' ) {
|
||||
var buffer = fileType(readChunk.sync(path, 0, 262));
|
||||
|
||||
if ( buffer === null ) {
|
||||
throw new Error('Unknown mimetype or bad file for "' + app + '": src/icons/' + iconPath);
|
||||
} else if ( buffer.mime !== 'image/png' ) {
|
||||
throw new Error('Incorrect mimetype "' + buffer.mime + '" when expected PNG for app "' + app + '": src/icons/' + iconPath);
|
||||
}
|
||||
} else if ( type === 'svg' ) {
|
||||
if ( !isSvg(fs.readFileSync(path)) ) {
|
||||
throw new Error('Incorrect mimetype when expected SVG for app "' + app + '": src/icons/' + iconPath);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw Error('Missing file for app "' + app + '": src/icons/' + iconPath);
|
||||
}
|
||||
});
|
||||
}(app));
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -f "$0-$1" ]
|
||||
then
|
||||
$0-$1 ${*:2}
|
||||
else
|
||||
$0-help
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
exit
|
@ -1,97 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z $WAPPALYZER_ROOT ]
|
||||
then
|
||||
echo "\$WAPPALYZER_ROOT not set"
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z $WAPPALYZER_NODE_PATH ]
|
||||
then
|
||||
echo "\$WAPPALYZER_NODE_PATH not set"
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -eu
|
||||
|
||||
wappalyzer validate
|
||||
|
||||
echo "Prettifying apps.json..."
|
||||
|
||||
node $WAPPALYZER_NODE_PATH/node_modules/jsonlint/lib/cli.js -ist $'\t' $WAPPALYZER_ROOT/src/apps.json
|
||||
|
||||
echo "Compressing PNG and SVG icons..."
|
||||
|
||||
node $WAPPALYZER_NODE_PATH/node_modules/imagemin-cli/cli.js $WAPPALYZER_ROOT/src/icons/* --out-dir $WAPPALYZER_ROOT/src/icons 2>&1 > /dev/null
|
||||
|
||||
echo "Converting SVG icons to PNG..."
|
||||
|
||||
OIFS="$IFS"
|
||||
IFS=$'\n'
|
||||
|
||||
for svg in $(find $WAPPALYZER_ROOT/src/icons -type f -name "*.svg")
|
||||
do
|
||||
echo " Converting $(basename "$svg")..."
|
||||
|
||||
dest="$WAPPALYZER_ROOT/src/icons/converted/$(basename "$svg").png"
|
||||
|
||||
if [[ -f "$dest" ]]; then
|
||||
rm "$dest"
|
||||
fi
|
||||
|
||||
node $WAPPALYZER_NODE_PATH/node_modules/svg2png/bin/svg2png-cli "$svg" --width=32 --height=32 --output "$dest" || true
|
||||
done
|
||||
|
||||
IFS="$OIFS"
|
||||
|
||||
echo "Compressing converted PNG icons..."
|
||||
|
||||
node $WAPPALYZER_NODE_PATH/node_modules/imagemin-cli/cli.js $WAPPALYZER_ROOT/src/icons/converted/* $WAPPALYZER_ROOT/src/icons/converted
|
||||
|
||||
wappalyzer links
|
||||
|
||||
# WebExtension
|
||||
echo "Building WebExtension driver..."
|
||||
|
||||
webextension_dir=$WAPPALYZER_ROOT/src/drivers/webextension
|
||||
|
||||
pushd $webextension_dir > /dev/null
|
||||
|
||||
zip -qr $WAPPALYZER_ROOT/build/wappalyzer_webextension.zip .
|
||||
|
||||
popd > /dev/null
|
||||
|
||||
# Edge
|
||||
|
||||
pushd $WAPPALYZER_ROOT/build > /dev/null
|
||||
|
||||
mv $webextension_dir/manifest.json $webextension_dir/manifest.webextension.json
|
||||
mv $webextension_dir/manifest.edge.json $webextension_dir/manifest.json
|
||||
|
||||
manifoldjs -l debug -p edgeextension -f edgeextension -m $webextension_dir/manifest.json
|
||||
|
||||
mv $webextension_dir/manifest.json $webextension_dir/manifest.edge.json
|
||||
mv $webextension_dir/manifest.webextension.json $webextension_dir/manifest.json
|
||||
|
||||
manifest_dir="Wappalyzer/edgeextension/manifest"
|
||||
|
||||
sed -i 's/INSERT-YOUR-PACKAGE-IDENTITY-NAME-HERE/Wappalyzer/' $manifest_dir/appxmanifest.xml
|
||||
sed -i 's/INSERT-YOUR-PACKAGE-IDENTITY-PUBLISHER-HERE/Wappalyzer/' $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. Builds have been created in $WAPPALYZER_ROOT/build."
|
@ -1,45 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
path=$1
|
||||
|
||||
if [ -z $path ]
|
||||
then
|
||||
if [ -z $WAPPALYZER_ROOT ]
|
||||
then
|
||||
echo "-$(basename $0): No path specified"
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
path=$WAPPALYZER_ROOT
|
||||
fi
|
||||
|
||||
set -eu
|
||||
|
||||
if [ ! -d $path/src ]
|
||||
then
|
||||
echo "-$(basename $0): Incorrect path"
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
path="$path/src"
|
||||
|
||||
echo "Creating hard links..."
|
||||
|
||||
ln -f $path/wappalyzer.js $path/drivers/phantomjs
|
||||
ln -f $path/apps.json $path/drivers/phantomjs
|
||||
|
||||
ln -f $path/wappalyzer.js $path/drivers/webextension/js
|
||||
ln -f $path/apps.json $path/drivers/webextension
|
||||
ln -f $path/icons/*.png $path/drivers/webextension/images/icons
|
||||
ln -f $path/icons/*.svg $path/drivers/webextension/images/icons
|
||||
ln -f $path/utils/*.js $path/drivers/webextension/js
|
||||
|
||||
if [ "$(compgen -G "$path/icons/converted/*.png" | head -n1)" ]; then
|
||||
ln -f $path/icons/converted/*.png $path/drivers/webextension/images/icons/converted
|
||||
fi
|
||||
|
||||
echo "OK"
|
||||
|
||||
exit 0
|
@ -1,35 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
path="$1"
|
||||
|
||||
if [ -z "$path" ]; then
|
||||
if [ -z "$WAPPALYZER_ROOT" ]; then
|
||||
echo "-$(basename $0): No path specified"
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
path="$WAPPALYZER_ROOT"
|
||||
fi
|
||||
|
||||
set -eu
|
||||
|
||||
if [ ! -d "$path/src" ]; then
|
||||
echo "-$(basename $0): Incorrect path"
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
path="$path/src"
|
||||
|
||||
echo "Validating apps.json..."
|
||||
|
||||
node "$WAPPALYZER_NODE_PATH/node_modules/jsonlint/lib/cli.js" --quiet -V "$WAPPALYZER_ROOT/schema.json" "$path/apps.json"
|
||||
|
||||
echo "Validating regular expressions..."
|
||||
|
||||
wappalyzer validate-regex
|
||||
|
||||
echo "Validating icons..."
|
||||
|
||||
wappalyzer validate-icons
|
@ -1,55 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var
|
||||
app,
|
||||
modulesPath = process.env.WAPPALYZER_NODE_PATH !== undefined ? process.env.WAPPALYZER_NODE_PATH + '/node_modules/' : '',
|
||||
fs = require('fs'),
|
||||
fileType = require(modulesPath + 'file-type'),
|
||||
readChunk = require(modulesPath + 'read-chunk')
|
||||
isSvg = require(modulesPath + 'is-svg')
|
||||
json = require(process.env.WAPPALYZER_ROOT + '/src/apps.json');
|
||||
|
||||
for (app in json.apps) {
|
||||
(function(app) {
|
||||
var basePath = process.env.WAPPALYZER_ROOT + '/src/icons/';
|
||||
var iconPath = json.apps[app].icon || 'default.svg';
|
||||
var path = basePath + iconPath;
|
||||
|
||||
var type;
|
||||
if (path.substr(path.length - 4) === '.png') {
|
||||
type = "PNG";
|
||||
}
|
||||
else if (path.substr(path.length - 4) === '.svg') {
|
||||
type = "SVG";
|
||||
}
|
||||
else {
|
||||
var err = new Error('Icon file extension specified for app "' + app + '" is not ".png" or ".svg": src/icons/' + iconPath);
|
||||
throw err;
|
||||
}
|
||||
|
||||
fs.exists(path, function(exists) {
|
||||
if (exists) {
|
||||
if (type === "PNG") {
|
||||
var buffer = fileType(readChunk.sync(path, 0, 262));
|
||||
if (buffer === null) {
|
||||
var err = new Error('Unknown mimetype or bad file for "' + app + '": src/icons/' + iconPath);
|
||||
throw err;
|
||||
}
|
||||
else if (buffer.mime !== 'image/png') {
|
||||
var err = new Error('Incorrect mimetype "' + buffer.mime + '" when expected PNG for app "' + app + '": src/icons/' + iconPath);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
else if (type === "SVG") {
|
||||
if (!isSvg(fs.readFileSync(path))) {
|
||||
var err = new Error('Incorrect mimetype when expected SVG for app "' + app + '": src/icons/' + iconPath);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
var err = new Error('Missing file for app "' + app + '": src/icons/' + iconPath);
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
}(app));
|
||||
};
|
@ -1,72 +0,0 @@
|
||||
FROM phusion/baseimage
|
||||
|
||||
MAINTAINER Elbert Alias <elbert@alias.io>
|
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
ENV WAPPALYZER_ROOT /home/wappalyzer/synced
|
||||
ENV WAPPALYZER_NODE_PATH /home/wappalyzer/node
|
||||
|
||||
# Install packages
|
||||
RUN sed -i 's/^deb-src\ /\#deb-src\ /g' /etc/apt/sources.list
|
||||
RUN sed -i 's/archive\.ubuntu\.com/au.archive.ubuntu.com/g' /etc/apt/sources.list
|
||||
RUN sed -i 's/security\.ubuntu\.com/au.archive.ubuntu.com/g' /etc/apt/sources.list
|
||||
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - && \
|
||||
apt-get install -y \
|
||||
nodejs \
|
||||
bzip2 \
|
||||
zip \
|
||||
libfreetype6 \
|
||||
libfontconfig \
|
||||
rsync && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
|
||||
# Add user
|
||||
RUN useradd -ms /bin/bash wappalyzer && usermod -a -G docker_env wappalyzer && echo "wappalyzer:wappalyzer" | chpasswd
|
||||
RUN echo 'wappalyzer ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
|
||||
|
||||
WORKDIR /home/wappalyzer
|
||||
|
||||
RUN su wappalyzer -c "mkdir bin synced"
|
||||
RUN su wappalyzer -c "echo \"export PATH=\$PATH:/home/wappalyzer/bin:\\$WAPPALYZER_ROOT/bin\" | cat - .profile > /tmp/profile && mv /tmp/profile .profile"
|
||||
|
||||
RUN echo "cd \$WAPPALYZER_ROOT" >> .bashrc
|
||||
RUN echo "wappalyzer" >> .bashrc
|
||||
|
||||
|
||||
# PhantomJS
|
||||
# RUN su wappalyzer -c "\
|
||||
# mkdir phantomjs && \
|
||||
# curl -L https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 | tar xvjC phantomjs && \
|
||||
# ln -s /home/wappalyzer/phantomjs/phantomjs-*-linux-x86_64/bin/phantomjs /usr/bin/phantomjs"
|
||||
|
||||
|
||||
# Node JS
|
||||
RUN su wappalyzer -c "mkdir $WAPPALYZER_NODE_PATH"
|
||||
|
||||
ADD node/package.json $WAPPALYZER_NODE_PATH/package.json
|
||||
|
||||
RUN su wappalyzer -c "cd $WAPPALYZER_NODE_PATH && npm i"
|
||||
|
||||
RUN npm i -g manifoldjs
|
||||
|
||||
|
||||
# SSH
|
||||
RUN rm -f /etc/service/sshd/down
|
||||
RUN su wappalyzer -c "mkdir .ssh && chmod 700 .ssh"
|
||||
|
||||
ADD ssh/insecure.key.pub /tmp/insecure.key.pub
|
||||
|
||||
RUN su wappalyzer -c "cat /tmp/insecure.key.pub >> .ssh/authorized_keys && chmod 600 .ssh/authorized_keys" && rm -f /tmp/insecure.key.pub
|
||||
|
||||
|
||||
# Fix the `stdin: is not a tty` error in Vagrant
|
||||
RUN sed -i 's/^mesg n$/tty -s \&\& mesg n/g' /root/.profile
|
||||
|
||||
EXPOSE 22
|
||||
|
||||
RUN echo "/usr/sbin/sshd -D" > /etc/my_init.d/sshd.sh
|
||||
|
||||
CMD ["/sbin/my_init"]
|
@ -1,27 +0,0 @@
|
||||
{
|
||||
"name": "wappalyzer-test",
|
||||
"private": true,
|
||||
"license": "GPLv3",
|
||||
"bugs": {
|
||||
"url": "https://github.com/AliasIO/Wappalyzer/issues"
|
||||
},
|
||||
"homepage": "https://github.com/AliasIO/Wappalyzer",
|
||||
"description": "Build test for Wappalyzer",
|
||||
"repository": "AliasIO/Wappalyzer",
|
||||
"scripts": {
|
||||
"test": "./bin/wappalyzer build"
|
||||
},
|
||||
"devDependencies": {
|
||||
"file-type": "3.8.*",
|
||||
"is-svg": "2.0.*",
|
||||
"read-chunk": "2.0.*",
|
||||
"jsonlint": "*",
|
||||
"jpm": "*",
|
||||
"imagemin-cli": "2.*.*",
|
||||
"phantomjs-prebuilt": "*",
|
||||
"svg2png": "3.*.*"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 4"
|
||||
}
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAqVo54bv3J4K62IDCUIVY7gF2iBOR8fub5c9t6j4MbsRQDmU0
|
||||
yxhN1+7fMCERcoMSelAb/SYSzKE8azLugP7hsq4t+/xJijCB22uriFhKMpu4ySoA
|
||||
6PVNbfbIptaVo6holVIMRKPXTg1hU6lr2DWMKB5AlGmz7ZHmQgX9iBoV8PmMYOF5
|
||||
UpiwfokcNnIwDiCCpd19G/lT6FlCVZHZdeZh41FWke8oQgWevM8fdGJkZ+a7Lgdm
|
||||
6A3WlvI0AIz9KWfXlXAOvthi4QlB4SvSCwRQbKdHbW5UBRShucjlce3hZO9Q6ROC
|
||||
Ta1zgvscleKd63yHSQ18Z2+j1t5T3HJzhOn1ywIDAQABAoIBAFdbcWwd15oL93Hi
|
||||
yVlbz8nF+2yqG6ilT3+2Bk7EfwlMPreOQTNacB0o3PwosqVNM2Tgme91ilEAAviR
|
||||
JzJnR+kxrArF0vFzoCidW7hTQsLkTOeHwTxp/OzyVgKpwjrPjlMoJafqlA9xG3la
|
||||
dYTr6kZvhISKGgQ8NHhuOp/QRO0uFaQD8l0kVCEufgqbs6gBY7aAkNf2iogSms9w
|
||||
139zwsXeSg2Vm7Img1PVrRsRM5qbTNBMIim+9q4fSrqP+rYF9lU1p68IzmG/wY2o
|
||||
0ElwRoatVVV9Rvk00a1qBGNaT39oVEtryIiAlXPno+KW5dyVx53o9vjWHDz44yBN
|
||||
G8/EgEECgYEA3UJtj5ikEdhquzy1WfbZwZVmTCJLMefiVui00RLV4Q/r/4Uojdsb
|
||||
L/QCAplpbHUrj7O8Lp9CuXSnUNa4CkrTidj2wkDWDFl1EBLJNz1zhJjs6Aaw2u1t
|
||||
SV6ULgx9Y25oiStygkJhon+wlNF9HRSCFeNkBNNjpkD2gEifxnHIDLsCgYEAw/Fi
|
||||
OHFvVPx0/DS3FD/MEJAAZaGdg8Zb2TCmCIVjoj0tZOTDvwKIEYCQ41vADDLlCSGg
|
||||
XOgNXvosSZtezmJxnkzO3NYXE4XZ7bPVMamuqbKXXzaee3tPmiFaeZfiB4tj7uxh
|
||||
tWQdUicSMQ8WPqyTB5wmcF7k3L4TzrjSLOi5MjECgYEAnsLYfI3pREjGpN01v3zp
|
||||
2QbLZVvCGugpN3U4sUBTqW9URn+Ujt0mD+2FN7o+tC0K+czc/ZMXPJ1gpRe87N2u
|
||||
Fh5RSSder3PNFKB2MyXr6rwUWZTbd+ufXGL57mTV3+/MIIjFXIQnLIN1AAOlQ6WA
|
||||
hhYooXHQ8e1xMrFpu+nOwpsCgYAanYEf9ZiPzLL/RxHPOFM5tLW5GFjS+3Cicc87
|
||||
vRKpiPHPkJteKLPe3L3RhDbz8T3XHbAwrnySeBzn6qjYE9snC3vV12bPChFuDk1Z
|
||||
L5lAB7g0ALFKSJepcfpeJdlX+QEcBRPIlc69x/zamRgGb16RXA6EmP8xVMhP/h7e
|
||||
ZsYxIQKBgBqOaZNHwaG6PqP2HCjc1keH4wQVx9eTV5y4/B5FJbMeK05vV2rBHoxA
|
||||
P/dXE85olj8D/9E88xJ1V716kBeONcKFdbd3VfY5bo2VBz+piOaG3EBQOLIbd4/C
|
||||
KVtgOWqI7WTLPIgpXlG5MA801RwhVyk1phmwhvW/Kb3lWsK1vkOe
|
||||
-----END RSA PRIVATE KEY-----
|
@ -1 +0,0 @@
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCpWjnhu/cngrrYgMJQhVjuAXaIE5Hx+5vlz23qPgxuxFAOZTTLGE3X7t8wIRFygxJ6UBv9JhLMoTxrMu6A/uGyri37/EmKMIHba6uIWEoym7jJKgDo9U1t9sim1pWjqGiVUgxEo9dODWFTqWvYNYwoHkCUabPtkeZCBf2IGhXw+Yxg4XlSmLB+iRw2cjAOIIKl3X0b+VPoWUJVkdl15mHjUVaR7yhCBZ68zx90YmRn5rsuB2boDdaW8jQAjP0pZ9eVcA6+2GLhCUHhK9ILBFBsp0dtblQFFKG5yOVx7eFk71DpE4JNrXOC+xyV4p3rfIdJDXxnb6PW3lPccnOE6fXL elbert@home
|
@ -0,0 +1,9 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"file-type": "3.8.*",
|
||||
"is-svg": "2.0.*",
|
||||
"read-chunk": "2.0.*",
|
||||
"svg2png-many": "*"
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd "$(dirname $0)"
|
||||
|
||||
if [[ -z "$(which docker)" ]]; then
|
||||
echo "Please install Docker from https://www.docker.com"
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker="docker run --rm -v "$(pwd):/opt/wappalyzer" -it wappalyzer/dev"
|
||||
|
||||
if [[ ! -d "node_modules" ]]; then
|
||||
$docker ./bin/run links
|
||||
|
||||
$docker npm i
|
||||
fi
|
||||
|
||||
$docker ./bin/run $@
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "wappalyzer",
|
||||
"name": "Wappalyzer",
|
||||
"description": "Uncovers the technologies used on websites",
|
||||
"homepage": "https://github.com/AliasIO/Wappalyzer",
|
||||
"version": "3.0.10",
|
||||
"version": "4.1.4",
|
||||
"author": "Elbert Alias",
|
||||
"license": "GPL-3.0",
|
||||
"repository": {
|
@ -1,7 +1,4 @@
|
||||
apps.json
|
||||
images/icons/converted/*.png
|
||||
images/icons/*.png
|
||||
images/icons/*.svg
|
||||
js/wappalyzer.js
|
||||
js/iframe.js
|
||||
js/network.js
|
||||
/apps.json
|
||||
/images/icons/converted/*
|
||||
/images/icons/*
|
||||
/js/wappalyzer.js
|
||||
|
@ -0,0 +1 @@
|
||||
../../../icons/
|
@ -1,13 +1,9 @@
|
||||
/** global: browser */
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var
|
||||
i, value,
|
||||
nodes = document.querySelector('*');
|
||||
var nodes = document.querySelectorAll('[data-i18n]');
|
||||
|
||||
for ( i = 0; i < nodes.length; i ++ ) {
|
||||
if ( value = nodes[i].dataset.i18n ) {
|
||||
nodes[i].innerHTML = browser.i18n.getMessage(value);
|
||||
}
|
||||
}
|
||||
Array.prototype.forEach.call(nodes, function (node) {
|
||||
node.childNodes[0].nodeValue = browser.i18n.getMessage(node.dataset.i18n);
|
||||
});
|
||||
});
|
||||
|
@ -0,0 +1,63 @@
|
||||
jsonToDOM.namespaces = {
|
||||
html: "http://www.w3.org/1999/xhtml",
|
||||
xul: "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
};
|
||||
|
||||
jsonToDOM.defaultNamespace = jsonToDOM.namespaces.html;
|
||||
|
||||
function jsonToDOM(jsonTemplate, doc, nodes) {
|
||||
function namespace(name) {
|
||||
var reElemNameParts = /^(?:(.*):)?(.*)$/.exec(name);
|
||||
return { namespace: jsonToDOM.namespaces[reElemNameParts[1]], shortName: reElemNameParts[2] };
|
||||
}
|
||||
|
||||
// Note that 'elemNameOrArray' is: either the full element name (eg. [html:]div) or an array of elements in JSON notation
|
||||
function tag(elemNameOrArray, elemAttr) {
|
||||
// Array of elements? Parse each one...
|
||||
if (Array.isArray(elemNameOrArray)) {
|
||||
var frag = doc.createDocumentFragment();
|
||||
Array.prototype.forEach.call(arguments, function(thisElem) {
|
||||
frag.appendChild(tag.apply(null, thisElem));
|
||||
});
|
||||
return frag;
|
||||
}
|
||||
|
||||
// Single element? Parse element namespace prefix (if none exists, default to defaultNamespace), and create element
|
||||
var elemNs = namespace(elemNameOrArray);
|
||||
var elem = doc.createElementNS(elemNs.namespace || jsonToDOM.defaultNamespace, elemNs.shortName);
|
||||
|
||||
// Set element's attributes and/or callback functions (eg. onclick)
|
||||
for (var key in elemAttr) {
|
||||
var val = elemAttr[key];
|
||||
if (nodes && key == "key") {
|
||||
nodes[val] = elem;
|
||||
continue;
|
||||
}
|
||||
|
||||
var attrNs = namespace(key);
|
||||
if (typeof val == "function") {
|
||||
// Special case for function attributes; don't just add them as 'on...' attributes, but as events, using addEventListener
|
||||
elem.addEventListener(key.replace(/^on/, ""), val, false);
|
||||
}
|
||||
else {
|
||||
// Note that the default namespace for XML attributes is, and should be, blank (ie. they're not in any namespace)
|
||||
elem.setAttributeNS(attrNs.namespace || "", attrNs.shortName, val);
|
||||
}
|
||||
}
|
||||
|
||||
// Create and append this element's children
|
||||
var childElems = Array.prototype.slice.call(arguments, 2);
|
||||
childElems.forEach(function(childElem) {
|
||||
if (childElem != null) {
|
||||
elem.appendChild(
|
||||
childElem instanceof doc.defaultView.Node ? childElem :
|
||||
Array.isArray(childElem) ? tag.apply(null, childElem) :
|
||||
doc.createTextNode(childElem));
|
||||
}
|
||||
});
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
return tag.apply(null, jsonTemplate);
|
||||
}
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 609 B After Width: | Height: | Size: 608 B |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 703 B |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 319 B After Width: | Height: | Size: 285 B |
Before Width: | Height: | Size: 534 B After Width: | Height: | Size: 524 B |
Before Width: | Height: | Size: 751 B After Width: | Height: | Size: 493 B |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 754 B After Width: | Height: | Size: 740 B |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 979 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 649 B |
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 855 B |
After Width: | Height: | Size: 862 B |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 540 B After Width: | Height: | Size: 493 B |
Before Width: | Height: | Size: 713 B After Width: | Height: | Size: 646 B |
After Width: | Height: | Size: 995 B |
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 923 B |
Before Width: | Height: | Size: 368 B After Width: | Height: | Size: 234 B |
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 742 B |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 641 B |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 326 B |
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 717 B |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 53 KiB |