#! /bin/bash
set -e

if [ -z "$2" ] ; then 
    cat <<EOF
$0 [username] [ssh-public-key] [user-id (optional)]

    adds user, using user-id older than the specified value.
    User-id defaults to 1000.

EOF
  exit 1
fi

USERNAME="$1"
SSHPUBKEY="$2"
USERNUM="$3"
test -z "$USERNUM" && USERNUM=1000
USERNUM=$(cat /etc/{passwd,group}|awk '{split($0,A,":"); usedid[A[3]]="yes"}END{i='$USERNUM'; while ("yes"==usedid[i]) {i ++;}; print i}')

if cat /etc/{passwd,group} | cut -d':' -f1 | grep '^'${USERNAME}'$'; then
    echo "I: User already exists, adding the key"
    test -d "/home/$USERNAME/.ssh"
    echo "$SSHPUBKEY" >> /home/$USERNAME/.ssh/authorized_keys
    echo "I: Key successfully added"
else
    echo "$USERNAME:*:$USERNUM:$USERNUM::/home/$USERNAME:/bin/bash" >> /etc/passwd
    echo "$USERNAME:x:$USERNUM:" >> /etc/group
    test ! -d "/home/$USERNAME"
    install -d -m 2755 -o "$USERNAME" -g "$USERNAME" "/home/$USERNAME"
    install -d -m 755 -o "$USERNAME" -g "$USERNAME" "/home/$USERNAME/.ssh"
    echo "$SSHPUBKEY" > /home/$USERNAME/.ssh/authorized_keys
    chown "$USERNAME.$USERNAME" "/home/$USERNAME/.ssh/authorized_keys"
    echo "I: User successfully added"
fi
