aboutsummaryrefslogtreecommitdiff
path: root/docker/scripts/post/20_ejabberd_register_users.sh
diff options
context:
space:
mode:
Diffstat (limited to 'docker/scripts/post/20_ejabberd_register_users.sh')
-rwxr-xr-xdocker/scripts/post/20_ejabberd_register_users.sh118
1 files changed, 118 insertions, 0 deletions
diff --git a/docker/scripts/post/20_ejabberd_register_users.sh b/docker/scripts/post/20_ejabberd_register_users.sh
new file mode 100755
index 000000000..0a9569559
--- /dev/null
+++ b/docker/scripts/post/20_ejabberd_register_users.sh
@@ -0,0 +1,118 @@
+#!/bin/bash
+
+source "${EJABBERD_HOME}/scripts/lib/base_config.sh"
+source "${EJABBERD_HOME}/scripts/lib/config.sh"
+source "${EJABBERD_HOME}/scripts/lib/base_functions.sh"
+source "${EJABBERD_HOME}/scripts/lib/functions.sh"
+
+# Do not exit if users already registered
+set +e
+
+randpw() {
+ < /dev/urandom tr -dc A-Z-a-z-0-9 | head -c ${1:-16};
+ echo;
+}
+
+
+register_user() {
+ local user=$1
+ local domain=$2
+ local password=$3
+
+ ${EJABBERDCTL} register ${user} ${domain} ${password}
+ return $?
+}
+
+
+register_all_users() {
+ # register users from environment $EJABBERD_USERS with given
+ # password or random password written to stout. Use whitespace
+ # to seperate users.
+ #
+ # sample:
+ # - add a user with an given password:
+ # -e "EJABBERD_USERS=admin@example.com:adminSecret"
+ # - add a user with a random password:
+ # -e "EJABBERD_USERS=user@example.com"
+ # - set password for admin and use random for user1:
+ # -e "EJABBERD_USERS=admin@example.com:adminSecret user@example.com"
+
+ for user in ${EJABBERD_USERS} ; do
+ local jid=${user%%:*}
+ local password=${user#*:}
+
+ local username=${jid%%@*}
+ local domain=${jid#*@}
+
+ [[ "${password}" == "${jid}" ]] \
+ && password=$(randpw)
+
+ register_user ${username} ${domain} ${password}
+ local retval=$?
+
+ [[ ${retval} -eq 0 ]] \
+ && echo "Password for user ${username}@${domain} is ${password}"
+ done
+}
+
+
+file_exist ${FIRST_START_DONE_FILE} \
+ && exit 0
+
+
+file_exist ${CLUSTER_NODE_FILE} \
+ && exit 0
+
+
+is_set ${EJABBERD_USERS} \
+ && register_all_users
+
+
+##################################
+## Keep for backward compatibility
+
+register_all_ejabberd_admins() {
+ # add all admins from environment $EJABBERD_ADMINS with the passwords from
+ # environment $EJABBERD_ADMIN_PASS.
+
+ local passwords
+ local IFS=' '
+ read -a passwords <<< "${EJABBERD_ADMIN_PWD}"
+
+ for admin in ${EJABBERD_ADMINS} ; do
+ local user=${admin%%@*}
+ local domain=${admin#*@}
+ local password=${passwords[0]}
+ passwords=("${passwords[@]:1}")
+ register_user ${user} ${domain} ${password}
+ done
+}
+
+
+register_all_ejabberd_admins_randpw() {
+ # add all admins from environment $EJABBERD_ADMINS with a random
+ # password and write the password to stdout.
+
+ for admin in ${EJABBERD_ADMINS} ; do
+ local user=${admin%%@*}
+ local domain=${admin#*@}
+ local password=$(randpw)
+
+ register_user ${user} ${domain} ${password}
+ local retval=$?
+
+ [[ ${retval} -eq 0 ]] \
+ && echo "Password for user ${user}@${domain} is ${password}"
+ done
+}
+
+
+is_set ${EJABBERD_ADMIN_PWD} \
+ && register_all_ejabberd_admins
+
+
+is_true ${EJABBERD_ADMIN_RANDPWD} \
+ && register_all_ejabberd_admins_randpw
+
+
+exit 0