#!/bin/sh

alterator_api_version=1

. alterator-sh-functions

# List all available policies
list_policies()
{
    samba-tool gpo listall | sed -n 's/^\(GPO\|display name\) *: \(.*\)$/\2/p' | sed '$!N;s/\n/ /' | while read id name;do
        write_enum_item "$id" "$name"
    done
    write_enum_item "postscript" "`_ "Postscript stage"`"
}

# List rules
list_rules()
{
    # use locale with UTF-8 for correct pass unicode output
    export IFS=\|
    LC_ALL=en_US.UTF-8 in_language="$in_language" adp-helper list "$in_policy" "$in_class" | while read id label params; do
        write_table_item \
            name "$id" \
            id "$id" \
            label "$label" \
            params "$params"
        #write_enum_item "$id" "$label"
    done
}

# List rules in JSON format
list_rules_json()
{
    # use locale with UTF-8 for correct pass unicode output
    export IFS=\|
    content="$(LC_ALL=en_US.UTF-8 in_language="$in_language" adp-helper json "$in_policy" "$in_class")"
    write_string_param json "\"$content\""
}

# Write rules in base64 format
write_rules()
{
    echo "$in_edata" | LC_ALL=en_US.UTF-8 in_language="$in_language" adp-helper write "$in_policy" "$in_class"
}

##############################################################################
##### Message loop

on_message()
{
    case "$in_action" in
        list)
            case "$in__objects" in
                policies)
                    list_policies ;;
		classes)
		    write_enum_item "user" "`_ "User"`"
		    write_enum_item "machine" "`_ "Machine"`"
		    ;;
                rules)
                    [ -n "$in_policy" ] || return
                    [ -n "$in_class" ] || return
                    list_rules ;;
		json)
                    [ -n "$in_policy" ] || return
                    [ -n "$in_class" ] || return
                    list_rules_json ;;
            esac
            ;;
        read)
            which samba-tool &>/dev/null && write_bool_param is_dc 1 || write_bool_param is_dc 0
            ;;
        write)
            #echo "WRITE_RULE" >> /tmp/domain-policy.log
            #set|grep ^in_ >> /tmp/domain-policy.log
            [ -n "$in_policy" ] || return
            [ -n "$in_class" ] || return
            write_rules
            ;;
    esac
}

message_loop
