#!/bin/sh -e

export IFS=' 	
'
export PATH=/sbin:/usr/sbin:/bin:/usr/bin
umask 022

. "/usr/libexec/girar/girar-sh-functions"

sudo_init

# Validate /etc/girar/packages.git
GIT_DIR="/etc/girar/packages.git" git rev-parse --git-dir >/dev/null

# Validate /etc/girar/projects.git
GIT_DIR="/etc/girar/projects.git" git rev-parse --git-dir >/dev/null

# Validate /etc/girar/private.git
GIT_DIR="/etc/girar/private.git" git rev-parse --git-dir >/dev/null

usage()
{
	echo "$PROG: $*" >&2
	echo "usage: $PROG <NAME>"
	exit 1
}

set_name "$1"
shift
printf %s "$NAME" |egrep -qs '^[a-z][a-z_0-9][a-z_0-9]*$' ||
	fatal "$NAME: invalid NAME specified"

IT_NAME="git_$NAME"
IT_HOME="/usr/share/girar/home"
IT_SHELL="/usr/libexec/girar/girar-sh"
GIRAR_HOME="/people"
REAL_HOME="$GIRAR_HOME/$NAME"

[ -d "$IT_HOME" ] ||
	message "error adding $NAME: directory $IT_HOME not available"
[ -d "$GIRAR_HOME" ] ||
	message "error adding $NAME: directory $GIRAR_HOME not available"

AUTH="/etc/openssh/authorized_keys/$IT_NAME"
[ ! -e "$AUTH" ] ||
	message "error adding $NAME: authorized keys file '$AUTH' already exists"

getent passwd "$IT_NAME" ||
	fatal "$IT_NAME: error update user"

GIRAR_HOME_MOUNT="$(df -P "$GIRAR_HOME" |awk '{dir=$6} END{print dir}')"
setquota "$IT_NAME" 1000000 1500000 100000 150000 "$GIRAR_HOME_MOUNT" ||
	message "$IT_NAME: failed to set disk quota on $GIRAR_HOME_MOUNT"

for d in "$REAL_HOME" "$REAL_HOME/packages" "$REAL_HOME/public"; do
	[ -d "$d" ] && continue
	install -d -o "$IT_NAME" -g girar -m755 "$d" ||
		message "$IT_NAME: failed to create $d"
done

for d in "$REAL_HOME/private"; do
	[ -d "$d" ] && continue
	install -d -o "$IT_NAME" -g girar -m751 "$d" ||
		message "$IT_NAME: failed to create $d"
done

for d in "$REAL_HOME/etc" "$REAL_HOME/incoming"; do
	[ -d "$d" ] && continue
	install -d -o "$IT_NAME" -g wheel -m750 "$d" ||
		message "$IT_NAME: failed to create $d"
done

for n in packages projects private public; do
	EMAIL_DIR="/var/lib/girar/email/$n"
	[ -d "$EMAIL_DIR/$NAME" ] && continue
	mkdir -p "$EMAIL_DIR"
	install -d -o "$IT_NAME" -g girar -m755 "$EMAIL_DIR/$NAME" ||
		message "$IT_NAME: failed to create $EMAIL_DIR/$NAME"
done

for d in "/var/spool/girar/people/$NAME"; do
	[ -d "$d" ] && continue
	install -d -o "$IT_NAME" -g girar -m755 "$d" ||
		message "$IT_NAME: failed to create $d"
done

git_clone()
{
	local src="$1"; shift
	local dst="$1"; shift

	su -l "$IT_NAME" -s /bin/sh -c \
		"git clone --bare --template=/usr/share/girar/templates '$src' '$dst'" ||
	message "$IT_NAME: failed to setup $dst"
}

[ -d "$REAL_HOME/etc/packages.git" ] ||
	git_clone "/etc/girar/packages.git" "$REAL_HOME/etc/packages.git"
[ -d "$REAL_HOME/etc/projects.git" ] ||
	git_clone "/etc/girar/packages.git" "$REAL_HOME/etc/projects.git"
[ -d "$REAL_HOME/etc/private.git" ] ||
	git_clone "/etc/girar/private.git" "$REAL_HOME/etc/private.git"
[ -d "$REAL_HOME/etc/public.git" ] ||
	git_clone "/etc/girar/public.git" "$REAL_HOME/etc/public.git"
