#!/bin/bash

. $CONFIG_DIRECTORY/config
. $MODULES_DIRECTORY/config
. $MODULES_DIRECTORY/functions
. $MODULES_DIRECTORY/adduser.dml

get_user_data()
{
	ok=0;

	eval `echo "$DIALOG_get_user_data" | $DML`;
	if [ $res -eq 2 ]; then return 0; fi
	
	while [ $ok -eq 0 ]; do
		ok=1;
		
		if [ ! "`echo $username | $GREP -E \"^[[:alnum:]]{3,16}$\"`" ]; then
			eval `printf "$DIALOG_login_incorrect" "$username" | $DML`;
			if [ $res -eq 2 ]; then return 0; fi
			ok=0;
		fi

		if [ $ok -eq 1 ] && [ "`$GREP -E \"^$username:\" /etc/passwd`" ]; then
			load_user_data "$username"
			eval `printf "$DIALOG_login_exists" "$_comment" "$username" | $DML`;
			if [ $res -eq 2 ]; then return 0; fi
			ok=0;
		fi

		if [ $ok -eq 1 ] && [ ! "`echo \"$fullname\" | $GREP -E -v \";|,|:\"`" ]; then
			eval `printf "$DIALOG_fullname_incorrect" "$fullname" | $DML`;
			if [ $res -eq 2 ]; then return 0; fi
			ok=0;
		fi

		if [ $ok -eq 1 ] && [ ! "`echo \"$pass\" | $GREP -E \"^.{6,}\"`" ]; then
			eval `echo "$DIALOG_password_incorrect" | $DML`;
			if [ $res -eq 2 ]; then return 0; fi
			ok=0;
		fi

		if [ $ok -eq 1 ] && [ "$pass" != "$passverify" ]; then
			eval `echo "$DIALOG_passwords_dont_match" | $DML`;
			if [ $res -eq 2 ]; then return 0; fi
			ok=0;
		fi

		if [ $ok -eq 1 ]; then
			eval `printf "$DIALOG_show_user_data" "$username" "$fullname"| $DML`;
			if [ $res -eq 2 ]; then return 0; fi
		fi
		
	done

	return 1;
}

create_account()
{
	ok=1;

	# USERADD errorlevels
	# 0 - OK, user added
	# 1 - not allowed to use useradd (PAM error)
	# 2 - bad option or missing parameter
	# 9 - user exists

	output=`$USERADD -c "$fullname" -d $CFG_HOMEDIR/$username -k $CFG_SKEL -s $CFG_SHELL -g $CFG_GROUP -m $username 2> /dev/null`
	RETVAL=$?

	if [ $RETVAL -gt 0 ]; then
		case $RETVAL in
			1)
				eval `echo "$DIALOG_useradd_pam_error" | $DML`;;
			2)
				eval `echo "$DIALOG_useradd_wrong_parameters" | $DML`;;
			9)
				eval `echo "$DIALOG_useradd_user_exists" | $DML`;;
		esac
		return 0;
	fi

	# We assume that everything went OK so we can chmod HOME
	chmod $CFG_PERMISSION $CFG_HOMEDIR/$username

	# CHPASSWD runlevels
	# 0 - OK, password changed
	# 1 - error
	
	output=`(echo $username:$pass | $CHPASSWD) 2> /dev/null`
	RETVAL=$?

	if [ $RETVAL -gt 0 ]; then
		eval `printf "$DIALOG_chpasswd_error" $RETVAL | $DML`
		return 0;
	fi

	log_action "User $username added to the system"
	eval `echo "$DIALOG_user_added" | $DML`
	
	return 0;
}

get_user_data
RETVAL=$?

if [ $RETVAL -eq 0 ]; then exit; fi

create_account

