#!/bin/sh /etc/rc.common
# Copyright (C) 2010 Openwrt.org

START=60

PID_FILE=/tmp/etc/znc/znc.pid
ZNC_CONFIG=/tmp/etc/znc/configs/znc.conf

add_param() {
	echo "$1 = $2" >> $ZNC_CONFIG
}

add_chan() {
	chan=${1% *}
	pass=${1#* }
	echo "	<Chan $chan>" >> $ZNC_CONFIG
	[ "$chan" != "$pass" ] && echo "		Key = $pass" >> $ZNC_CONFIG
	echo "	</Chan>" >> $ZNC_CONFIG
}

znc_global() {
	local znc="$1"
	local anoniplimit
	local maxbuffersize
	local connectdelay
	local serverthrottle


	config_get anoniplimit "$znc" anoniplimit
	config_get maxbuffersize "$znc" maxbuffersize
	config_get connectdelay "$znc" connectdelay
	config_get serverthrottle "$znc" serverthrottle

	[ -z $anoniplimit ] || echo "AnonIPLimit = $anoniplimit" >> $ZNC_CONFIG
	[ -z $maxbuffersize ] || echo "MaxBufferSize = $maxbuffersize" >> $ZNC_CONFIG
	[ -z $connectdelay ] || echo "ConnectDelay = $connectdelay" >> $ZNC_CONFIG
	[ -z $serverthrottle ] || echo "ServerThrottle = $anoniplimit" >> $ZNC_CONFIG

	echo "PidFile = $PID_FILE" >> $ZNC_CONFIG

	config_list_foreach "$znc" listener "add_param Listener"
	config_list_foreach "$znc" module "add_param LoadModule"

	add_param LoadModule "droproot nobody nogroup"
}

add_user() {
	local user="$1"
	local password
	local nick
	local altnick
	local ident
	local realname
	local buffer
	local quitmsg
	local chanmodes
	local vhost

	config_get password "$user" password
	config_get nick "$user" nick
	config_get altnick "$user" altnick
	config_get ident "$user" ident
	config_get realname "$user" realname
	config_get buffer "$user" buffer
	config_get quitmsg "$user" quitmsg
	config_get chanmodes "$user" chanmodes
	config_get vhost "$user" vhost

	echo "<User $user>" >> $ZNC_CONFIG

	case "$password" in
	"md5#"* | "sha256#"* | "plain#"*)
		echo "  Pass = $password" >> $ZNC_CONFIG
		;;
	*)
		echo "	Pass = plain#$password" >> $ZNC_CONFIG
		;;
	esac

	echo "	Nick = $nick" >> $ZNC_CONFIG
	echo "	AltNick = ${altnick:-$nick"_"}" >> $ZNC_CONFIG
	echo "	Ident = ${ident:-$nick}" >> $ZNC_CONFIG
	echo "	RealName = ${realname:-$nick}" >> $ZNC_CONFIG
	[ -z "$vhost" ] || echo "	VHost = $vhost" >> $ZNC_CONFIG
	echo "	Buffer = ${buffer:-50}"  >> $ZNC_CONFIG
	echo "	KeepBuffer = false" >> $ZNC_CONFIG
	echo "	ChanModes = ${chanmodes:-"+stn"}" >> $ZNC_CONFIG
	[ -z "$quitmsg" ] || echo "	QuitMsg = $quitmsg" >> $ZNC_CONFIG

	config_list_foreach "$user" server "add_param \"	Server\""
	config_list_foreach "$user" module "add_param \"	LoadModule\""
	config_list_foreach "$user" channel "add_chan"
	echo "</User>" >> $ZNC_CONFIG
}


start() {
	mkdir -p /tmp/etc/znc/configs/
	[ -f "$ZNC_CONFIG" ] && rm "$ZNC_CONFIG"
	config_load znc
	config_foreach znc_global znc
	config_foreach add_listener listener
	config_foreach add_user user

	chown -R nobody:nogroup /tmp/etc/znc
	/usr/bin/znc -d/tmp/etc/znc -r >/dev/null &
}

stop() {
	[ -f "$PID_FILE" ] && kill $(cat "$PID_FILE")
}