#!/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