#!/bin/sh

alterator_api_version=1
po_domain="alterator-dovecot"
dovecotconffile="/etc/dovecot/dovecot.conf"

set -f

. alterator-sh-functions

read_list()
{
    sed -nr "/^[[:space:]]*$1[[:space:]]*=/ {s,^[[:space:]]*$1[[:space:]]*=[[:space:]],,;p}" "$dovecotconffile"|
	tr -s ' ' ';'
}

write_list()
{
    local value=" $(echo "$2"|tr ';' ' ')"
    sed -r "s,^([[:space:]]*)(#)?([[:space:]]*)?$1[[:space:]]*=.*,\1\3$1 =$value," -i "$dovecotconffile"
}

on_message()
{
	case "$in_action" in
		list)
		    case "$in__objects" in
			avail_protocols)
			    write_enum_item pop3 "`_ "POP3"`"
			    write_enum_item pop3s "`_ "POP3 over TLS/SSL"`"
			    write_enum_item imap "`_ "IMAP4"`"
			    write_enum_item imaps "`_ "IMAP4 over TLS/SSL"`"
			    ;;
			avail_mechanisms)
			    write_enum_item plain "`_ "PLAIN"`"
			    write_enum_item login  "`_ "LOGIN"`"
			    write_enum_item anonymous "`_ "ANONYMOUS"`"
			    ;;
		    esac
		    ;;
		read)
		    write_string_param protocols "$(read_list protocols)"
		    write_string_param mechanisms "$(read_list mechanisms)"

		    ! /usr/sbin/control dovecot-auth|grep -qs '^postfix$'
		    write_bool_param auth_port "$?"
		    ;;
		write)
		    [ -n "$in_protocols" ] || in_protocols="none"
		    write_list protocols "$in_protocols"

		    [ -n "$in_mechanisms" ] || in_mechanisms="plain"
		    write_list mechanisms "$in_mechanisms"

		    if test_bool "$in_auth_port";then
			/usr/sbin/control dovecot-auth postfix >&2
		    else
			/usr/sbin/control dovecot-auth none >&2
		    fi
		    ;;
	esac
}

message_loop
