#!/bin/bash
#
# vhost-stack
# https://git.stack-source.com/msb/vhost-stack
# MIT License Copyright (c) 2021 Matthew Saunders Brown

# load include file
source $(dirname $0)/vhost.sh

help()
{
  thisfilename=$(basename -- "$0")
  echo "Add system user to server."
  echo ""
  echo "usage: $thisfilename -u <username> [-p <password> [-i <uid>] [-w] [-h]"
  echo ""
  echo "  -h            Print this help."
  echo "  -u <username>   System username to add to server."
  echo "  -p <password> Password for username. Optional, random password generated if none specified."
  echo "  -i <uid>      Numberic User ID to assign to user. Optional, next available uid set if none specified."
  echo "  -w            Write user info to /home/username/.passwd. Warning! This inlcudes the unencrypted password."
  exit
}

vhost:getoptions "$@"

# check for username
if [ -z "$username" ]; then
  echo "username not set"
  exit 1
fi

# generate password if none specified
if [ -z "$password" ]; then
  password=`/usr/bin/pwgen 12 1`
fi

# get next UID if none specified
if [ -z "$uid" ]; then
  uid=`awk -F: '{uid[$3]=1}END{for(x=1000; x<=65534; x++) {if(uid[x] != ""){}else{print x; exit;}}}' /etc/passwd`
fi

# user & related files are only added if they don't already exist
# in this way it's safe to repeatedly try to add the same user

if ! /bin/grep -q "^$username:" /etc/passwd; then
  newusers="$username:$password:$uid:$uid::/home/$username:/bin/bash"
  echo "$newusers"|newusers
  pwck -s
  grpck -s
fi

if [[ ! -d "/home/$username" ]]; then
  install -d -o $username -g $username -m 755 /home/$username
else
  chown -R $username:$username /home/$username
fi

if [[ ! -f "/home/$username/.bash_logout" ]]; then
  install -o $username -g $username -m 640 /etc/skel/.bash_logout /home/$username
fi

if [[ ! -f "/home/$username/.bashrc" ]]; then
  install -o $username -g $username -m 640 /etc/skel/.bashrc /home/$username
  echo '' >> /home/$username/.bashrc
  echo '# local settings' >> /home/$username/.bashrc
  echo '' >> /home/$username/.bashrc
  echo 'export TERM=xterm-256color' >> /home/$username/.bashrc
  echo '' >> /home/$username/.bashrc
  echo 'command_not_found_handle () {' >> /home/$username/.bashrc
  echo '  /usr/local/libexec/command-not-found-handle $@' >> /home/$username/.bashrc
  echo '  return 127' >> /home/$username/.bashrc
  echo '}' >> /home/$username/.bashrc
fi

if [[ ! -f "/home/$username/.profile" ]]; then
  install -o $username -g $username -m 640 /etc/skel/.profile /home/$username
fi

if [[ -n $write ]]; then
  if [[ ! -f "/home/$username/.passwd" ]]; then
    touch /home/$username/.passwd
    chmod 640 /home/$username/.passwd
    chown $username:$username /home/$username/.passwd
    echo "$newusers" > /home/$username/.passwd
  fi
fi