Files
shell_sequencer/seqs/ejabberd.sh

155 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
# shellcheck disable=SC2154 # Variable referenced but not assigned (seq_origin)
readonly toolName=ejabberd
readonly toolDeps=(ejabberd erlang-p1-mysql)
readonly toolConfLoc="/etc/ejabberd/ejabberd.yml"
readonly toolAdminConf="/etc/ejabberd/ejabberdctl.cfg"
# for http upload
readonly toolStorageLoc="/var/ejabberd"
readonly certRoot="/etc/letsencrypt"
# needed for different steps
myDomain=
myUser=
myPass=
seq_trapExit() { unset myPass; }
step_1_info() { echo "Install $toolName via apt"; }
step_1_alias() { echo "install"; }
step_1() {
exe apt update
exe apt install -y "${toolDeps[@]}"
exe systemctl stop $toolName
}
step_2_info() { echo "Use certificate from local letsencrypt"; }
step_2() {
readDomain
local certLoc="${certRoot}/live/${myDomain}/full.pem"
if [ ! -f "$certLoc" ] ; then
echo "[ERROR] $certLoc not found"
return 1;
fi
local toolCertLoc="/etc/ejabberd/ejabberd.pem"
if [ -f "${toolCertLoc}.bck" ] ; then
echo "[ERROR] Cannot backup original $toolName certificate"
return 1;
fi
exe mv "$toolCertLoc" "${toolCertLoc}.bck"
exe ln -s "$certLoc" "$toolCertLoc"
# read access for ejabberd to read certificate
exe chown root:ejabberd "$certRoot"
exe chmod 750 "$certRoot"
}
step_3_info() { echo "Create basic configuration"; }
step_3() {
if [ ! -f "${seq_origin}/ejabberd.yml" ] ; then
addConf -m "$MissingConfEntry" "$toolConfLoc"
else
readDomain
echo -e "\nThis user will be the admin:"
readUser
addConf -cf "${seq_origin}/ejabberd.yml" "$toolConfLoc"
# modify configuration
exe sed -i "s/mydomain\.eu/${myDomain}/" "$toolConfLoc"
exe sed -i "s/myuser/${myUser}/" "$toolConfLoc"
# create storage for http upload
exe mkdir -p "$toolStorageLoc"
exe chown root:$toolName "$toolStorageLoc"
exe chmod 770 "$toolStorageLoc"
fi
# Erlang-VM to listen only on local interface
exe sed -i "s/#\(INET_DIST_INTERFACE=127\.0\.0\.1\)/\1/" "$toolAdminConf"
}
MissingConfEntry="Seq's basic configuration file \"${seq_origin}/ejabberd.yml\" missing.
Backup $toolConfLoc and create a configuration manually.
Some essential settings needed:
- Domain
- Admin User"
step_4_info() { echo "Restart $toolName"; }
step_4_alias() { echo "restart"; }
step_4() {
exe service ejabberd restart
}
step_5_info() { echo "Create new user"; }
step_5_alias() { echo "adduser"; }
step_5() {
readDomain
readUser
readUserPass
exe ejabberdctl register "${myUser}" "${myDomain}" "${myPass}"
}
step_10_info() { echo "List existing user"; }
step_10_alias() { echo "listuser"; }
step_10() {
readDomain
exe ejabberdctl registered_users "${myDomain}"
}
step_12_info() { echo "Change password for existing user"; }
step_12_alias() { echo "passwd"; }
step_12() {
readDomain
readUser
readUserPass
exe ejabberdctl change_password "${myUser}" "${myDomain}" "${myPass}"
}
step_14_info() { echo "Remove registered user"; }
step_14_alias() { echo "deluser"; }
step_14() {
readDomain
readUser
readUserPass
exe ejabberdctl unregister "${myUser}" "${myDomain}" "${myPass}"
}
readDomain() {
if [ "$myDomain" == "" ] ; then
myDomain=$(ask "Enter your domain: ")
endIfEmpty myDomain "$toolName domain"
fi
}
readUser() {
sqr::echo -e "\nDon't use spaces in user name!"
if [ "$myUser" == "" ] ; then
myUser=$(ask "Enter user name: ")
sqr::echo
endIfEmpty myUser "$toolName user name"
fi
}
readUserPass() {
local myPass2=
sqr::echo -e "\nDon't use spaces in user password!"
if [ -z "$myPass" ] ; then
myPass=$(ask -s "Enter user password: "); echo
sqr::echo
myPass2=$(ask -s "Enter user password again: "); echo
sqr::echo
if [ "$myPass" != "$myPass2" ] ; then
error "Passwords don't match"
return 1;
fi
unset myPass2
endIfEmpty myPass "$toolName user password"
fi
}
# shellcheck disable=SC2034 # Appears unused
readonly sqr_minVersion=16
# shellcheck disable=SC1091 # Don't follow this source
. /usr/local/bin/sequencer.sh