#!/bin/sh

#######################################################################
# Title      :    PFDialogControl Installer
# Author     :    Bogdanovic Theodor {t.bogdanovic@hotmail.com}
# Date       :    2015-05-05
# Requires   :    dialog
# Category   :    Installationsskript
#######################################################################
# Description
#
# Dieses Skript dient der Installation der PFDialogControl Skript-
# sammlung.
#######################################################################

clear

########################################################################

# -> Diese Function zeigt eine Statusleiste waehrend der Istallation
pfdcontrol_start() {

# -> Installation des FreeBSD Paketmanagers (pkg), welcher per Default nich installiert ist. Zusaetzliche Pakete installieren
clear
pkg
pkg install -y dnsmasq pftop nano gsed
# <- #

### Erstellen der notwendigen Verzeichnisse ###########################

{
echo 4; echo "XXX"; echo "mkdir -p /usr/local/etc/pfdcontrol/block"; echo "XXX"; sleep 0.2
mkdir -p /usr/local/etc/pfdcontrol/block
echo 8; echo "XXX"; echo "mkdir -p /usr/local/etc/pfdcontrol/portfor"; echo "XXX"; sleep 0.2
mkdir -p /usr/local/etc/pfdcontrol/portfor
echo 16; echo "XXX"; echo "mkdir -p /usr/local/etc/pfdcontrol/skel"; echo "XXX"; sleep 0.2
mkdir -p /usr/local/etc/pfdcontrol/skel

### Erstellen der notwendigen Dateien und aendern der Rechte###########

echo 20; echo "XXX"; echo "cp ./pfdctl /usr/bin/pfdctl && chmod 700 /usr/bin/pfdctl"; echo "XXX"; sleep 0.2
cp ./pfdctl /usr/bin/pfdctl && chmod 700 /usr/bin/pfdctl
echo 24; echo "XXX"; echo "cp ./libpfdctl /usr/lib/libpfdctl && chmod 660 /usr/lib/libpfdctl"; echo "XXX"; sleep 0.2
cp ./libpfdctl /usr/lib/libpfdctl && chmod 660 /usr/lib/libpfdctl
echo 28; echo "XXX"; echo "cp ./libnmcalc16 /usr/lib/libnmcalc16 && chmod 660 /usr/lib/libnmcalc16"; echo "XXX"; sleep 0.2
cp ./libnmcalc16 /usr/lib/libnmcalc16 && chmod 660 /usr/lib/libnmcalc16
echo 32; echo "XXX"; echo "cp ./libchkin12 /usr/lib/libchkin12 && chmod 660 /usr/lib/libchkin12"; echo "XXX"; sleep 0.2
cp ./libchkin12 /usr/lib/libchkin12 && chmod 660 /usr/lib/libchkin12
echo 36; echo "XXX"; echo "cp ./pfdchelp /usr/bin/pfdchelp && chmod 660 /usr/bin/pfdchelp"; echo "XXX"; sleep 0.2
cp ./pfdchelp /usr/bin/pfdchelp && chmod 770 /usr/bin/pfdchelp
echo 40; echo "XXX"; echo "cp ./dnsmasq.skeleton /usr/local/etc/pfdcontrol/skel"; echo "XXX"; sleep 0.2
cp ./dnsmasq.skeleton /usr/local/etc/pfdcontrol/skel && chmod 660 /usr/local/etc/pfdcontrol/skel/dnsmasq.skeleton
echo 44; echo "XXX"; echo "cp ./pf.skeleton /usr/local/etc/pfdcontrol/skel"; echo "XXX"; sleep 0.2
cp ./pf.skeleton /usr/local/etc/pfdcontrol/skel && chmod 660 /usr/local/etc/pfdcontrol/skel/pf.skeleton
echo 48; echo "XXX"; echo "cp ./motd /etc/motd"; echo "XXX"; sleep 0.2
cp ./motd /etc/motd && chmod 660 /etc/motd

### Erstellen der notwendigen Config Files und aendern der Rechte######

echo 52; echo "XXX"; echo "touch /usr/local/etc/pfdcontrol/dns.addr"; echo "XXX"; sleep 0.2
touch /usr/local/etc/pfdcontrol/dns.addr
echo 56; echo "XXX"; echo "touch /usr/local/etc/pfdcontrol/dnsmasq_run.status"; echo "XXX"; sleep 0.2
touch /usr/local/etc/pfdcontrol/dnsmasq_run.status
echo 60; echo "XXX"; echo "touch /usr/local/etc/pfdcontrol/domainname"; echo "XXX"; sleep 0.2
touch /usr/local/etc/pfdcontrol/domainname
echo 64; echo "XXX"; echo "touch /usr/local/etc/pfdcontrol/gateway.addr"; echo "XXX"; sleep 0.2
touch /usr/local/etc/pfdcontrol/gateway.addr
echo 68; echo "XXX"; echo "touch /usr/local/etc/pfdcontrol/identified_ifaces"; echo "XXX"; sleep 0.2
touch /usr/local/etc/pfdcontrol/identified_ifaces
echo 72; echo "XXX"; echo "touch /usr/local/etc/pfdcontrol/inside_iface"; echo "XXX"; sleep 0.2
touch /usr/local/etc/pfdcontrol/inside_iface
echo 76; echo "XXX"; echo "touch /usr/local/etc/pfdcontrol/nat_run.status"; echo "XXX"; sleep 0.2
touch /usr/local/etc/pfdcontrol/nat_run.status
echo 80; echo "XXX"; echo "touch /usr/local/etc/pfdcontrol/outside_iface"; echo "XXX"; sleep 0.2
touch /usr/local/etc/pfdcontrol/outside_iface
echo 84; echo "XXX"; echo "echo "0" > /usr/local/etc/pfdcontrol/counter_pw"; echo "XXX"; sleep 0.2
echo "0" > /usr/local/etc/pfdcontrol/counter_pw
echo 90; echo "XXX"; echo "echo "0" > /usr/local/etc/pfdcontrol/counter_block"; echo "XXX"; sleep 0.2
echo "0" > /usr/local/etc/pfdcontrol/counter_block
echo 100; echo "XXX"; echo "Installation komplett"; echo "XXX"; sleep 2
} | dialog --backtitle "PFDialogControl" --title "Installiere PFDialogControl" --gauge ""  6 85 0
# <- #
### Suchen und dekonfigurieren von bestehenden Interfaces #############

sed "s/ifconfig_/#--DECONFIG--durch--PFDialogControl/g" /etc/rc.conf > /etc/rc.conf.pfdctl && rm /etc/rc.conf && mv /etc/rc.conf.pfdctl /etc/rc.conf

### Aktivieren der Dienste PF Firewall und Gateway Modus ##############

echo "pf_enable=\"YES\"" >> /etc/rc.conf
echo "gateway_enable=\"YES\"" >> /etc/rc.conf

### Abschlussmeldung und initialisieren des Reboots ###################

dialog --backtitle "PFDialogControl" \
	   --title "WARNUNG" \
	   --msgbox "PFDialogControl wurde erfolgreich installiert, das System wird nun neu gestartet." 10 50
	   
reboot

}

# -> Startsequenz des Installers mit Check auf Minimum 2 Interfaces
chk_iface() {
if [ $(ifconfig -a | awk '/.[0-9]:/ {print $1}' | cut -d ":" -f1 | grep -v -i inet | grep -v -i ether | grep -v -i lo0 | wc -l | cut -d " " -f 7-9) = 1 ]; then
	dialog --backtitle "PFDialogControl" \
	   --title "WARNUNG" \
	   --yesno "Der Installer hat ermittelt, dass Ihr System nur ein Interface besitzen. PFDialogControl benoetigt aber mindestens zwei. Sie können die Installation aber dennoch \
durchfuehren wenn Sie wollen.\n\nMoechten Sie fortfahren?" 10 80
	   	       
	    case $? in
      	0) pfdcontrol_start
      	;;
    	1) clear; exit
    	;;
  	  esac
else
	pfdcontrol_start
fi
	
}
# <- #

# -> Startsequenz des Installers
dialog --backtitle "PFDialogControl" \
	   --title "Installation" \
	   --yesno "Willkommen zur Installation von PFDialogControl. Dieser Installer wird alle Ihre Interfaces waehrend der Installation dekonfigurieren, fuehren Sie ihn deshalb \
lokal auf dem Geraet aus. Bitte bestaetigen Sie allfaellige Fragen in der Kommandozeile mit \"y\" --> ENTER.\n\nMoechten Sie PFDialogControl installieren?" 10 80
	   	       
	    case $? in
      	0) chk_iface
      	;;
    	1) clear; exit
    	;;
  	  esac
# <- #
