ipban/install.zsh

110 lines
2.1 KiB
Bash
Executable file

#!/bin/zsh
# synapsys:
# cout "output_type" "message"
# supported output types:
# inf war err
cout() {
local msg="$2"
local lead="[=]"
if [[ "$1" == "war" ]]; then
lead="[?]"
fi
if [[ "$1" == "inf" ]]; then
lead="[=]"
fi
if [[ "$1" == "err" ]]; then
lead="[!]"
fi
print -P "$lead" "$msg"
}
# synapsys:
# ask "default_ans" "message"
#
# if user answers YES ask returns 0
# if NO, returns 1
#
# ex: ask "y" "overwrite?"
# out: overwrite? [Y/n]:
ask() {
local def_ans="$1"
local promt
if [[ "$def_ans" == "y" ]]; then
promt="[Y/n]"
elif [[ "$def_ans" == "n" ]]; then
promt="[y/N]"
else
cout "err" "ask() got \$default_ans as $1"
exit 10
fi
local msg="$2"
while [[ true ]]; do
local ans=''
read -r "ans?$msg $promt: "
local ans="${ans:l}"
if [[ "$def_ans" == "y" ]]; then
if [[ -z "$ans" || "$ans" == "y" || "$ans" == "yes" ]]; then
return 0
elif [[ "$ans" == "n" || "$ans" == "no" ]]; then
return 1
fi
elif [[ "$def_ans" == "n" ]]; then
if [[ -z "$ans" || "$ans" == "n" || "$ans" == "no" ]]; then
return 1
elif [[ "$ans" == "y" || "$ans" == "YES" ]]; then
return 0
fi
fi
done
}
# synapsys:
# abort_install "reason"
abort_install() {
cout "err" "%F{red}Install aborted:%f\t$1"
exit 1
}
if [[ ! $(id -g ipban) ]]; then
sudo groupadd --system ipban
else
abort_install "Group %Bipban%b already exists"
fi
if [[ ! $(id -u ipban) ]]; then
sudo useradd \
--system \
--gid ipban \
--no-create-home \
--comment "ipban service" \
--home-dir / \
--shell /sbin/nologin \
ipban
else
abort_install "User %Bipban%b already exists"
fi
db_dir="/var/lib/ipban"
if [[ ! -d $db_dir ]]; then
sudo mkdir $db_dir
sudo chmod 775 $db_dir
sudo chown ipban:ipban $db_dir
else
if ask "n" "directory $db_dir already exists. rewrite?"; then
sudo rm -rf $db_dir
sudo mkdir $db_dir
sudo chmod 775 $db_dir
sudo chown ipban:ipban $db_dir
else
abort_install "User decided not to overwrite \'$db_dir\'. Which is requred to store banned ip\'s"
fi
fi
#TODO: create systemd service