diff --git a/scripts/uninstall.sh b/scripts/uninstall.sh index 6de5842..1647531 100755 --- a/scripts/uninstall.sh +++ b/scripts/uninstall.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash # PiVPN: Uninstall Script +### FIXME: global: config storage, refactor all scripts to adhere to the storage +### FIXME: use variables where appropriate, reduce magic numbers by 99.9%, at least. + PKG_MANAGER="apt-get" setupVars="/etc/pivpn/setupVars.conf" @@ -9,12 +12,13 @@ if [ ! -f "${setupVars}" ]; then exit 1 fi +# shellcheck disable=SC1090 source "${setupVars}" # Find the rows and columns. Will default to 80x24 if it can not be detected. screen_size=$(stty size 2>/dev/null || echo 24 80) -rows=$(echo $screen_size | awk '{print $1}') -columns=$(echo $screen_size | awk '{print $2}') +rows=$(echo "$screen_size" | awk '{print $1}') +columns=$(echo "$screen_size" | awk '{print $2}') # Divide by two so the dialogs take up half of the screen, which looks nice. r=$(( rows / 2 )) @@ -23,18 +27,19 @@ c=$(( columns / 2 )) r=$(( r < 20 ? 20 : r )) c=$(( c < 70 ? 70 : c )) +### FIXME: introduce global lib spinner(){ local pid=$1 local delay=0.50 local spinstr='/-\|' - while [ "$(ps a | awk '{print $1}' | grep "$pid")" ]; do + while ps a | awk '{print $1}' | grep "$pid"; do local temp=${spinstr#?} printf " [%c] " "$spinstr" local spinstr=$temp${spinstr%"$temp"} sleep $delay - printf "\b\b\b\b\b\b" + printf "\\b\\b\\b\\b\\b\\b" done - printf " \b\b\b\b" + printf " \\b\\b\\b\\b" } removeAll(){ @@ -52,6 +57,7 @@ removeAll(){ # Removing firewall rules. echo "::: Removing firewall rules..." + ### FIXME: introduce global config space! if [ "$VPN" = "wireguard" ]; then pivpnPROTO="udp" pivpnDEV="wg0" @@ -63,9 +69,11 @@ removeAll(){ if [ "$USING_UFW" -eq 1 ]; then + ### FIXME: SC2154 ufw delete allow "${pivpnPORT}"/"${pivpnPROTO}" > /dev/null + ### FIXME: SC2154 ufw route delete allow in on "${pivpnDEV}" from "${pivpnNET}/24" out on "${IPv4dev}" to any > /dev/null - sed -z "s/*nat\n:POSTROUTING ACCEPT \[0:0\]\n-I POSTROUTING -s ${pivpnNET}\/24 -o ${IPv4dev} -j MASQUERADE\nCOMMIT\n\n//" -i /etc/ufw/before.rules + sed -z "s/*nat\\n:POSTROUTING ACCEPT \\[0:0\\]\\n-I POSTROUTING -s ${pivpnNET}\\/24 -o ${IPv4dev} -j MASQUERADE\\nCOMMIT\\n\\n//" -i /etc/ufw/before.rules iptables -t nat -D POSTROUTING -s "${pivpnNET}/24" -o "${IPv4dev}" -j MASQUERADE ufw reload &> /dev/null @@ -100,6 +108,7 @@ removeAll(){ # On Debian and armv7l Raspbian, remove the unstable repo (on armv6l Raspbian # there is no wireguard package). On Ubuntu, remove the PPA. + ### FIXME: unconditionally rm'ing unstable.list isn't a good idea, it appears. What if someone else put it there manually? if [ "$PLAT" = "Debian" ] || { [ "$PLAT" = "Raspbian" ] && [ "$(uname -m)" = "armv7l" ]; }; then rm /etc/apt/sources.list.d/unstable.list rm /etc/apt/preferences.d/limit-unstable @@ -126,27 +135,30 @@ removeAll(){ elif [ "${i}" = "unattended-upgrades" ]; then + ### REALLY??? rm -rf /var/log/unattended-upgrades rm -rf /etc/apt/apt.conf.d/*periodic rm -rf /etc/apt/apt.conf.d/*unattended-upgrades + elif [ "${i}" = "openvpn" ]; then + deluser openvpn fi - printf ":::\tRemoving %s..." "$i"; $PKG_MANAGER -y remove --purge "$i" &> /dev/null & spinner $!; printf "done!\n"; + printf ":::\\tRemoving %s..." "$i"; $PKG_MANAGER -y remove --purge "$i" &> /dev/null & spinner $!; printf "done!\\n"; break ;; - [Nn]* ) printf ":::\tSkipping %s\n" "$i"; + [Nn]* ) printf ":::\\tSkipping %s\\n" "$i"; break ;; - * ) printf "::: You must answer yes or no!\n";; + * ) printf "::: You must answer yes or no!\\n";; esac done done # Take care of any additional package cleaning printf "::: Auto removing remaining dependencies..." - $PKG_MANAGER -y autoremove &> /dev/null & spinner $!; printf "done!\n"; + $PKG_MANAGER -y autoremove &> /dev/null & spinner $!; printf "done!\\n"; printf "::: Auto cleaning remaining dependencies..." - $PKG_MANAGER -y autoclean &> /dev/null & spinner $!; printf "done!\n"; + $PKG_MANAGER -y autoclean &> /dev/null & spinner $!; printf "done!\\n"; echo ":::" # Removing pivpn files @@ -160,7 +172,7 @@ removeAll(){ rm -rf /opt/pivpn rm -rf /etc/.pivpn rm -rf /etc/pivpn - rm -rf /var/log/*pivpn* + rm -f /var/log/*pivpn* rm -f /usr/local/bin/pivpn rm -f /etc/bash_completion.d/pivpn @@ -169,28 +181,29 @@ removeAll(){ if [ "$VPN" = "wireguard" ]; then rm -f /etc/wireguard/wg0.conf - rm -rf /etc/wireguard/configs - rm -rf /etc/wireguard/keys - rm -rf $install_home/configs + rm -f /etc/wireguard/configs + rm -f /etc/wireguard/keys + ### FIXME SC2154 + rm -f "$install_home/configs" elif [ "$VPN" = "openvpn" ]; then - rm -rf /var/log/*openvpn* + rm -f /var/log/*openvpn* rm -f /etc/openvpn/server.conf rm -f /etc/openvpn/crl.pem - rm -rf /etc/openvpn/easy-rsa - rm -rf $install_home/ovpns + rm -f /etc/openvpn/easy-rsa + rm -f "$install_home/ovpns" fi echo ":::" - printf "::: Finished removing PiVPN from your system.\n" - printf "::: Reinstall by simpling running\n:::\n:::\tcurl -L https://install.pivpn.io | bash\n:::\n::: at any time!\n:::\n" + printf "::: Finished removing PiVPN from your system.\\n" + printf "::: Reinstall by simpling running\\n:::\\n:::\\tcurl -L https://install.pivpn.io | bash\\n:::\\n::: at any time!\\n:::\\n" } askreboot(){ - printf "It is \e[1mstrongly\e[0m recommended to reboot after un-installation.\n" + printf "It is \\e[1mstrongly\\e[0m recommended to reboot after un-installation.\\n" read -p "Would you like to reboot now? [y/n]: " -n 1 -r echo if [[ ${REPLY} =~ ^[Yy]$ ]]; then - printf "\nRebooting system...\n" + printf "\\nRebooting system...\\n" sleep 3 shutdown -r now fi @@ -204,6 +217,6 @@ while true; do case $yn in [Yy]* ) removeAll; askreboot; break;; - [Nn]* ) printf "::: Not removing anything, exiting...\n"; break;; + [Nn]* ) printf "::: Not removing anything, exiting...\\n"; break;; esac done