#!/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
	    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 -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"
	;;
esac
