#!/bin/sh

. /etc/sysconfig/livecd-user.conf

LIVECD_LOGIN="${LIVECD_LOGIN?Variable is not defined}"
LIVECD_GROUPS="${LIVECD_GROUPS:-}"
LIVECD_ADMIN="${LIVECD_ADMIN:-}"
LIVECD_SUDO="${LIVECD_SUDO:-}"
LIVECD_NO_ISSUE="${LIVECD_NO_ISSUE:-}"
LIVECD_SESSION="${LIVECD_SESSION:-}"

add_user() {
	useradd -m "$1" &&
	usermod -p "" "$1" &&
	if [ -n "$LIVECD_GROUPS" ]; then	# some of them might be missing
		local group=
		for group in $LIVECD_GROUPS; do
			usermod -a --groups "$group" "$1" ||:
		done
	fi
}

set_password() { echo "$1:$2" | chpasswd; }

set_admin() { usermod -a --groups "wheel" "$1"; }

# NB: one must care to purge this from LiveCD if it's installed permanently
set_sudo() {
	[ ! -w "/etc/sudoers" ] ||
		echo "$1	ALL=(ALL) ALL" >> "/etc/sudoers"
}

set_session() {
	local sesion_type
	if [ -f /usr/share/wayland-sessions/"$LIVECD_SESSION".desktop ]; then
		sesion_type=Session
	elif [ -f /usr/share/xsessions/"$LIVECD_SESSION".desktop ]; then
		sesion_type=XSession
	else
		echo "$LIVECD_SESSION.desktop is not found" >&2
		return 0
	fi
	local LIGHTDM_CONF=/etc/lightdm/lightdm.conf.d/autologin.conf
	if [ -f "$LIGHTDM_CONF" ]; then
		sed -i "/autologin-session=/d" "$LIGHTDM_CONF"
		echo "autologin-session=$LIVECD_SESSION" >> "$LIGHTDM_CONF"
	fi
	local account_dir=/var/lib/AccountsService/users
	[ -d "$account_dir" ] || return 0
	cat > "$account_dir"/"$LIVECD_LOGIN"<<-EOF
	[User]
	$sesion_type=$LIVECD_SESSION
	EOF
}

create_livecd_user()
{
	echo -n "Create LiveCD user '$LIVECD_LOGIN'"

	add_user "$LIVECD_LOGIN"
	[ -z "$LIVECD_ADMIN" ] || set_admin "$LIVECD_LOGIN"
	[ -z "$LIVECD_SUDO" ] || set_sudo "$LIVECD_LOGIN"
	[ -n "$LIVECD_NO_ISSUE" ] ||
	    echo "Hello friend, say '$LIVECD_LOGIN' to log in at \\l" >> /etc/issue

	# configure hasher and gear, if builder-useradd is available
	BUILDER_USERADD=builder-useradd
	if command -v $BUILDER_USERADD >/dev/null 2>&1; then
		$BUILDER_USERADD "$LIVECD_LOGIN"
	fi

	# configure autologin
	. autologin-sh-functions
	al_enable "$LIVECD_LOGIN"
	
	# configure default session
	[ -z "$LIVECD_SESSION" ] || set_session "$LIVECD_SESSION"
}

	getent passwd "$LIVECD_LOGIN" >/dev/null || create_livecd_user
