70 lines
1.5 KiB
Bash
70 lines
1.5 KiB
Bash
#!/bin/sh
|
|
|
|
msg_err() {
|
|
printf "\033[0;31m%s\033[0m\n" "$*" >&2
|
|
exit 1
|
|
}
|
|
msg_info() {
|
|
printf "\033[0;32m%s\033[0m\n" "$*"
|
|
}
|
|
msg_warn() {
|
|
printf "\033[0;33m%s\033[0m\n" "$*"
|
|
}
|
|
print_usage() {
|
|
msg_warn "Usage: $(basename $0) [-h|--help] <username> <email> \"<pubkey>\""
|
|
}
|
|
|
|
case $1 in
|
|
-h | --help)
|
|
print_usage; exit
|
|
;;
|
|
-* | --*)
|
|
print_usage; exit 1
|
|
;;
|
|
*)
|
|
if [ $# -ne 3 ]; then
|
|
print_usage
|
|
msg_err "Not enough arguments"
|
|
fi
|
|
|
|
if id "$1" > /dev/null 2>&1; then
|
|
exit 0
|
|
fi
|
|
|
|
hostname="$(hostname)"
|
|
newpw="$(pwgen -s 20 1)"
|
|
newpw_hash="$(pwhash $newpw)"
|
|
|
|
msg_info "Adding new user: %s" "$1"
|
|
useradd -m -g users -G cvsadmin -s "${newpw_hash}" /bin/sh "$1" || msg_err "Unable to create user"
|
|
|
|
sed -e "s/newuser/$1/g" \
|
|
-e "s/newpassword/$newpw/" \
|
|
-e "s/newemail/$2/" \
|
|
-e "s/hostname/$hostname/" \
|
|
/usr/local/share/laidback/email.tmpl | sendmail "$1" "$2"
|
|
|
|
printf "%s\n" "$3" | doas tee "/home/$1/.ssh/authorized_keys"
|
|
|
|
doas -u ejabberd /usr/pkg/sbin/ejabberdctl register "$1" "${hostname}" "$newpw"
|
|
|
|
case $BOUNCER in
|
|
suika)
|
|
echo "${newpw}" | doas /usr/pkg/bin/suikadb -config /usr/pkg/etc/suika/config create-user "$1"
|
|
;;
|
|
znc)
|
|
doas /usr/local/sbin/znc-adduser "$1" "${newpw_hash}"
|
|
;;
|
|
*)
|
|
msg_warn "Variable unset. Assuming ZNC"
|
|
doas /usr/local/sbin/znc-adduser "$1" "${newpw_hash}"
|
|
;;
|
|
esac
|
|
|
|
msg_info "Creating symbolic links..."
|
|
ln -s /home/$1/public_gopher /var/gopher/~$1
|
|
ln -s /home/$1/public_gemini /var/gemini/~$1
|
|
ln -s /home/$1/public_hg /srv/hg/$1
|
|
;;
|
|
esac
|