#!/bin/bash
#v0.4 created by sc0ttman, August 2010
#GPL license /usr/share/doc/legal/gpl-2.0.txt
#100830 BK added GPL license, amended Exit msg, bug fixes.
# zenity version by lagopus for antiX, Decemder 2010
# modified to yad by Dave for antiX, September 2011
# modified back to zenity for Peppermint, Jan 2016
# fix update URL to mvps
# advert blocker
# downloads a list of known advert servers
# then appends them to /etc/hosts so that
# many online adverts are blocked from sight
TEXTDOMAINDIR=/usr/share/locale
TEXTDOMAIN=block-advert.sh
export title="Peppermint Advert Blocker"
# the markers used to find the changes in /etc/hosts, which are made by this app
export markerstart='# BEGIN (below) - IPs added by Peppermint Advert Blocker #'
export markerend='# END (above) - IPs added by Peppermint Advert Blocker #'
info_text=$"The $title tool adds stuff to your /etc/hosts file, so \n\
that many advertising servers and websites will not be able to connect \n\
to this PC.\n\n\
You can choose one service or combine multiple services for more advert protection.\n\
Blocking ad servers protects your privacy, saves you bandwidth, greatly \n\
improves web-browsing speed and makes the internet much less annoying in general.\n\n\
Do you want to proceed?"
# width of progress dialogs
WIDTH=360
# cleanup all leftover files
function cleanup
{
# remove all temp files
rm -f /tmp/adlist{1,2,3,4,5} /tmp/adlist-all /tmp/hosts-temp
}
# concatenate the downloaded files
# clean out everything but the list of IPs and servers
function build_adlist_all
{
#echo "====================YTO"
# suppress comments, then empty lines, replace tabs by spaces
# remove double spaces, remove lines not beginning by a number,
# suppress \r at end of line
# then sort unique by field 2 (url)
cat /tmp/adlist{1,2,3,4,5} | sed '/^#/d' | \
sed '/^$/d' | \
sed 's/[\t]/ /g' | \
sed 's/ / /g' | \
sed -n '/^[0-9]/p' | \
tr -d '\015' | \
sort -u -k 2 \
> /tmp/adlist-all
#echo "====================YTO"
}
# append the list to the /etc/hosts
function append_adlist
{
# copy /etc/hosts, but the stuff between the markers, to a temp hosts file
sed -e "/$markerstart/,/$markerend/d" /etc/hosts > /tmp/hosts-temp
# remove the markers
sed -i -e "/$markerstart/d" /tmp/hosts-temp
sed -i -e "/$markerend/d" /tmp/hosts-temp
# check the size of the final adlist - if UNBLOCK is chosen, it will be 0.
size=$(stat -c%s /tmp/adlist-all 2>/dev/null)
#echo $size
if [ -n "$size" ] && [ "$size" -gt "0" ];then
# add list contents into the hosts file, below a marker (for easier removal)
echo "$markerstart" >> /tmp/hosts-temp
cat /tmp/adlist-all >> /tmp/hosts-temp
echo "$markerend" >> /tmp/hosts-temp
else
zenity --question --width "200" --title "$title" --text=$"Restore original hosts file ?"
exit 1
fi
# On first use backup original /etc/hosts to /etc/hosts.ORIGINAL
# If /etc/hosts.original exists, then backup to /etc/hosts.saved
if [ -f /etc/hosts.ORIGINAL ]; then
cp "/etc/hosts" "/etc/hosts.saved"
mv "/tmp/hosts-temp" "/etc/hosts"
else
cp "/etc/hosts" "/etc/hosts.ORIGINAL"
cp "/etc/hosts" "/etc/hosts.saved"
mv "/tmp/hosts-temp" "/etc/hosts"
fi
}
# usage: wget_dialog url file
# $1 : url of the file
# $2 : file: location of the downloaded file
function wget_dialog
{
#echo "url: [$1]"
url=$1
# extract domain name between // and /
domain=$(echo "$url" | cut -d/ -f3)
#echo "===> $domain"
# '--progress=dot' prints dots and a percentage at the end of the line
# print $7 to cut the percentage
# system("") to flush the output of awk in the pipe
# sed to delete the ending '%' sign
# sed -u to flush the output of sed
# changed -t 0 (tries) to -t 20
wget -c -4 -t 20 -T 10 --progress=dot -O $2 "$1" 2>&1 | \
awk '{print $7}; system("")' | sed -u 's/%//' | \
zenity --title "$title" --progress --width $WIDTH \
--text=$"Loading block-list from $domain" \
--percentage=0 \
--auto-close
}
# download the ads lists
function download_adlist
{
# mvps
if [ "$mvps" = true ]; then
wget_dialog http://winhelp2002.mvps.org/hosts.txt /tmp/adlist1 # TP fix update URL
fi
sed -i 's/0.0.0.0/127.0.0.1/' /tmp/adlist1 # TP fix to change 0.0.0.0 to 127.0.0.1 in mvps list
sed -i 's/ #.*$//' /tmp/adlist1 # TP fix to remove comments in mvps list
# systcl
if [ "$sysctl" = true ]; then
wget_dialog http://sysctl.org/cameleon/hosts /tmp/adlist2
fi
# someonewhocares
if [ "$someonewhocares" = true ]; then
wget_dialog http://someonewhocares.org/hosts/hosts /tmp/adlist3
fi
# yoyo
if [ "$yoyo" = true ]; then
wget_dialog 'http://pgl.yoyo.org/as/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext' /tmp/adlist4
fi
# adservers
if [ "$adservers" = true ]; then
wget_dialog http://hosts-file.net/ad_servers.asp /tmp/adlist5
fi
# UNBLOCK
if [ "$unblock" = true ]; then
mv -f "/etc/hosts.ORIGINAL" "/etc/hosts"
rm -f "/etc/hosts.saved"
fi
#100830 BK bug fix: create if not exist...
touch /tmp/adlist{1,2,3,4,5}
}
function success
{
# tell user
zenity --info --width 320 --title "$title" --text=$"Success - your settings have been changed.\n\n\
Your hosts file has been updated.\n\
Restart your browser to see the changes." --no-wrap
}
#=======================================================================
# main
#
# display message and ask to continue
zenity --question --title "$title" --width "$WIDTH" --text "$info_text" --no-wrap
rsp=$?
if [ $rsp != 0 ]; then
exit 0
fi
# selection dialog
ans=$(zenity --list --title "$title" \
--width "$WIDTH" --height 240 \
--list --separator=":" \
--text $"Choose your preferred ad blocking service(s)" \
--checklist --column "Pick" --column "Service"\
FALSE "mvps.org" \
FALSE "sysctl.org" \
FALSE "someonewhocares.org" \
FALSE "yoyo.org" \
FALSE "adservers.org" \
FALSE "UNBLOCK" )
#echo $ans
# transform the list separated by ':' into arr
arr=$(echo $ans | tr ":" "\n")
selected=""
for x in $arr
do
#echo "> [$x]"
case $x in
mvps.org)
mvps='true'
selected='yes'
;;
sysctl.org)
sysctl='true'
selected='yes'
;;
someonewhocares.org)
someonewhocares='true'
selected='yes'
;;
yoyo.org)
yoyo='true'
selected='yes'
;;
adservers.org)
adservers='true'
selected='yes'
;;
UNBLOCK)
unblock='true'
selected='yes'
;;
esac
done
if [ -z $selected ]; then
# nothing selected
echo $"No item selected"
exit 0
fi
cleanup
download_adlist
build_adlist_all
append_adlist
cleanup
success