#!/bin/sh

_()
{
LANG=${in_language%%;*}.utf8 gettext "alterator-users" "$1"
}


#turn off auto expansion
set -f

. /usr/share/alterator/build/backend3.sh

GPASSWD="/usr/bin/gpasswd"
GRADD="/usr/sbin/groupadd"
GRDEL="/usr/sbin/groupdel"
IDUTIL="/usr/bin/id"

are_user_exists()
{
	"$IDUTIL" -Gn "$1" 2>/dev/null|tr ' ' '\n'| grep -qs "^$2\$"
}

are_group_exists()
{
	egrep -qs "^$1:" /etc/group
}

error_message()
{
	echo "(error \"$1\")"
}

group_error_message()
{
	case "$1" in
	  2) error_message "`_ "invalid command syntax"`" ;;
	  3) error_message "`_ "invalid argument to option"`" ;;
	  4) error_message "`_ "gid not unique"`" ;; 
          6) error_message "`_ "specified group doesn't exist"`" ;;
          8) error_message "`_ "can't remove user's primary group"`" ;; #'
	  9) error_message "`_ "group name not unique"`" ;;
	  10) error_message "`_ "can't update group file"`" ;; #'
	  *) error_message "retcode=$1" ;;
	esac
}


on_message()
{
	case "$in_action" in
		list)
			if [ "$in__objects" = "/" ] ;then
				echo '('
				cat /etc/group|cut -f1 -d:|sed 's,.*,("&"),'
				echo ')'
			else
				echo '('
				cat /etc/group|grep "^$in__objects:"|cut -f4 -d:|tr ',' '\n'|sed 's,.*,("&"),'
				echo ')'
			fi
			;;
		delete)
			local retcode=0
			if  [ ${in__objects%/*} = "$in__objects" ] ;then
				"$GRDEL" "$in__objects"
				retcode="$?"

				if [ "$retcode" -ne 0 ]; then
					group_error_message "$retcode"
				else
					echo '()'
				fi
			else
				local group=${in__objects%%/*}
				local user=${in__objects##*/}

				"$GPASSWD" -d "$user" "$group" >/dev/null
				echo '()'
			fi
			;;
		new)
			local retcode=0
			if  [ ${in__objects%/*} = "$in__objects" ] ;then
				local args=
				[ "$in_type" = "system" ] && args="-r"
				"$GRADD" $args "$in__objects"
				retcode="$?"

				if [ "$retcode" -ne 0 ]; then
					group_error_message "$retcode"
				else
					echo '()'
				fi
			else
				local group=${in__objects%%/*}
				local user=${in__objects##*/}
				
				"$GPASSWD" -a "$user" "$group" >/dev/null
				retcode="$?"

				if [ "$retcode" -ne 0 ]; then
					echo '(error "unable to add user group")'
				else
					echo '()'
				fi
			fi
			;;
		*)
			echo '#f'
			;;
	esac
}

message_loop
