mirror of
https://github.com/tanrax/maza-ad-blocking.git
synced 2024-12-22 01:45:36 +01:00
228 lines
5.7 KiB
Bash
Executable File
228 lines
5.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# START
|
|
set -e
|
|
|
|
# VARIABLES
|
|
URL_DNS_LIST="https://pgl.yoyo.org/adservers/serverlist.php?showintro=0&mimetype=plaintext"
|
|
URL_DNS_LIST_CUSTOM=""
|
|
NAME_OSX="Darwin"
|
|
THIS_OS=$(uname -mrs)
|
|
PROGNAME=$(basename "$0")
|
|
[[ -z "${XDG_CONFIG_HOME}" ]] && CONFIG=$HOME/.config/maza/ || CONFIG=$XDG_CONFIG_HOME/maza/
|
|
HOST_FILE=/etc/hosts
|
|
COLOR_RED=$(tput setaf 1)
|
|
COLOR_GREEN=$(tput setaf 2)
|
|
COLOR_RESET=$(tput sgr0)
|
|
LIST="list"
|
|
LIST_DNSMASQ="dnsmasq.conf"
|
|
CUSTOM_DOMAINS="custom-domains"
|
|
IGNORE_LIST_DEFAULT="localhost \
|
|
localhost.localdomain \
|
|
local \
|
|
broadcasthost \
|
|
ip6-localhost \
|
|
ip6-loopback \
|
|
ip6-localnet \
|
|
ip6-mcastprefix \
|
|
ip6-allnodes \
|
|
ip6-allrouters \
|
|
ip6-allhosts \
|
|
0.0.0.0"
|
|
IGNORE_LIST_FILE="ignore"
|
|
START_TAG="## MAZA - List ad blocking"
|
|
PROJECT="### https://github.com/tanrax/maza-ad-blocking"
|
|
AUTHOR="### Created by Andros Fenollosa (https://andros.dev/)"
|
|
END_TAG="## END MAZA"
|
|
|
|
|
|
# Create sed cross system
|
|
custom-sed() {
|
|
if [[ $THIS_OS = *$NAME_OSX* ]]; then
|
|
# Check if OSX and install GSED
|
|
if [ -x "$(command -v gsed)" ]; then
|
|
gsed "$@"
|
|
else
|
|
echo "${COLOR_RED}ERROR. You must install gsed if you are using OSX${COLOR_RESET}"
|
|
exit 1
|
|
fi
|
|
else
|
|
# Linux
|
|
sed "$@"
|
|
fi
|
|
}
|
|
export -f custom-sed
|
|
|
|
|
|
# FUNCTIONS
|
|
|
|
## HELP
|
|
usage() {
|
|
if [ "$*" != "" ] ; then
|
|
echo "Error: $*"
|
|
fi
|
|
|
|
cat << EOF
|
|
Usage: $PROGNAME [OPTION]
|
|
Simple and efficient local ad blocking throughout the network.
|
|
|
|
Options:
|
|
status Check if it's active or not
|
|
update Update the list of DNS to be blocked
|
|
start Activate blocking DNS.
|
|
stop Stop blocking DNS.
|
|
--help Display this usage message and exit
|
|
EOF
|
|
|
|
exit 1
|
|
}
|
|
|
|
status() {
|
|
if grep -qF "$START_TAG" "$HOST_FILE";then
|
|
echo "${COLOR_GREEN}ENABLED${COLOR_RESET}"
|
|
else
|
|
echo "${COLOR_RED}DISABLED${COLOR_RESET}"
|
|
fi
|
|
}
|
|
|
|
update() {
|
|
|
|
local local_url_dns_list="$URL_DNS_LIST" # Default
|
|
if [ -n "$URL_DNS_LIST_CUSTOM" ]; then
|
|
echo "si"
|
|
local_url_dns_list="$URL_DNS_LIST_CUSTOM" # Custom
|
|
fi
|
|
|
|
# Make conf folder
|
|
rm -f "$CONFIG$LIST"
|
|
rm -f "$CONFIG$LIST_DNSMASQ"
|
|
mkdir -p "$CONFIG"
|
|
|
|
# Download DNS list
|
|
curl -L -s "$local_url_dns_list" -o "$CONFIG$LIST"
|
|
## Remove comments
|
|
### Start with #
|
|
custom-sed -i.bak '/^#/ d' "$CONFIG$LIST"
|
|
### Remove comments in middle of line
|
|
custom-sed -i.bak 's/#.*$//g' "$CONFIG$LIST"
|
|
### Remove spaces in end of line
|
|
custom-sed -i.bak 's/ *$//g' "$CONFIG$LIST"
|
|
## Remove "0.0.0.0" or "127.0.0.1"
|
|
custom-sed -i.bak 's/0.0.0.0 //g' "$CONFIG$LIST"
|
|
custom-sed -i.bak 's/127.0.0.1 //g' "$CONFIG$LIST"
|
|
|
|
# Make ignore list
|
|
if [ ! -f "$CONFIG$IGNORE_LIST_FILE" ]; then
|
|
echo "$IGNORE_LIST_DEFAULT" | tr " " "\n" > "$CONFIG$IGNORE_LIST_FILE"
|
|
fi
|
|
|
|
# Remove ignore list
|
|
while read -r line; do
|
|
custom-sed -i.bak "/$line/d" "$CONFIG$LIST"
|
|
done < "$CONFIG$IGNORE_LIST_FILE"
|
|
|
|
# Make custom domains
|
|
## Check if file exists
|
|
if [ ! -f "$CONFIG$CUSTOM_DOMAINS" ]; then
|
|
## Create file
|
|
touch "$CONFIG$CUSTOM_DOMAINS"
|
|
fi
|
|
## Include custom domains
|
|
cat "$CONFIG$CUSTOM_DOMAINS" >> "$CONFIG$LIST"
|
|
echo "" >> "$CONFIG$LIST"
|
|
|
|
# Remove empty lines
|
|
custom-sed -i.bak '/^$/d' "$CONFIG$LIST"
|
|
|
|
# Update HOST_FILE
|
|
## Remove old list
|
|
custom-sed -i "/$START_TAG/,/$END_TAG/d" "$HOST_FILE"
|
|
## Add List to host file.
|
|
# Add start tag DNS list in first line
|
|
echo "$START_TAG" >> "$HOST_FILE"
|
|
echo "$PROJECT" >> "$HOST_FILE"
|
|
echo "$AUTHOR" >> "$HOST_FILE"
|
|
# Transform "mydomain.com" to "127.0.0.1 mydomain.com" except comments
|
|
custom-sed "/^#/!s/^/127.0.0.1 /g" "$CONFIG$LIST" >> "$HOST_FILE"
|
|
# Add end tag DNS list in first line
|
|
echo "$END_TAG" >> "$HOST_FILE"
|
|
|
|
# Make dnsmasq format
|
|
cp "$CONFIG$LIST" "$CONFIG$LIST_DNSMASQ"
|
|
## Remove triple "-". Example: "my---domain.com" to "my-domain.com". Only in dnsmasq.
|
|
custom-sed -i.bak "s/---/-/g" "$CONFIG$LIST_DNSMASQ"
|
|
## Remove double "-". Example: "my--domain.com" to "my-domain.com". Only in dnsmasq.
|
|
custom-sed -i.bak "s/--/-/g" "$CONFIG$LIST_DNSMASQ"
|
|
## mydomain.com to address=/mydomain.com/127.0.0.1
|
|
custom-sed -i.bak "s|\(.*\)|address=/\1/127.0.0.1|" "$CONFIG$LIST_DNSMASQ"
|
|
## Add start tag DNS list in first line
|
|
custom-sed -i.bak "1i\\$AUTHOR" "$CONFIG$LIST"
|
|
custom-sed -i.bak "1i\\$PROJECT" "$CONFIG$LIST"
|
|
custom-sed -i.bak "1i\\$START_TAG" "$CONFIG$LIST"
|
|
## Add end tag DNS list in first line
|
|
echo "$END_TAG" >> "$CONFIG$LIST"
|
|
## Add start tag DNS dnsmasq in first line
|
|
custom-sed -i.bak "1i\\$AUTHOR" "$CONFIG$LIST_DNSMASQ"
|
|
custom-sed -i.bak "1i\\$PROJECT" "$CONFIG$LIST_DNSMASQ"
|
|
custom-sed -i.bak "1i\\$START_TAG" "$CONFIG$LIST_DNSMASQ"
|
|
## Add end tag DNS DNSMASQ in first line
|
|
echo "$END_TAG" >> "$CONFIG$LIST_DNSMASQ"
|
|
|
|
# Remove temp file
|
|
rm "$CONFIG$LIST.bak"
|
|
rm "$CONFIG$LIST_DNSMASQ.bak"
|
|
|
|
# Notify user
|
|
echo "${COLOR_GREEN}List updated!${COLOR_RESET}"
|
|
}
|
|
|
|
start() {
|
|
update
|
|
# Notify user
|
|
echo "${COLOR_GREEN}ENABLED!${COLOR_RESET}"
|
|
}
|
|
|
|
stop() {
|
|
# Remove list to host file
|
|
custom-sed -i "/$START_TAG/,/$END_TAG/d" "$HOST_FILE"
|
|
|
|
# Remove DNSMASQ
|
|
cat /dev/null > "$CONFIG$LIST_DNSMASQ"
|
|
|
|
# Notify user
|
|
echo "${COLOR_GREEN}DISABLED!${COLOR_RESET}"
|
|
}
|
|
|
|
# CONTROLE ARGUMENTS
|
|
isArg=""
|
|
|
|
while [ $# -gt 0 ] ; do
|
|
case "$1" in
|
|
--help)
|
|
usage
|
|
;;
|
|
status)
|
|
isArg="1"
|
|
status
|
|
;;
|
|
update)
|
|
isArg="1"
|
|
update
|
|
;;
|
|
start)
|
|
isArg="1"
|
|
start
|
|
;;
|
|
stop)
|
|
isArg="1"
|
|
stop
|
|
;;
|
|
*)
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ -z $isArg ] ; then
|
|
usage "Not enough arguments"
|
|
fi
|