#!/bin/sh /etc/rc.common
# Copyright (C) 2008-2011 OpenWrt.org

START=50
USE_PROCD=1

CFGFILE=/var/etc/tinyproxy.conf
PROG=/usr/bin/tinyproxy

section_enabled() {
	local enabled
	config_get_bool enabled "$1" 'enabled' 0
	[ "$enabled" -gt 0 ]
}

write_upstream() {
	local type
	local via
	local target

	config_get "type" "$1" "type"
	config_get via "$1" via
	config_get target "$1" target
	[ -n "$target" ] && target=' "'"$target"'"'

	[ "$type" = "proxy" ] && [ -n "$via" ] && \
		echo "upstream $via$target"

	[ "$type" = "reject" ] && [ -n "$target" ] && \
		echo "no upstream$target"
}

proxy_atom() {
	local SECTION=$1
	local OPTION=$2
	local DEFAULT=$3

	config_get _value "$SECTION" "$OPTION"
	[ -z "$_value" ] && _value="$DEFAULT"
	[ -n "$_value" ] && echo "$OPTION $_value"
}

proxy_string() {
	local SECTION=$1
	local OPTION=$2
	local ALIAS=$3
	local DEFAULT=$4

	config_get _value "$SECTION" "$OPTION"
	[ -z "$_value" ] && _value="$DEFAULT"
	[ -n "$_value" ] && echo "${ALIAS:-${OPTION}} "'"'"$_value"'"'
	[ -n "$_value" ] && [ "$OPTION" = "LogFile" ] && {
		touch "$_value"
		chmod 666 "$_value"
	}
}

proxy_flag() {
	local SECTION=$1
	local OPTION=$2
	local TRUE="${3:-On}"
	local FALSE="${4:-Off}"

	config_get_bool _value "$SECTION" "$OPTION" 0
	[ "$_value" -eq "1" ] && _value="$TRUE" || _value="$FALSE"
	echo "$OPTION $_value"
}

proxy_list() {
	local SECTION=$1
	local OPTION=$2
	local ENCLOSE=$3

	config_get _value "$SECTION" "$OPTION"
	[ -n "$_value" ] && {
		for entry in $_value; do
			echo "$OPTION ${ENCLOSE}${entry}${ENCLOSE}"
		done
	}
}

start_proxy() {
	section_enabled "$1" || return 1

	mkdir -p /var/etc
	chmod 0755 /var/etc
	{
	echo '### AUTOGENERATED CONFIGURATION'
	echo '### DO NOT EDIT'
	echo '### SEE /etc/config/tinyproxy INSTEAD'
	echo ''

	proxy_atom "$1" User
	proxy_atom "$1" Group
	proxy_atom "$1" Port 8888
	proxy_atom "$1" Listen
	proxy_atom "$1" Bind
	proxy_atom "$1" Timeout

	proxy_string "$1" ErrorFile_400 "ErrorFile 400"
	proxy_string "$1" ErrorFile_403 "ErrorFile 403"
	proxy_string "$1" ErrorFile_404 "ErrorFile 404"
	proxy_string "$1" ErrorFile_408 "ErrorFile 408"
	proxy_string "$1" ErrorFile_503 "ErrorFile 503"

	proxy_string "$1" DefaultErrorFile
	proxy_string "$1" StatHost StatHost 127.0.0.1
	proxy_string "$1" StatFile
	proxy_string "$1" LogFile

	proxy_flag "$1" Syslog

	proxy_atom "$1" LogLevel

	proxy_flag "$1" XTinyproxy

	proxy_atom "$1" MaxClients
	proxy_atom "$1" MinSpareServers
	proxy_atom "$1" MaxSpareServers
	proxy_atom "$1" StartServers
	proxy_atom "$1" MaxRequestsPerChild
	proxy_list "$1" Allow

	proxy_string "$1" ViaProxyName
	proxy_string "$1" Filter

	proxy_flag "$1" FilterURLs
	proxy_flag "$1" FilterExtended
	proxy_flag "$1" FilterCaseSensitive
	proxy_flag "$1" FilterDefaultDeny Yes No

	proxy_list "$1" Anonymous '"'
	proxy_list "$1" ConnectPort

	config_foreach write_upstream upstream
	} > "$CFGFILE"

	procd_open_instance
	procd_set_param command "$PROG"
	procd_append_param command -c "$CFGFILE"
	procd_append_param command -d
	procd_close_instance
}

start_service() {
	config_load 'tinyproxy'
	config_foreach start_proxy 'tinyproxy'
}
