#!/bin/bash toolName=ejabberd toolConfLoc="/etc/ejabberd/ejabberd.yml" toolAdminConf="/etc/ejabberd/ejabberdctl.cfg" # for http upload toolStorageLoc="/var/ejabberd" certRoot="/etc/letsencrypt" # needed for different steps myDomain= myUser= myPass= step_1_info() { echo "Install $toolName via apt"; } step_1_alias() { ALIAS="install"; } step_1() { exe apt update exe apt install -y $toolName 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 $SEQDIR/ejabberd.yml ] ; then addConf -m "$MissingConfEntry" "$toolConfLoc" else readDomain echo -e "\nThis user will be the admin:" readUser addConf -c "$(cat $SEQDIR/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 \"$SEQDIR/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() { ALIAS="restart"; } step_4() { exe service ejabberd restart } step_5_info() { echo "Create new user"; } step_5_alias() { ALIAS="adduser"; } step_5() { readDomain readUser readUserPass exe ejabberdctl register $myUser $myDomain $myPass } step_10_info() { echo "List existing user"; } step_10_alias() { ALIAS="listuser"; } step_10() { readDomain exe ejabberdctl registered_users $myDomain } step_12_info() { echo "Change password for existing user"; } step_12_alias() { ALIAS="passwd"; } step_12() { readDomain readUser readUserPass exe ejabberdctl change_password $myUser $myDomain $myPass } readDomain() { if [ "$myDomain" == "" ] ; then read -p "Enter your domain: " myDomain endCheckEmpty myDomain "$toolName domain" fi } readUser() { echo -e "\nDon't use spaces in user name!" if [ "$myUser" == "" ] ; then read -p "Enter user name: " myUser echo endCheckEmpty myUser "$toolName user name" fi } readUserPass() { echo -e "\nDon't use spaces in user password!" if [ "$myPass" == "" ] ; then read -s -p "Enter user password: " myPass echo read -s -p "Enter user password again: " myPass2 echo if [ "$myPass" != "$myPass2" ] ; then echo "[ERROR] Passwords don't match" return 1; fi endCheckEmpty myPass "$toolName user password" fi } SEQDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >>/dev/null 2>&1 && pwd )" VERSION_SEQREV=4 . sequencer.sh