#!/bin/sh
# Copyright (C) 2012 Luka Perkov <freecwmp@lukaperkov.net>

get_device_users() {
local parameter="$1"
local rc

freecwmp_check_prefix "Device.Users." "$parameter" "rc"
if [ $rc -ne 0 ]; then
	return
fi

case "$parameter" in
	Device.Users.UserNumberOfEntries)
	local val=`wc -l /etc/passwd | awk '{ print $1 }'`
	freecwmp_value_output "$parameter" "$val"
	return
	;;
esac

local num

# TODO: Device.Users.User.{i}.Alias (alias support does not exist)

freecwmp_parse_formated_parameter "$parameter" "Device.Users.User.{i}.Enable" "rc" "num"
if [ $rc -eq 0 ]; then
	# TODO: this is very system dependent, for now just look at users shell
	local sed_cmd=`echo -n \'$num; echo p\'`
	local val=`eval sed -n $sed_cmd /etc/passwd | grep -v '/bin/false' | wc -l`
	freecwmp_value_output "$parameter" "$val"
	return
fi

freecwmp_parse_formated_parameter "$parameter" "Device.Users.User.{i}.RemoteAccessCapable" "rc" "num"
if [ $rc -eq 0 ]; then
	# TODO: this is very system dependent, for now just look at users shell
	local sed_cmd=`echo -n \'$num; echo p\'`
	local val=`eval sed -n $sed_cmd /etc/passwd | grep -v '/bin/false' | wc -l`
	freecwmp_value_output "$parameter" "$val"
	return
fi

freecwmp_parse_formated_parameter "$parameter" "Device.Users.User.{i}.Username" "rc" "num"
if [ $rc -eq 0 ]; then
	local sed_cmd=`echo -n \'$num; echo p\'`
	local val=`eval sed -n $sed_cmd /etc/passwd | awk -F ':' '{ print $1 }'`
	freecwmp_value_output "$parameter" "$val"
	return
fi

freecwmp_parse_formated_parameter "$parameter" "Device.Users.User.{i}.Password" "rc" "num"
if [ $rc -eq 0 ]; then
	# if we *really* wanted to get the password we could do it like this
	#   local sed_cmd=`echo -n \'$num; echo p\'`
	#   local val=`eval sed -n $sed_cmd /etc/shadow | awk -F ':' '{ print $2 }'`
	#   freecwmp_value_output "$parameter" "$val"
	freecwmp_value_output "$parameter" ""
	return
fi

freecwmp_parse_formated_parameter "$parameter" "Device.Users.User.{i}.Language" "rc" "num"
if [ $rc -eq 0 ]; then
	freecwmp_value_output "$parameter" ""
	return
fi
}

set_device_users() {
local parameter="$1"
local value="$2"
local rc

freecwmp_check_prefix "Device.Users." "$parameter" "rc"
if [ $rc -ne 0 ]; then
	return
fi

local num

# TODO: Device.Users.User.{i}.Alias (alias support does not exist)

freecwmp_parse_formated_parameter "$parameter" "Device.Users.User.{i}.Enable" "rc" "num"
if [ $rc -eq 0 ]; then
	# TODO: this is very system dependent, for now just look at users shell
	local val
	if [ "$value" = "1" ]; then
		val="/bin/ash"
	else
		val="/bin/false"
	fi
	local sed_cmd
	sed_cmd=`echo -n \'$num; echo p\'`
	local orig=`eval sed -n $sed_cmd /etc/passwd | awk -F ':' '{ print $7 }'`
	sed_cmd=`echo -n \'$num; echo s%:$orig%:$val%\'`
	eval sed -i $sed_cmd /etc/passwd
	return
fi

freecwmp_parse_formated_parameter "$parameter" "Device.Users.User.{i}.RemoteAccessCapable" "rc" "num"
if [ $rc -eq 0 ]; then
	# TODO: this is very system dependent, for now just look at users shell
	local val
	if [ "$value" = "1" ]; then
		val="/bin/ash"
	else
		val="/bin/false"
	fi
	local sed_cmd
	sed_cmd=`echo -n \'$num; echo p\'`
	local orig=`eval sed -n $sed_cmd /etc/passwd | awk -F ':' '{ print $7 }'`
	sed_cmd=`echo -n \'$num; echo s%:$orig%:$val%\'`
	eval sed -i $sed_cmd /etc/passwd
	return
fi

freecwmp_parse_formated_parameter "$parameter" "Device.Users.User.{i}.Username" "rc" "num"
if [ $rc -eq 0 ]; then
	local sed_cmd
	sed_cmd=`echo -n \'$num; echo p\'`
	local orig=`eval sed -n $sed_cmd /etc/passwd | awk -F ':' '{ print $1 }'`
	sed_cmd=`echo -n \'$num; echo s%$orig:%$value:%\'`
	eval sed -i $sed_cmd /etc/passwd
	return
fi

freecwmp_parse_formated_parameter "$parameter" "Device.Users.User.{i}.Password" "rc" "num"
if [ $rc -eq 0 ]; then
	local sed_cmd
	sed_cmd=`echo -n \'$num; echo p\'`
	local orig=`eval sed -n $sed_cmd /etc/shadow | awk -F ':' '{ print $2 }'`
	sed_cmd=`echo -n \'$num; echo s%:$orig:%:$value:%\'`
	eval sed -i $sed_cmd /etc/shadow
	return
fi

# TODO: Device.Users.User.{i}.Language (why? look at the get value function for this parameter)
}

add_device_users() { return; }
