summaryrefslogtreecommitdiff
path: root/net/tinyproxy/files/tinyproxy.init
blob: 73f38c63d4acc1fbcb8ac4cd87f8b5e215f2bdce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/bin/sh /etc/rc.common
# Copyright (C) 2008-2011 OpenWrt.org

START=50

CFGFILE=/var/etc/tinyproxy.conf

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

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

stop() {
	service_stop /usr/sbin/tinyproxy
}

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

	mkdir -m0755 -p /var/etc
	echo '### AUTOGENERATED CONFIGURATION' > $CFGFILE
	echo '### DO NOT EDIT' >> $CFGFILE
	echo '### SEE /etc/config/tinyproxy INSTEAD' >> $CFGFILE
	echo '' >> $CFGFILE

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

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

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

	proxy_flag "$1" Syslog >> $CFGFILE

	proxy_atom "$1" LogLevel >> $CFGFILE

	proxy_list "$1" XTinyproxy >> $CFGFILE

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

	proxy_string "$1" ViaProxyName >> $CFGFILE
	proxy_string "$1" Filter >> $CFGFILE

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

	proxy_list "$1" Anonymous '"' >> $CFGFILE
	proxy_list "$1" ConnectPort >> $CFGFILE

	config_foreach write_upstream upstream

	service_start /usr/sbin/tinyproxy -c "$CFGFILE"
}

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" -a -n "$via" ] && \
		echo "upstream $via$target" >> $CFGFILE

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

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" -a "$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
	}
}