Browse Source

Merge pull request #693 from chris5560/master

[luci-app-privoxy] New LuCI App to support privoxy
lilik-openwrt-22.03
Steven Barth 10 years ago
parent
commit
4b93183f55
9 changed files with 2247 additions and 0 deletions
  1. +69
    -0
      net/privoxy-luci/Makefile
  2. +174
    -0
      net/privoxy-luci/files/luasrc/controller/privoxy.lua
  3. +58
    -0
      net/privoxy-luci/files/luasrc/model/cbi/privoxy/apperror.lua
  4. +940
    -0
      net/privoxy-luci/files/luasrc/model/cbi/privoxy/detail.lua
  5. +56
    -0
      net/privoxy-luci/files/luasrc/view/privoxy/detail_logview.htm
  6. +49
    -0
      net/privoxy-luci/files/luasrc/view/privoxy/detail_startstop.htm
  7. +12
    -0
      net/privoxy-luci/files/root/etc/uci-defaults/luci-privoxy
  8. +490
    -0
      net/privoxy-luci/po/de/privoxy.po
  9. +399
    -0
      net/privoxy-luci/po/templates/privoxy.pot

+ 69
- 0
net/privoxy-luci/Makefile View File

@ -0,0 +1,69 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-privoxy
PKG_VERSION:=1.0.0
#PKG_RELEASE:=0
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=LICENSE
PKG_BUILD_DIR:= $(BUILD_DIR)/$(PKG_NAME)
# needed inside Build/Compile
# po2lmo is compiled inside luci-base
PKG_BUILD_DEPENDS:=+luci-base
include $(INCLUDE_DIR)/package.mk
define Package/luci-app-privoxy
SECTION:=luci
CATEGORY:=LuCI
SUBMENU:=3. Applications
TITLE:=LuCI support for Privoxy WEB Proxy
DEPENDS:=+luci-lib-nixio +luci-mod-admin-full +privoxy
PKGARCH:=all
endef
define Package/luci-app-privoxy/description
LuCi web interface for Privoxy WEB Proxy
Version: $(PKG_VERSION)
endef
define Build/Prepare
# do nothing
endef
define Build/Configure
# do nothing
endef
define Build/Compile
mkdir -p $(PKG_INSTALL_DIR)/build $(PKG_INSTALL_DIR)/files $(PKG_INSTALL_DIR)/po
# copy everthing we need ot PKG_INSTALL_DIR
$(CP) ./* $(PKG_INSTALL_DIR)/
# due to package dependencies LuCI is compiled first so the needed binary exists
$(LN) $(BUILD_DIR)/luci/build/po2lmo $(PKG_INSTALL_DIR)/build/po2lmo
$(LN) $(BUILD_DIR)/luci/build/i18n-po2lua.pl $(PKG_INSTALL_DIR)/build/i18n-po2lua.pl
# generate needed .lmo files out of given .po files
cd $(PKG_INSTALL_DIR); build/i18n-po2lua.pl po files/luasrc/i18n
endef
define Package/luci-app-privoxy/install
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/files/root/etc/uci-defaults/* $(1)/etc/uci-defaults
$(INSTALL_DIR) $(1)/usr/lib/lua/luci
$(CP) $(PKG_INSTALL_DIR)/files/luasrc/* $(1)/usr/lib/lua/luci
endef
define Package/luci-app-privoxy/postinst
#!/bin/sh
[ -z "$${IPKG_INSTROOT}" ] && {
/etc/uci-defaults/luci-privoxy && rm -f /etc/uci-defaults/luci-privoxy
}
exit 0
endef
$(eval $(call BuildPackage,luci-app-privoxy))

+ 174
- 0
net/privoxy-luci/files/luasrc/controller/privoxy.lua View File

@ -0,0 +1,174 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
]]--
module("luci.controller.privoxy", package.seeall)
local NX = require "nixio"
local NXFS = require "nixio.fs"
local HTTP = require "luci.http"
local IPKG = require "luci.model.ipkg"
local UCI = require "luci.model.uci"
local SYS = require "luci.sys"
local UTIL = require "luci.util"
version_luci_app = "1.0.0" -- luci-application / openwrt Makefile compatible version
version_required = "3.0.22" -- minimum required service version
function index()
local _service = "privoxy"
local _vermin = "3.0.22"
local _verinst
local _util = require "luci.util"
local _ipkg = require "luci.model.ipkg"
local _info = _ipkg.info(_service)
for _, v in pairs(_info) do
if v.Package == _service and v.Status.installed then
_verinst = v.Version
break
end
end
local _sver = _util.split(_verinst, "[%.%-]", nil, true)
local _rver = _util.split(_vermin , "[%.%-]", nil, true)
-- check config file and version
if not nixio.fs.access("/etc/config/" .. _service )
or (tonumber(_sver[1]) or 0) < (tonumber(_rver[1]) or 0)
or (tonumber(_sver[2]) or 0) < (tonumber(_rver[2]) or 0)
or (tonumber(_sver[3]) or 0) < (tonumber(_rver[3]) or 0)
or (tonumber(_sver[4]) or 0) < (tonumber(_rver[4]) or 0) then
entry( {"admin", "services", "privoxy"}, cbi("privoxy/apperror",
{hideapplybtn=true, hidesavebtn=true, hideresetbtn=true }), _("Privoxy WEB proxy"), 59)
else
entry( {"admin", "services", "privoxy"}, cbi("privoxy/detail"), _("Privoxy WEB proxy"), 59)
entry( {"admin", "services", "privoxy", "logview"}, call("logread") ).leaf = true
entry( {"admin", "services", "privoxy", "startstop"}, call("startstop") ).leaf = true
entry( {"admin", "services", "privoxy", "status"}, call("get_pid") ).leaf = true
end
end
-- called by XHR.get from detail_logview.htm
function logread()
-- read application settings
local uci = UCI.cursor()
local logdir = uci:get("privoxy", "privoxy", "logdir") or "/var/log"
local logfile = uci:get("privoxy", "privoxy", "logfile") or "privoxy.log"
uci:unload("privoxy")
local lfile=logdir .. "/" .. logfile
local ldata=NXFS.readfile(lfile)
if not ldata or #ldata == 0 then
ldata="_nodata_"
end
HTTP.write(ldata)
end
-- called by XHR.get from detail_startstop.htm
function startstop()
local pid = get_pid(true)
if pid > 0 then
SYS.call("/etc/init.d/privoxy stop")
NX.nanosleep(1) -- sleep a second
if NX.kill(pid, 0) then -- still running
NX.kill(pid, 9) -- send SIGKILL
end
pid = 0
else
SYS.call("/etc/init.d/privoxy start")
NX.nanosleep(1) -- sleep a second
pid = tonumber(NXFS.readfile("/var/run/privoxy.pid") or 0 )
if pid > 0 and not NX.kill(pid, 0) then
pid = 0 -- process did not start
end
end
HTTP.write(tostring(pid)) -- HTTP needs string not number
end
-- called by XHR.poll from detail_startstop.htm
-- and from lua (with parameter "true")
function get_pid(from_lua)
local pid = tonumber(NXFS.readfile("/var/run/privoxy.pid") or 0 )
if pid > 0 and not NX.kill(pid, 0) then
pid = 0
end
if from_lua then
return pid
else
HTTP.write(tostring(pid)) -- HTTP needs string not number
end
end
-- get the "name" of the current active theme
function get_theme()
local _uci = UCI.cursor()
local _base = _uci:get("luci", "main", "mediaurlbase") -- only pathname
_uci:unload("luci")
for k, v in pairs(luci.config.themes) do
if k:sub(1, 1) ~= "." and v == _base then
return k
end
end
return nil
end
-- read version information for given package if installed
function ipkg_version(package)
if not package then
return nil
end
local _info = IPKG.info(package)
local _data = {}
local _version = ""
local i = 0
for k, v in pairs(_info) do
if v.Package == package and v.Status.installed then
_version = v.Version
i = i + 1
end
end
if i > 1 then -- more then one valid record
return _data
end
local _sver = UTIL.split(_version, "[%.%-]", nil, true)
_data = {
version = _version,
major = tonumber(_sver[1]) or 0,
minor = tonumber(_sver[2]) or 0,
patch = tonumber(_sver[3]) or 0,
build = tonumber(_sver[4]) or 0
}
return _data
end
-- replacement of build-in Flag.parse of cbi.lua
-- modified to mark section as changed if value changes
-- current parse did not do this, but it is done AbstaractValue.parse()
function flag_parse(self, section)
local fexists = self.map:formvalue(
luci.cbi.FEXIST_PREFIX .. self.config .. "." .. section .. "." .. self.option)
if fexists then
local fvalue = self:formvalue(section) and self.enabled or self.disabled
local cvalue = self:cfgvalue(section)
if fvalue ~= self.default or (not self.optional and not self.rmempty) then
self:write(section, fvalue)
else
self:remove(section)
end
if (fvalue ~= cvalue) then self.section.changed = true end
else
self:remove(section)
self.section.changed = true
end
end

+ 58
- 0
net/privoxy-luci/files/luasrc/model/cbi/privoxy/apperror.lua View File

@ -0,0 +1,58 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
]]--
local CTRL = require "luci.controller.privoxy" -- privoxy multiused functions
local DISP = require "luci.dispatcher"
-- Build javascript string to be displayed as version information
local VERSION = translate("Version Information")
.. [[\n\nluci-app-privoxy]]
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.version_luci_app
.. [[\n\t]] .. translate("Build") .. [[:\t]] .. CTRL.ipkg_version("luci-app-privoxy").version
.. [[\n\nprivoxy ]] .. translate("required") .. [[:]]
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.version_required .. [[ ]] .. translate("or higher")
.. [[\n\nprivoxy ]] .. translate("installed") .. [[:]]
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.ipkg_version("privoxy").version
.. [[\n\n]]
local HELP = [[<a href="http://www.privoxy.org/user-manual/config.html#%s" target="_blank">%s</a>]]
-- cbi-map -- ##################################################################
local m = Map("privoxy")
m.title = [[</a><a href="javascript:alert(']]
.. VERSION
.. [[')">]]
.. translate("Privoxy WEB proxy")
m.description = translate("Privoxy is a non-caching web proxy with advanced filtering "
.. "capabilities for enhancing privacy, modifying web page data and HTTP headers, "
.. "controlling access, and removing ads and other obnoxious Internet junk.")
-- cbi-section -- ##############################################################
local s = m:section(SimpleSection)
s.title = [[<font color="red">]] .. [[<strong>]]
.. translate("Software update required")
.. [[</strong>]] .. [[</font>]]
-- old privoxy sofware version --------------------------------------------------------------
local v = s:option(DummyValue, "_update_needed")
v.titleref = DISP.build_url("admin", "system", "packages")
v.rawhtml = true
--v.title = [[<h3>]] .. [[<font color="red">]] .. [[<strong>]]
-- .. translate("Software update required")
-- .. [[</strong>]] .. [[</font>]] .. [[</h3>]] .. [[<br />]]
v.value = [[<h3>]] .. [[<strong>]]
.. translate("The currently installed 'privoxy' package is not supported by LuCI application.")
.. [[<br />]]
.. translate("Please update to the current version!")
.. [[</strong>]] .. [[</h3>]]
return m

+ 940
- 0
net/privoxy-luci/files/luasrc/model/cbi/privoxy/detail.lua View File

@ -0,0 +1,940 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
]]--
local NXFS = require "nixio.fs"
local LUFS = require "luci.fs"
local SYS = require "luci.sys"
local UTIL = require "luci.util"
local DTYP = require "luci.cbi.datatypes"
local CTRL = require "luci.controller.privoxy" -- privoxy multiused functions
-- Bootstrap theme needs 2 or 3 additional linefeeds for tab description for better optic
local LFLF = (CTRL.get_theme() == "Bootstrap") and [[<br /><br /><br />]] or [[]]
-- Build javascript string to be displayed as version information
local VERSION = translate("Version Information")
.. [[\n\nluci-app-privoxy]]
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.version_luci_app
.. [[\n\t]] .. translate("Build") .. [[:\t]] .. CTRL.ipkg_version("luci-app-privoxy").version
.. [[\n\nprivoxy ]] .. translate("required") .. [[:]]
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.version_required .. [[ ]] .. translate("or greater")
.. [[\n\nprivoxy ]] .. translate("installed") .. [[:]]
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.ipkg_version("privoxy").version
.. [[\n\n]]
local HELP = [[<a href="http://www.privoxy.org/user-manual/config.html#%s" target="_blank">%s</a>]]
-- cbi-map -- ##################################################################
local m = Map("privoxy")
m.title = [[</a><a href="javascript:alert(']]
.. VERSION
.. [[')">]]
.. translate("Privoxy WEB proxy")
m.description = translate("Privoxy is a non-caching web proxy with advanced filtering "
.. "capabilities for enhancing privacy, modifying web page data and HTTP headers, "
.. "controlling access, and removing ads and other obnoxious Internet junk.")
.. [[<br /><strong>]]
.. translate("For help use link at the relevant option")
.. [[</strong>]]
function m.commit_handler(self)
if self.changed then -- changes ?
os.execute("/etc/init.d/privoxy reload &") -- reload configuration
end
end
-- cbi-section -- ##############################################################
local ns = m:section( NamedSection, "privoxy", "privoxy")
ns:tab("local",
translate("Local Set-up"),
translate("If you intend to operate Privoxy for more users than just yourself, "
.. "it might be a good idea to let them know how to reach you, what you block "
.. "and why you do that, your policies, etc.")
.. LFLF )
local function err_tab_local(self, msg)
return string.format(translate("Local Set-up") .. " - %s: %s", self.title_base, msg )
end
ns:tab("filter",
translate("Files and Directories"),
translate("Privoxy can (and normally does) use a number of other files "
.. "for additional configuration, help and logging. This section of "
.. "the configuration file tells Privoxy where to find those other files.")
.. LFLF )
local function err_tab_filter(self, msg)
return string.format(translate("Files and Directories") .. " - %s: %s", self.title_base, msg )
end
ns:tab("access",
translate("Access Control"),
translate("This tab controls the security-relevant aspects of Privoxy's configuration.")
.. LFLF )
local function err_tab_access(self, msg)
return string.format(translate("Access Control") .. " - %s: %s", self.title_base, msg )
end
ns:tab("forward",
translate("Forwarding"),
translate("Configure here the routing of HTTP requests through a chain of multiple proxies. "
.. "Note that parent proxies can severely decrease your privacy level. "
.. "Also specified here are SOCKS proxies.")
.. LFLF )
ns:tab("misc",
translate("Miscellaneous"),
nil)
local function err_tab_misc(self, msg)
return string.format(translate("Miscellaneous") .. " - %s: %s", self.title_base, msg )
end
ns:tab("debug",
translate("Logging"),
nil )
ns:tab("logview",
translate("Log File Viewer"),
nil )
-- tab: local -- ###############################################################
-- start/stop button -----------------------------------------------------------
local btn = ns:taboption("local", Button, "_startstop")
btn.title = translate("Start / Stop")
btn.description = translate("Start/Stop Privoxy WEB Proxy")
btn.template = "privoxy/detail_startstop"
function btn.cfgvalue(self, section)
local pid = CTRL.get_pid(true)
if pid > 0 then
btn.inputtitle = "PID: " .. pid
btn.inputstyle = "reset"
btn.disabled = false
else
btn.inputtitle = translate("Start")
btn.inputstyle = "apply"
btn.disabled = false
end
return true
end
-- enabled ---------------------------------------------------------------------
local ena = ns:taboption("local", Flag, "_enabled")
ena.title = translate("Enabled")
ena.description = translate("Enable/Disable autostart of Privoxy on system startup and interface events")
ena.orientation = "horizontal" -- put description under the checkbox
ena.rmempty = false
function ena.cfgvalue(self, section)
return (SYS.init.enabled("privoxy")) and "1" or "0"
end
function ena.validate(self, value)
error("Validate " .. value)
end
function ena.write(self, section, value)
--error("Write " .. value)
if value == "1" then
return SYS.init.enable("privoxy")
else
return SYS.init.disable("privoxy")
end
end
-- hostname --------------------------------------------------------------------
local hn = ns:taboption("local", Value, "hostname")
hn.title = string.format(HELP, "HOSTNAME", "Hostname" )
hn.description = translate("The hostname shown on the CGI pages.")
hn.placeholder = SYS.hostname()
hn.optional = true
hn.rmempty = true
-- user-manual -----------------------------------------------------------------
local um = ns:taboption("local", Value, "user_manual")
um.title = string.format(HELP, "USER-MANUAL", "User Manual" )
um.description = translate("Location of the Privoxy User Manual.")
um.placeholder = "http://www.privoxy.org/user-manual/"
um.optional = true
um.rmempty = true
-- admin-address ---------------------------------------------------------------
local aa = ns:taboption("local", Value, "admin_address")
aa.title_base = "Admin Email"
aa.title = string.format(HELP, "ADMIN-ADDRESS", aa.title_base )
aa.description = translate("An email address to reach the Privoxy administrator.")
aa.placeholder = "privoxy.admin@example.com"
aa.optional = true
aa.rmempty = true
function aa.validate(self, value)
if not value or #value == 0 then
return ""
end
if not (value:match("[A-Za-z0-9%.%%%+%-]+@[A-Za-z0-9%.%%%+%-]+%.%w%w%w?%w?")) then
return nil, err_tab_local(self, translate("Invalid email address") )
end
return value
end
-- proxy-info-url --------------------------------------------------------------
local piu = ns:taboption("local", Value, "proxy_info_url")
piu.title = string.format(HELP, "PROXY-INFO-URL", "Proxy Info URL" )
piu.description = translate("A URL to documentation about the local Privoxy setup, configuration or policies.")
piu.optional = true
piu.rmempty = true
-- trust-info-url --------------------------------------------------------------
local tiu = ns:taboption("local", DynamicList, "trust_info_url")
tiu.title = string.format(HELP, "TRUST-INFO-URL", "Trust Info URLs" )
tiu.description = translate("A URL to be displayed in the error page that users will see if access to an untrusted page is denied.")
.. [[<br /><strong>]]
.. translate("The value of this option only matters if the experimental trust mechanism has been activated.")
.. [[</strong>]]
tiu.optional = true
tiu.rmepty = true
-- tab: filter -- ##############################################################
-- logdir ----------------------------------------------------------------------
local ld = ns:taboption("filter", Value, "logdir")
ld.title_base = "Log Directory"
ld.title = string.format(HELP, "LOGDIR", ld.title_base )
ld.description = translate("The directory where all logging takes place (i.e. where the logfile is located).")
.. [[<br />]]
.. translate("No trailing '/', please.")
ld.default = "/var/log"
ld.rmempty = false
function ld.validate(self, value)
if not value or #value == 0 then
return nil, err_tab_filter(self, translate("Mandatory Input: No Directory given!") )
elseif not LUFS.isdirectory(value) then
return nil, err_tab_filter(self, translate("Directory does not exist!") )
else
return value
end
end
-- logfile ---------------------------------------------------------------------
local lf = ns:taboption("filter", Value, "logfile")
lf.title_base = "Log File"
lf.title = string.format(HELP, "LOGFILE", lf.title_base )
lf.description = translate("The log file to use. File name, relative to log directory.")
lf.default = "privoxy.log"
lf.rmempty = false
function lf.validate(self, value)
if not value or #value == 0 then
return nil, err_tab_filter(self, translate("Mandatory Input: No File given!") )
else
return value
end
end
-- confdir ---------------------------------------------------------------------
local cd = ns:taboption("filter", Value, "confdir")
cd.title = string.format(HELP, "CONFDIR", "Configuration Directory" )
cd.description = translate("The directory where the other configuration files are located.")
.. [[<br />]]
.. translate("No trailing '/', please.")
cd.default = "/etc/privoxy"
cd.rmempty = false
function cd.validate(self, value)
if not value or #value == 0 then
return nil, err_tab_filter(self, translate("Mandatory Input: No Directory given!") )
elseif not LUFS.isdirectory(value) then
return nil, err_tab_filter(self, translate("Directory does not exist!") )
else
return value
end
end
-- templdir --------------------------------------------------------------------
local td = ns:taboption("filter", Value, "templdir")
td.title_base = "Template Directory"
td.title = string.format(HELP, "TEMPLDIR", td.title_base )
td.description = translate("An alternative directory where the templates are loaded from.")
.. [[<br />]]
.. translate("No trailing '/', please.")
td.placeholder = "/etc/privoxy/templates"
td.rmempty = true
function td.validate(self, value)
if not LUFS.isdirectory(value) then
return nil, err_tab_filter(self, translate("Directory does not exist!") )
else
return value
end
end
-- actionsfile -----------------------------------------------------------------
local af = ns:taboption("filter", DynamicList, "actionsfile")
af.title_base = "Action Files"
af.title = string.format(HELP, "ACTIONSFILE", af.title_base)
af.description = translate("The actions file(s) to use. Multiple actionsfile lines are permitted, and are in fact recommended!")
.. [[<br /><strong>match-all.action := </strong>]]
.. translate("Actions that are applied to all sites and maybe overruled later on.")
.. [[<br /><strong>default.action := </strong>]]
.. translate("Main actions file")
.. [[<br /><strong>user.action := </strong>]]
.. translate("User customizations")
af.rmempty = false
function af.validate(self, value)
if not value or #value == 0 then
return nil, err_tab_access(self, translate("Mandatory Input: No files given!") )
end
local confdir = cd:formvalue(ns.section)
local err = false
local file = ""
if type(value) == "table" then
local x
for _, x in ipairs(value) do
if x and #x > 0 then
if not LUFS.isfile(confdir .."/".. x) then
err = true
file = x
break -- break/leave for on error
end
end
end
else
if not LUFS.isfile(confdir .."/".. value) then
err = true
file = value
end
end
if err then
return nil, string.format(err_tab_filter(self, translate("File '%s' not found inside Configuration Directory") ), file)
end
return value
end
-- filterfile ------------------------------------------------------------------
local ff = ns:taboption("filter", DynamicList, "filterfile")
ff.title_base = "Filter files"
ff.title = string.format(HELP, "FILTERFILE", ff.title_base )
ff.description = translate("The filter files contain content modification rules that use regular expressions.")
ff.rmempty = false
function ff.validate(self, value)
if not value or #value == 0 then
return nil, err_tab_access(self, translate("Mandatory Input: No files given!") )
end
local confdir = cd:formvalue(ns.section)
local err = false
local file = ""
if type(value) == "table" then
local x
for _, x in ipairs(value) do
if x and #x > 0 then
if not LUFS.isfile(confdir .."/".. x) then
err = true
file = x
break -- break/leave for on error
end
end
end
else
if not LUFS.isfile(confdir .."/".. value) then
err = true
file = value
end
end
if err then
return nil, string.format(err_tab_filter(self, translate("File '%s' not found inside Configuration Directory") ), file )
end
return value
end
-- trustfile -------------------------------------------------------------------
local tf = ns:taboption("filter", Value, "trustfile")
tf.title_base = "Trust file"
tf.title = string.format(HELP, "TRUSTFILE", tf.title_base )
tf.description = translate("The trust mechanism is an experimental feature for building white-lists "
.."and should be used with care.")
.. [[<br /><strong>]]
.. translate("It is NOT recommended for the casual user.")
.. [[</strong>]]
tf.placeholder = "sites.trust"
tf.rmempty = true
function tf.validate(self, value)
local confdir = cd:formvalue(ns.section)
local err = false
local file = ""
if type(value) == "table" then
local x
for _, x in ipairs(value) do
if x and #x > 0 then
if not LUFS.isfile(confdir .."/".. x) then
err = true
file = x
break -- break/leave for on error
end
end
end
else
if not LUFS.isfile(confdir .."/".. value) then
err = true
file = value
end
end
if err then
return nil, string.format(err_tab_filter(self, translate("File '%s' not found inside Configuration Directory") ), file )
end
return value
end
-- tab: access -- ##############################################################
-- listen-address --------------------------------------------------------------
local la = ns:taboption("access", DynamicList, "listen_address")
la.title_base = "Listen addresses"
la.title = string.format(HELP, "LISTEN-ADDRESS", la.title_base )
la.description = translate("The address and TCP port on which Privoxy will listen for client requests.")
.. [[<br />]]
.. translate("Syntax: ")
.. "IPv4:Port / [IPv6]:Port / Host:Port"
la.default = "127.0.0.1:8118"
la.rmempty = false
function la.validate(self, value)
if not value or #value == 0 then
return nil, err_tab_access(self, translate("Mandatory Input: No Data given!") )
end
local function check_value(v)
local _ret = UTIL.split(v, "]:")
local _ip
if _ret[2] then -- ip6 with port
_ip = string.gsub(_ret[1], "%[", "") -- remove "[" at beginning
if not DTYP.ip6addr(_ip) then
return translate("Mandatory Input: No valid IPv6 address given!")
elseif not DTYP.port(_ret[2]) then
return translate("Mandatory Input: No valid Port given!")
else
return nil
end
end
_ret = UTIL.split(v, ":")
if not _ret[2] then
return translate("Mandatory Input: No Port given!")
end
if #_ret[1] > 0 and not DTYP.host(_ret[1]) then -- :8118 is valid address
return translate("Mandatory Input: No valid IPv4 address or host given!")
elseif not DTYP.port(_ret[2]) then
return translate("Mandatory Input: No valid Port given!")
else
return nil
end
end
local err = ""
local entry = ""
if type(value) == "table" then
local x
for _, x in ipairs(value) do
if x and #x > 0 then
err = check_value(x)
if err then
entry = x
break
end
end
end
else
err = check_value(value)
entry = value
end
if err then
return nil, string.format(err_tab_access(self, err .. " - %s"), entry )
end
return value
end
-- permit-access ---------------------------------------------------------------
local pa = ns:taboption("access", DynamicList, "permit_access")
pa.title = string.format(HELP, "ACLS", "Permit access" )
pa.description = translate("Who can access what.")
.. [[<br /><strong>]]
.. translate("Please read Privoxy manual for details!")
.. [[</strong>]]
pa.rmempty = true
-- deny-access -----------------------------------------------------------------
local da = ns:taboption("access", DynamicList, "deny_access")
da.title = string.format(HELP, "ACLS", "Deny Access" )
da.description = translate("Who can access what.")
.. [[<br /><strong>]]
.. translate("Please read Privoxy manual for details!")
.. [[</strong>]]
da.rmempty = true
-- buffer-limit ----------------------------------------------------------------
local bl = ns:taboption("access", Value, "buffer_limit")
bl.title_base = "Buffer Limit"
bl.title = string.format(HELP, "BUFFER-LIMIT", bl.title_base )
bl.description = translate("Maximum size (in KB) of the buffer for content filtering.")
.. [[<br />]]
.. translate("Value range 1 to 4096, no entry defaults to 4096")
bl.default = 4096
bl.rmempty = true
function bl.validate(self, value)
local v = tonumber(value)
if not v then
return nil, err_tab_access(self, translate("Value is not a number") )
elseif v < 1 or v > 4096 then
return nil, err_tab_access(self, translate("Value not between 1 and 4096") )
elseif v == self.default then
return "" -- dont need to save default
end
return value
end
-- toggle ----------------------------------------------------------------------
local tgl = ns:taboption("access", Flag, "toggle")
tgl.title = string.format(HELP, "TOGGLE", "Toggle Status" )
tgl.description = translate("Enable/Disable filtering when Privoxy starts.")
.. [[<br />]]
.. translate("Disabled == Transparent Proxy Mode")
tgl.orientation = "horizontal"
tgl.default = "1"
tgl.rmempty = false
function tgl.parse(self, section)
CTRL.flag_parse(self, section)
end
-- enable-remote-toggle --------------------------------------------------------
local ert = ns:taboption("access", Flag, "enable_remote_toggle")
ert.title = string.format(HELP, "ENABLE-REMOTE-TOGGLE", "Enable remote toggle" )
ert.description = translate("Whether or not the web-based toggle feature may be used.")
ert.orientation = "horizontal"
ert.rmempty = true
function ert.parse(self, section)
CTRL.flag_parse(self, section)
end
-- enable-remote-http-toggle ---------------------------------------------------
local eht = ns:taboption("access", Flag, "enable_remote_http_toggle")
eht.title = string.format(HELP, "ENABLE-REMOTE-HTTP-TOGGLE", "Enable remote toggle via HTTP" )
eht.description = translate("Whether or not Privoxy recognizes special HTTP headers to change its behaviour.")
.. [[<br /><strong>]]
.. translate("This option will be removed in future releases as it has been obsoleted by the more general header taggers.")
.. [[</strong>]]
eht.orientation = "horizontal"
eht.rmempty = true
function eht.parse(self, section)
CTRL.flag_parse(self, section)
end
-- enable-edit-actions ---------------------------------------------------------
local eea = ns:taboption("access", Flag, "enable_edit_actions")
eea.title = string.format(HELP, "ENABLE-EDIT-ACTIONS", "Enable action file editor" )
eea.description = translate("Whether or not the web-based actions file editor may be used.")
eea.orientation = "horizontal"
eea.rmempty = true
function eea.parse(self, section)
CTRL.flag_parse(self, section)
end
-- enforce-blocks --------------------------------------------------------------
local eb = ns:taboption("access", Flag, "enforce_blocks")
eb.title = string.format(HELP, "ENFORCE-BLOCKS", "Enforce page blocking" )
eb.description = translate("If enabled, Privoxy hides the 'go there anyway' link. "
.. "The user obviously should not be able to bypass any blocks.")
eb.orientation = "horizontal"
eb.rmempty = true
function eb.parse(self, section)
CTRL.flag_parse(self, section)
end
-- tab: forward -- #############################################################
-- enable-proxy-authentication-forwarding --------------------------------------
local paf = ns:taboption("forward", Flag, "enable_proxy_authentication_forwarding")
paf.title = string.format(HELP, "ENABLE-PROXY-AUTHENTICATION-FORWARDING",
translate("Enable proxy authentication forwarding") )
paf.description = translate("Whether or not proxy authentication through Privoxy should work.")
.. [[<br /><strong>]]
.. translate("Enabling this option is NOT recommended if there is no parent proxy that requires authentication!")
.. [[</strong>]]
--paf.orientation = "horizontal"
paf.rmempty = true
function paf.parse(self, section)
CTRL.flag_parse(self, section)
end
-- forward ---------------------------------------------------------------------
local fwd = ns:taboption("forward", DynamicList, "forward")
fwd.title = string.format(HELP, "FORWARD", "Forward HTTP" )
fwd.description = translate("To which parent HTTP proxy specific requests should be routed.")
.. [[<br />]]
.. translate("Syntax: target_pattern http_parent[:port]")
fwd.rmempty = true
-- forward-socks4 --------------------------------------------------------------
local fs4 = ns:taboption("forward", DynamicList, "forward_socks4")
fs4.title = string.format(HELP, "SOCKS", "Forward SOCKS 4" )
fs4.description = translate("Through which SOCKS proxy (and optionally to which parent HTTP proxy) specific requests should be routed.")
.. [[<br />]]
.. translate("Syntax: target_pattern socks_proxy[:port] http_parent[:port]")
fs4.rmempty = true
-- forward-socks4a -------------------------------------------------------------
local f4a = ns:taboption("forward", DynamicList, "forward_socks4a")
f4a.title = string.format(HELP, "SOCKS", "Forward SOCKS 4A" )
f4a.description = fs4.description
f4a.rmempty = true
-- forward-socks5 --------------------------------------------------------------
local fs5 = ns:taboption("forward", DynamicList, "forward_socks5")
fs5.title = string.format(HELP, "SOCKS", "Forward SOCKS 5" )
fs5.description = fs4.description
fs5.rmempty = true
-- forward-socks5t -------------------------------------------------------------
local f5t = ns:taboption("forward", DynamicList, "forward_socks5t")
f5t.title = string.format(HELP, "SOCKS", "Forward SOCKS 5t" )
f5t.description = fs4.description
f5t.rmempty = true
-- tab: misc -- ################################################################
-- accept-intercepted-requests -------------------------------------------------
local air = ns:taboption("misc", Flag, "accept_intercepted_requests")
air.title = string.format(HELP, "ACCEPT-INTERCEPTED-REQUESTS", "Accept intercepted requests" )
air.description = translate("Whether intercepted requests should be treated as valid.")
air.orientation = "horizontal"
air.rmempty = true
function air.parse(self, section)
CTRL.flag_parse(self, section)
end
-- allow-cgi-request-crunching -------------------------------------------------
local crc = ns:taboption("misc", Flag, "allow_cgi_request_crunching")
crc.title = string.format(HELP, "ALLOW-CGI-REQUEST-CRUNCHING", "Allow CGI request crunching" )
crc.description = translate("Whether requests to Privoxy's CGI pages can be blocked or redirected.")
crc.orientation = "horizontal"
crc.rmempty = true
function crc.parse(self, section)
CTRL.flag_parse(self, section)
end
-- split-large-forms -----------------------------------------------------------
local slf = ns:taboption("misc", Flag, "split_large_forms")
slf.title = string.format(HELP, "SPLIT-LARGE-FORMS", "Split large forms" )
slf.description = translate("Whether the CGI interface should stay compatible with broken HTTP clients.")
slf.orientation = "horizontal"
slf.rmempty = true
function slf.parse(self, section)
CTRL.flag_parse(self, section)
end
-- keep-alive-timeout ----------------------------------------------------------
local kat = ns:taboption("misc", Value, "keep_alive_timeout")
kat.title_base = "Keep-alive timeout"
kat.title = string.format(HELP, "KEEP-ALIVE-TIMEOUT", kat.title_base)
kat.description = translate("Number of seconds after which an open connection will no longer be reused.")
kat.rmempty = true
function kat.validate(self, value)
local v = tonumber(value)
if not v then
return nil, err_tab_misc(self, translate("Value is not a number") )
elseif v < 1 then
return nil, err_tab_misc(self, translate("Value not greater 0 or empty") )
end
return value
end
-- tolerate-pipelining ---------------------------------------------------------
local tp = ns:taboption("misc", Flag, "tolerate_pipelining")
tp.title = string.format(HELP, "TOLERATE-PIPELINING", "Tolerate pipelining" )
tp.description = translate("Whether or not pipelined requests should be served.")
tp.orientation = "horizontal"
tp.rmempty = true
function tp.parse(self, section)
CTRL.flag_parse(self, section)
end
-- default-server-timeout ------------------------------------------------------
local dst = ns:taboption("misc", Value, "default_server_timeout")
dst.title_base = "Default server timeout"
dst.title = string.format(HELP, "DEFAULT-SERVER-TIMEOUT", dst.title_base)
dst.description = translate("Assumed server-side keep-alive timeout (in seconds) if not specified by the server.")
dst.rmempty = true
function dst.validate(self, value)
local v = tonumber(value)
if not v then
return nil, err_tab_misc(self, translate("Value is not a number") )
elseif v < 1 then
return nil, err_tab_misc(self, translate("Value not greater 0 or empty") )
end
return value
end
-- connection-sharing ----------------------------------------------------------
local cs = ns:taboption("misc", Flag, "connection_sharing")
cs.title = string.format(HELP, "CONNECTION-SHARING", "Connection sharing" )
cs.description = translate("Whether or not outgoing connections that have been kept alive should be shared between different incoming connections.")
cs.orientation = "horizontal"
cs.rmempty = true
function cs.parse(self, section)
CTRL.flag_parse(self, section)
end
-- socket-timeout --------------------------------------------------------------
local st = ns:taboption("misc", Value, "socket_timeout")
st.title_base = "Socket timeout"
st.title = string.format(HELP, "SOCKET-TIMEOUT", st.title_base )
st.description = translate("Number of seconds after which a socket times out if no data is received.")
st.default = 300
st.rmempty = true
function st.validate(self, value)
local v = tonumber(value)
if not v then
return nil, err_tab_misc(self, translate("Value is not a number") )
elseif v < 1 then
return nil, err_tab_misc(self, translate("Value not greater 0 or empty") )
elseif v == self.default then
return "" -- dont need to save default
end
return value
end
-- max-client-connections ------------------------------------------------------
local mcc = ns:taboption("misc", Value, "max_client_connections")
mcc.title_base = "Max. client connections"
mcc.title = string.format(HELP, "MAX-CLIENT-CONNECTIONS", mcc.title_base )
mcc.description = translate("Maximum number of client connections that will be served.")
mcc.default = 128
mcc.rmempty = true
function mcc.validate(self, value)
local v = tonumber(value)
if not v then
return nil, err_tab_misc(self, translate("Value is not a number") )
elseif v < 1 then
return nil, err_tab_misc(self, translate("Value not greater 0 or empty") )
elseif v == self.default then
return "" -- dont need to save default
end
return value
end
-- handle-as-empty-doc-returns-ok ----------------------------------------------
local her = ns:taboption("misc", Flag, "handle_as_empty_doc_returns_ok")
her.title = string.format(HELP, "HANDLE-AS-EMPTY-DOC-RETURNS-OK", "Handle as empty doc returns ok" )
her.description = translate("The status code Privoxy returns for pages blocked with +handle-as-empty-document.")
her.orientation = "horizontal"
her.rmempty = true
function her.parse(self, section)
CTRL.flag_parse(self, section)
end
-- enable-compression ----------------------------------------------------------
local ec = ns:taboption("misc", Flag, "enable_compression")
ec.title = string.format(HELP, "ENABLE-COMPRESSION", "Enable compression" )
ec.description = translate("Whether or not buffered content is compressed before delivery.")
ec.orientation = "horizontal"
ec.rmempty = true
function ec.parse(self, section)
CTRL.flag_parse(self, section)
end
-- compression-level -----------------------------------------------------------
local cl = ns:taboption("misc", Value, "compression_level")
cl.title_base = "Compression level"
cl.title = string.format(HELP, "COMPRESSION-LEVEL", cl.title_base )
cl.description = translate("The compression level that is passed to the zlib library when compressing buffered content.")
cl.default = 1
cl.rmempty = true
function cl.validate(self, value)
local v = tonumber(value)
if not v then
return nil, err_tab_misc(self, translate("Value is not a number") )
elseif v < 0 or v > 9 then
return nil, err_tab_misc(self, translate("Value not between 0 and 9") )
elseif v == self.default then
return "" -- don't need to save default
end
return value
end
-- client-header-order ---------------------------------------------------------
local cho = ns:taboption("misc", Value, "client_header_order")
cho.title = string.format(HELP, "CLIENT-HEADER-ORDER", "Client header order" )
cho.description = translate("The order in which client headers are sorted before forwarding them.")
.. [[<br />]]
.. translate("Syntax: Client header names delimited by spaces.")
cho.rmempty = true
-- "debug"-tab definition -- ###################################################
-- single-threaded -------------------------------------------------------------
local st = ns:taboption("debug", Flag, "single_threaded")
st.title = string.format(HELP, "SINGLE-THREADED", "Single Threaded" )
st.description = translate("Whether to run only one server thread.")
.. [[<br /><strong>]]
.. translate("This option is only there for debugging purposes. It will drastically reduce performance.")
.. [[</strong>]]
st.rmempty = true
function st.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d1 = ns:taboption("debug", Flag, "debug_1")
d1.title = string.format(HELP, "DEBUG", "Debug 1" )
d1.description = translate("Log the destination for each request Privoxy let through. See also 'Debug 1024'.")
d1.rmempty = true
function d1.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d2 = ns:taboption("debug", Flag, "debug_2")
d2.title = string.format(HELP, "DEBUG", "Debug 2" )
d2.description = translate("Show each connection status")
d2.rmempty = true
function d2.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d3 = ns:taboption("debug", Flag, "debug_4")
d3.title = string.format(HELP, "DEBUG", "Debug 4" )
d3.description = translate("Show I/O status")
d3.rmempty = true
function d3.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d4 = ns:taboption("debug", Flag, "debug_8")
d4.title = string.format(HELP, "DEBUG", "Debug 8" )
d4.description = translate("Show header parsing")
d4.rmempty = true
function d4.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d5 = ns:taboption("debug", Flag, "debug_16")
d5.title = string.format(HELP, "DEBUG", "Debug 16" )
d5.description = translate("Log all data written to the network")
d5.rmempty = true
function d5.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d6 = ns:taboption("debug", Flag, "debug_32")
d6.title = string.format(HELP, "DEBUG", "Debug 32" )
d6.description = translate("Debug force feature")
d6.rmempty = true
function d6.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d7 = ns:taboption("debug", Flag, "debug_64")
d7.title = string.format(HELP, "DEBUG", "Debug 64" )
d7.description = translate("Debug regular expression filters")
d7.rmempty = true
function d7.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d8 = ns:taboption("debug", Flag, "debug_128")
d8.title = string.format(HELP, "DEBUG", "Debug 128" )
d8.description = translate("Debug redirects")
d8.rmempty = true
function d8.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d9 = ns:taboption("debug", Flag, "debug_256")
d9.title = string.format(HELP, "DEBUG", "Debug 256" )
d9.description = translate("Debug GIF de-animation")
d9.rmempty = true
function d9.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d10 = ns:taboption("debug", Flag, "debug_512")
d10.title = string.format(HELP, "DEBUG", "Debug 512" )
d10.description = translate("Common Log Format")
d10.rmempty = true
function d10.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d11 = ns:taboption("debug", Flag, "debug_1024")
d11.title = string.format(HELP, "DEBUG", "Debug 1024" )
d11.description = translate("Log the destination for requests Privoxy didn't let through, and the reason why.")
d11.rmempty = true
function d11.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d12 = ns:taboption("debug", Flag, "debug_2048")
d12.title = string.format(HELP, "DEBUG", "Debug 2048" )
d12.description = translate("CGI user interface")
d12.rmempty = true
function d12.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d13 = ns:taboption("debug", Flag, "debug_4096")
d13.title = string.format(HELP, "DEBUG", "Debug 4096" )
d13.description = translate("Startup banner and warnings.")
d13.rmempty = true
function d13.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d14 = ns:taboption("debug", Flag, "debug_8192")
d14.title = string.format(HELP, "DEBUG", "Debug 8192" )
d14.description = translate("Non-fatal errors - *we highly recommended enabling this*")
d14.rmempty = true
function d14.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d15 = ns:taboption("debug", Flag, "debug_32768")
d15.title = string.format(HELP, "DEBUG", "Debug 32768" )
d15.description = translate("Log all data read from the network")
d15.rmempty = true
function d15.parse(self, section)
CTRL.flag_parse(self, section)
end
-- debug -----------------------------------------------------------------------
local d16 = ns:taboption("debug", Flag, "debug_65536")
d16.title = string.format(HELP, "DEBUG", "Debug 65536" )
d16.description = translate("Log the applying actions")
d16.rmempty = true
function d16.parse(self, section)
CTRL.flag_parse(self, section)
end
-- tab: logview -- #############################################################
local lv = ns:taboption("logview", DummyValue, "_logview")
lv.template = "privoxy/detail_logview"
lv.inputtitle = translate("Read / Reread log file")
lv.rows = 50
function lv.cfgvalue(self, section)
local lfile=self.map:get(ns.section, "logdir") .. "/" .. self.map:get(ns.section, "logfile")
if NXFS.access(lfile) then
return lfile .. "\n" .. translate("Please press [Read] button")
end
return lfile .. "\n" .. translate("File not found or empty")
end
return m

+ 56
- 0
net/privoxy-luci/files/luasrc/view/privoxy/detail_logview.htm View File

@ -0,0 +1,56 @@
<!-- ++ BEGIN ++ Privoxy ++ detail_logview.htm ++ -->
<script type="text/javascript">//<![CDATA[
function onclick_logview(section, bottom) {
// get elements
var txt = document.getElementById("cbid.privoxy.privoxy._logview.txt"); // TextArea
if ( !txt ) { return; } // security check
var lvXHR = new XHR();
lvXHR.get('<%=luci.dispatcher.build_url("admin", "services", "privoxy", "logview")%>', null,
function(x) {
if (x.responseText == "_nodata_")
txt.value = "<%:File not found or empty%>";
else
txt.value = x.responseText;
if (bottom)
txt.scrollTop = txt.scrollHeight;
else
txt.scrollTop = 0; }
);
}
//]]></script>
<%+cbi/valueheader%>
<br />
<%
-- one button on top, one at the buttom
%>
<input class="cbi-button cbi-input-button" style="align: center; width: 100%" type="button" onclick="onclick_logview(this.name, false)"
<%=
attr("name", section) .. attr("id", cbid .. ".btn1") .. attr("value", self.inputtitle)
%> />
<br /><br />
<%
-- set a readable style taken from openwrt theme for textarea#syslog
-- in openwrt theme there are problems with a width of 100 so we check for theme and set to lower value
%>
<textarea style="width: <%if media == "/luci-static/openwrt.org" then%>98.7%<%else%>100%<%end%> ; min-height: 500px; border: 3px solid #cccccc; padding: 5px; font-family: monospace; resize: none;" wrap="off" readonly="readonly"
<%=
attr("name", cbid .. ".txt") .. attr("id", cbid .. ".txt") .. ifattr(self.rows, "rows")
%> >
<%-=pcdata(self:cfgvalue(section))-%>
</textarea>
<br /><br />
<%
-- one button on top, one at the buttom
%>
<input class="cbi-button cbi-input-button" style="align: center; width: 100%" type="button" onclick="onclick_logview(this.name, true)"
<%= attr("name", section) .. attr("id", cbid .. ".btn2") .. attr("value", self.inputtitle) %> />
<%+cbi/valuefooter%>
<!-- ++ END ++ Privoxy ++ detail_logview.htm ++ -->

+ 49
- 0
net/privoxy-luci/files/luasrc/view/privoxy/detail_startstop.htm View File

@ -0,0 +1,49 @@
<!-- ++ BEGIN ++ Privoxy ++ detail_startstop.htm ++ -->
<script type="text/javascript">//<![CDATA[
// show XHR.poll/XHR.get response on button
function _data2elements(x) {
var btn = document.getElementById("cbid.privoxy.privoxy._startstop");
if ( ! btn ) { return; } // security check
if (x.responseText == "0") {
btn.value = "<%:Start%>";
btn.className = "cbi-button cbi-button-apply";
btn.disabled = false;
} else {
btn.value = "PID: " + x.responseText;
btn.className = "cbi-button cbi-button-reset";
btn.disabled = false;
}
}
// event handler for start/stop button
function onclick_startstop(id) {
// do start/stop
var btnXHR = new XHR();
btnXHR.get('<%=luci.dispatcher.build_url("admin", "services", "privoxy", "startstop")%>', null,
function(x) { _data2elements(x); }
);
}
XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "privoxy", "status")%>', null,
function(x, data) { _data2elements(x); }
);
//]]></script>
<%+cbi/valueheader%>
<% if self:cfgvalue(section) ~= false then
-- We need to garantie that function cfgvalue run first to set missing parameters
%>
<!-- style="font-size: 100%;" needed for openwrt theme to fix font size -->
<!-- type="button" onclick="..." enable standard onclick functionalty -->
<input class="cbi-button cbi-input-<%=self.inputstyle or "button" %>" style="font-size: 100%;" type="button" onclick="onclick_startstop(this.id)"
<%=
attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle) .. ifattr(self.disabled, "disabled")
%> />
<% end %>
<%+cbi/valuefooter%>
<!-- ++ END ++ Privoxy ++ detail_startstop.htm ++ -->

+ 12
- 0
net/privoxy-luci/files/root/etc/uci-defaults/luci-privoxy View File

@ -0,0 +1,12 @@
#!/bin/sh
# no longer needed for "Save and Apply" to restart privoxy
# luci-app-privoxy calls /etc/init.d/preivoxy reload
uci -q batch <<-EOF >/dev/null
delete ucitrack.@privoxy[-1]
commit ucitrack
EOF
rm -f /tmp/luci-indexcache
exit 0

+ 490
- 0
net/privoxy-luci/po/de/privoxy.po View File

@ -0,0 +1,490 @@
msgid ""
msgstr ""
"Project-Id-Version: luci-app-privoxy\n"
"POT-Creation-Date: 2014-12-13 22:34:49\n"
"PO-Revision-Date: 2014-12-20 14:57+0100\n"
"Last-Translator: Christian Schoenebeck <christian.schoenebeck@gmail.com>\n"
"Language-Team: Christian Schoenebeck <christian.schoenebeck@gmail.com>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"
msgid ""
"A URL to be displayed in the error page that users will see if access to an "
"untrusted page is denied."
msgstr ""
"Ein Link auf der Fehlerseite, der Benutzern angezeigt wird, wenn der Zugang "
"zu einer nicht vertrauenswürdigen Seite verweigert wird."
msgid ""
"A URL to documentation about the local Privoxy setup, configuration or "
"policies."
msgstr ""
"Ein Link zur Dokumentation über die lokale Privoxy Konfiguration und die "
"Sicherheitseinstellungen."
msgid "Access Control"
msgstr "Zugriffskontrolle"
msgid "Actions that are applied to all sites and maybe overruled later on."
msgstr ""
"Aktionen, die für alle Websites angewendet werden, und vielleicht später "
"überschrieben werden."
msgid "An alternative directory where the templates are loaded from."
msgstr "Eine alternatives Verzeichnis, aus dem die Vorlagen geladen werden."
msgid "An email address to reach the Privoxy administrator."
msgstr "Eine E-Mail-Adresse, um die Privoxy-Administrator zu erreichen."
msgid ""
"Assumed server-side keep-alive timeout (in seconds) if not specified by the "
"server."
msgstr ""
"Angenommenes serverseitiges Keep-Alive-Timeout (in Sekunden), falls nicht "
"vom Server festgelegt."
msgid "Build"
msgstr "Build"
msgid "CGI user interface"
msgstr "Protokolliert die CGI Benutzer Schnittstelle"
msgid "Common Log Format"
msgstr "Gemeinsames Protokollformat"
msgid ""
"Configure here the routing of HTTP requests through a chain of multiple "
"proxies. Note that parent proxies can severely decrease your privacy level. "
"Also specified here are SOCKS proxies."
msgstr ""
"Konfigurieren Sie hier das Weiterleiten von HTTP-Anforderungen durch eine "
"Kette von mehreren Proxies. Beachten Sie, dass übergeordnete Proxies Ihre "
"Privatsphäre stark verringern können. Auch hier angegeben werden SOCKS-"
"Proxies."
msgid "Debug GIF de-animation"
msgstr "Protokolliert die GIF de-animation"
msgid "Debug force feature"
msgstr "Protokolliert die 'Force' Eigenschaft"
msgid "Debug redirects"
msgstr "Protokolliert Weiterleitungen"
msgid "Debug regular expression filters"
msgstr "Protokolliert Filter für reguläre Ausdrücke"
msgid "Directory does not exist!"
msgstr "Verzeichnis existiert nicht!"
msgid "Disabled == Transparent Proxy Mode"
msgstr "Deaktiviert == Transparent Proxy Betrieb"
msgid "Enable proxy authentication forwarding"
msgstr "Aktivieren die Weiterleitung von Proxy-Authentifizierungen"
msgid ""
"Enable/Disable autostart of Privoxy on system startup and interface events"
msgstr ""
"Aktivieren / Deaktivieren des Autostart von Privoxy beim Systemstart und "
"Schnittstellenereignissen."
msgid "Enable/Disable filtering when Privoxy starts."
msgstr "Aktivieren / Deaktivieren der Filterung, wenn Privoxy startet."
msgid ""
"Enabling this option is NOT recommended if there is no parent proxy that "
"requires authentication!"
msgstr ""
"Die Aktivierung dieser Option wird NICHT empfohlen, wenn es keinen "
"übergeordneten Proxy gibt, der eine Authentifizierung erfordert!"
msgid "File '%s' not found inside Configuration Directory"
msgstr "Datei '%s' nicht im Konfigurationsverzeichnis gefunden!"
msgid "File not found or empty"
msgstr "Datei nicht gefunden oder leer"
msgid "Files and Directories"
msgstr "Dateien und Verzeichnisse"
msgid "For help use link at the relevant option"
msgstr ""
"Für Hilfe zur Verwendung, benutzen Sie die Verknüpfung der betreffenden "
"Option."
msgid "Forwarding"
msgstr "Weiterleitung"
msgid ""
"If enabled, Privoxy hides the 'go there anyway' link. The user obviously "
"should not be able to bypass any blocks."
msgstr ""
"Wenn aktiviert, verbirgt Privoxy den Link 'go there anyway'. Normalerweise "
"sollten Benutzer nicht in der Lage sein, Blockierungen zu umgehen."
msgid ""
"If you intend to operate Privoxy for more users than just yourself, it might "
"be a good idea to let them know how to reach you, what you block and why you "
"do that, your policies, etc."
msgstr ""
"Wenn Sie beabsichtigen, Privoxy für mehr Nutzer als nur sich selbst zu "
"betreiben, ist es eine gute Idee, sie wissen zu lassen, wie sie Sie "
"erreichen können, was Sie blockieren und warum Sie das tun, etc."
msgid "Invalid email address"
msgstr "Ungültige Email Adresse"
msgid "It is NOT recommended for the casual user."
msgstr "Es wird NICHT für den gelegentlichen Anwender empfohlen."
msgid "Local Set-up"
msgstr "Lokale Einstellungen"
msgid "Location of the Privoxy User Manual."
msgstr "Ort des Privoxy Benutzer Handbuches"
msgid "Log File Viewer"
msgstr "Protokolldatei"
msgid "Log all data read from the network"
msgstr "Protokolliert alle Daten, die vom Netzwerk gelesen werden."
msgid "Log all data written to the network"
msgstr "Protokolliert alle Daten, die auf das Netzwerk geschrieben werden."
msgid "Log the applying actions"
msgstr "Protokiolliert angewendete Aktionen"
msgid ""
"Log the destination for each request Privoxy let through. See also 'Debug "
"1024'."
msgstr ""
"Protokolliert das Ziel für jede Anforderung die Privoxy durchlässt. Siehe "
"auch 'Debug 1024'."
msgid ""
"Log the destination for requests Privoxy didn't let through, and the reason "
"why."
msgstr ""
"Protokolliert das Ziel für Anfragen die Privoxy nicht durchgelassen hat, und "
"den Grund dafür."
msgid "Main actions file"
msgstr "Wichtige Aktionen-Datei"
msgid "Mandatory Input: No Data given!"
msgstr "Pflichtfeld: Keine Daten angegeben!"
msgid "Mandatory Input: No Directory given!"
msgstr "Pflichtfeld: Kein Verzeichnis angegeben!"
msgid "Mandatory Input: No File given!"
msgstr "Pflichtfeld: Keine Datei angegeben!"
msgid "Mandatory Input: No Port given!"
msgstr "Pflichtfeld: Kein Port angegeben!"
msgid "Mandatory Input: No files given!"
msgstr "Pflichtfeld: Keine Dateien angegeben!"
msgid "Mandatory Input: No valid IPv4 address or host given!"
msgstr ""
"Pflichtfeld: Keine gültige IPv4 Adresse oder gültiger Hostname angegeben!"
msgid "Mandatory Input: No valid IPv6 address given!"
msgstr "Pflichtfeld: Keine gültige IPv6 Adresse angegeben!"
msgid "Mandatory Input: No valid Port given!"
msgstr "Pflichtfeld: Keine gültige Port Nummer angegeben!"
msgid "Maximum number of client connections that will be served."
msgstr "Maximale Anzahl von Client-Verbindungen."
msgid "Maximum size (in KB) of the buffer for content filtering."
msgstr "Maximale Größe (in KB) des Puffers für die Inhaltsfilterung."
msgid "Miscellaneous"
msgstr "Verschiedenes"
msgid "No trailing '/', please."
msgstr "Bitte kein '/' am Ende."
msgid "Non-fatal errors - *we highly recommended enabling this*"
msgstr ""
"Protokolliert nicht schwerwiegende Fehler - * Es wird dringend empfohlen, "
"dieses zu aktivieren *"
msgid ""
"Number of seconds after which a socket times out if no data is received."
msgstr ""
"Anzahl der Sekunden, nach der eine Socket Timeout erfolgt, wenn keine Daten "
"empfangen werden."
msgid ""
"Number of seconds after which an open connection will no longer be reused."
msgstr ""
"Anzahl von Sekunden, nach der eine offene Verbindung nicht mehr "
"wiederverwendet wird."
msgid "Please press [Read] button"
msgstr "Bitte Protokolldatei einlesen"
msgid "Please read Privoxy manual for details!"
msgstr "Bitte lesen Sie das Privoxy Handbuch für Details!"
msgid "Please update to the current version!"
msgstr "Aktualisieren Sie bitte auf die aktuelle Version!"
msgid "Privoxy WEB proxy"
msgstr "Privoxy WEB proxy"
msgid ""
"Privoxy can (and normally does) use a number of other files for additional "
"configuration, help and logging. This section of the configuration file "
"tells Privoxy where to find those other files."
msgstr ""
"Privoxy verwendet (was in der Regel der Fall ist), eine Reihe von anderen "
"Dateien für eine zusätzliche Konfiguration, Hilfe und Protokollierung. "
"Dieser Abschnitt der Konfigurationsdatei definiert, wo diese Dateien zu "
"finden sind."
msgid ""
"Privoxy is a non-caching web proxy with advanced filtering capabilities for "
"enhancing privacy, modifying web page data and HTTP headers, controlling "
"access, and removing ads and other obnoxious Internet junk."
msgstr ""
"Privoxy ist ein non-caching Web-Proxy mit erweiterten Filterfunktion zur "
"Verbesserung der Privatsphäre. Er modifiziert Webseitendaten und HTTP-"
"Header, kontrolliert den Zugang und das Entfernen von Anzeigen und anderem "
"abscheulichen Internet Schrott."
msgid "Read / Reread log file"
msgstr "Protokolldatei (neu) lesen"
msgid "Show I/O status"
msgstr "Protokolliert den I/O Status"
msgid "Show each connection status"
msgstr "Protokolliert jeden Verbindungsstatus"
msgid "Show header parsing"
msgstr "Protokolliert das 'Header parsing'"
msgid "Software update required"
msgstr "Softwareaktualisierung nötig"
msgid "Start / Stop"
msgstr "Start / Stopp"
msgid "Start/Stop Privoxy WEB Proxy"
msgstr "Start/Stopp Privoxy WEB Proxy"
msgid "Startup banner and warnings."
msgstr "Protokolliert Start-Meldungen und Warnungen"
msgid "Syntax:"
msgstr "Syntax:"
msgid "Syntax: Client header names delimited by spaces."
msgstr "Syntax: Client header Namen getrennt durch Leerzeichen."
msgid "Syntax: target_pattern http_parent[:port]"
msgstr "Syntax: target_pattern http_parent[:port]"
msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]"
msgstr "Syntax: target_pattern socks_proxy[:port] http_parent[:port]"
msgid ""
"The actions file(s) to use. Multiple actionsfile lines are permitted, and "
"are in fact recommended!"
msgstr ""
"Die zu verwendenden Aktion-Datei(en). Mehrere Dateien sind gestattet und "
"empfohlen!"
msgid ""
"The address and TCP port on which Privoxy will listen for client requests."
msgstr ""
"Die Adresse und das TCP-Port, auf dem Privoxy auf Client-Anforderungen "
"wartet."
msgid ""
"The compression level that is passed to the zlib library when compressing "
"buffered content."
msgstr ""
"Die Komprimierungsstufe (0-9), die der zlib-Bibliothek beim Komprimieren "
"gepufferten Inhaltes übergeben wird."
msgid ""
"The currently installed 'privoxy' package is not supported by LuCI "
"application."
msgstr ""
"Das aktuell installierte \"privoxy' Paket wird von dieser LuCI Anwendung "
"NICHT unterstützt."
msgid ""
"The directory where all logging takes place (i.e. where the logfile is "
"located)."
msgstr "Das Verzeichnis in dem die Protokolldatei gespeichert wird."
msgid "The directory where the other configuration files are located."
msgstr "Das Verzeichnis in dem weitere Konfigurationsdateien gespeichert sind."
msgid ""
"The filter files contain content modification rules that use regular "
"expressions."
msgstr ""
"Die Filterdateien enthalten Änderung des Inhalts, die reguläre Ausdrücke "
"als Regeln verwenden."
msgid "The hostname shown on the CGI pages."
msgstr "Der Hostname der auf CGI-Seiten angezeigt wird."
msgid "The log file to use. File name, relative to log directory."
msgstr ""
"Zu verwendende Protokolldatei. Dateiname relativ zum Protokoll-Verzeichnis."
msgid "The order in which client headers are sorted before forwarding them."
msgstr ""
"Die Reihenfolge, in der Client-Header sortiert werden, bevor sie "
"weitergeleitet werden."
msgid ""
"The status code Privoxy returns for pages blocked with +handle-as-empty-"
"document."
msgstr ""
"Ob Statuscode 200(OK) oder 403(forbidden) für Seiten gemeldet wird, die "
"durch den Filter 'handle-as-empty-document' blockiert werden."
msgid ""
"The trust mechanism is an experimental feature for building white-lists and "
"should be used with care."
msgstr ""
"Der Trust-Mechanismus ist eine experimentelle Funktion für den Aufbau von "
"White-Listen und sollte mit Vorsicht verwendet werden."
msgid ""
"The value of this option only matters if the experimental trust mechanism "
"has been activated."
msgstr ""
"Der Wert dieser Option ist nur wirksam, wenn der experimentelle Trust-"
"Mechanismus aktiviert wurde."
msgid ""
"This option is only there for debugging purposes. It will drastically reduce "
"performance."
msgstr ""
"Diese Option ist ausschließlich zur Fehlersuche. Es wird drastisch die "
"Leistung beeinträchtigt."
msgid ""
"This option will be removed in future releases as it has been obsoleted by "
"the more general header taggers."
msgstr "Diese Option wird in zukünftigen Versionen entfernt werden."
msgid ""
"This tab controls the security-relevant aspects of Privoxy's configuration."
msgstr ""
"Diese Registerkarte steuert die sicherheitsrelevanten Aspekte der Privoxy "
"Konfiguration."
msgid ""
"Through which SOCKS proxy (and optionally to which parent HTTP proxy) "
"specific requests should be routed."
msgstr ""
"An welchen SOCKS-Proxy (und gegebenenfalls an welchen übergeordneten HTTP-"
"Proxy) spezifischen Anforderungen weitergeleitet werden."
msgid "To which parent HTTP proxy specific requests should be routed."
msgstr ""
"An welchen übergeordneten HTTP-Proxy spezifischen Anforderungen "
"weitergeleitet werden."
msgid "User customizations"
msgstr "Benutzerdefinierte Anpassungen"
msgid "Value is not a number"
msgstr "Eingabe ist keine Zahl"
msgid "Value not between 0 and 9"
msgstr "Wert nicht zwischen 0 und 9"
msgid "Value not between 1 and 4096"
msgstr "Wert nicht zwischen 1 und 4096"
msgid "Value not greater 0 or empty"
msgstr "Wert nicht größer 0 oder leer"
msgid "Value range 1 to 4096, no entry defaults to 4096"
msgstr "Wertebereich: 1 bis 4096; Keine Angabe setzt 4096."
msgid "Version Information"
msgstr "Versionsinformation"
msgid "Whether intercepted requests should be treated as valid."
msgstr "Ob abgefangen Anfragen als gültig behandelt werden."
msgid ""
"Whether or not Privoxy recognizes special HTTP headers to change its "
"behaviour."
msgstr ""
"Ob Privoxy erkannte spezielle HTTP-Header in ihrer Bedeutung ändert oder "
"nicht."
msgid "Whether or not buffered content is compressed before delivery."
msgstr ""
"Ob gepufferte Inhalte vor der Weiterleitung komprimiert werden oder nicht."
msgid ""
"Whether or not outgoing connections that have been kept alive should be "
"shared between different incoming connections."
msgstr ""
"Ob ausgehende Verbindungen, die am Leben gehalten werden, für verschiedenen "
"eingehenden Verbindungen gemeinsam genutzt werden oder nicht."
msgid "Whether or not pipelined requests should be served."
msgstr "Ob Pipeline-Anfragen bedient werden oder nicht."
msgid "Whether or not proxy authentication through Privoxy should work."
msgstr ""
"Ob Proxy-Authentifizierungen durch Privoxy weitergeleitet werden oder nicht."
msgid "Whether or not the web-based actions file editor may be used."
msgstr "De-/Aktiviert den webbasierte Action-Datei Editor."
msgid "Whether or not the web-based toggle feature may be used."
msgstr "De-Aktiviert die webbasierte Umschaltfunktion."
msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected."
msgstr ""
"Ob Anfragen an Privoxy CGI-Seiten gesperrt oder umgeleitet werden können "
"oder nicht."
msgid ""
"Whether the CGI interface should stay compatible with broken HTTP clients."
msgstr ""
"Ob die CGI-Schnittstelle mit broken HTTP-Clients kompatibel bleibt oder "
"nicht."
msgid "Whether to run only one server thread."
msgstr "Ob nur ein Server-Thread ausgeführt wird."
msgid "Who can access what."
msgstr "Wer kann auf Was zugreifen."
msgid "installed"
msgstr "installiert"
msgid "or greater"
msgstr "oder groeßer"
msgid "or higher"
msgstr "oder höher"
msgid "required"
msgstr "benötigt"

+ 399
- 0
net/privoxy-luci/po/templates/privoxy.pot View File

@ -0,0 +1,399 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid ""
"A URL to be displayed in the error page that users will see if access to an "
"untrusted page is denied."
msgstr ""
msgid ""
"A URL to documentation about the local Privoxy setup, configuration or "
"policies."
msgstr ""
msgid "Access Control"
msgstr ""
msgid "Actions that are applied to all sites and maybe overruled later on."
msgstr ""
msgid "An alternative directory where the templates are loaded from."
msgstr ""
msgid "An email address to reach the Privoxy administrator."
msgstr ""
msgid ""
"Assumed server-side keep-alive timeout (in seconds) if not specified by the "
"server."
msgstr ""
msgid "Build"
msgstr ""
msgid "CGI user interface"
msgstr ""
msgid "Common Log Format"
msgstr ""
msgid ""
"Configure here the routing of HTTP requests through a chain of multiple "
"proxies. Note that parent proxies can severely decrease your privacy level. "
"Also specified here are SOCKS proxies."
msgstr ""
msgid "Debug GIF de-animation"
msgstr ""
msgid "Debug force feature"
msgstr ""
msgid "Debug redirects"
msgstr ""
msgid "Debug regular expression filters"
msgstr ""
msgid "Directory does not exist!"
msgstr ""
msgid "Disabled == Transparent Proxy Mode"
msgstr ""
msgid "Enable proxy authentication forwarding"
msgstr ""
msgid ""
"Enable/Disable autostart of Privoxy on system startup and interface events"
msgstr ""
msgid "Enable/Disable filtering when Privoxy starts."
msgstr ""
msgid ""
"Enabling this option is NOT recommended if there is no parent proxy that "
"requires authentication!"
msgstr ""
msgid "File '%s' not found inside Configuration Directory"
msgstr ""
msgid "File not found or empty"
msgstr ""
msgid "Files and Directories"
msgstr ""
msgid "For help use link at the relevant option"
msgstr ""
msgid "Forwarding"
msgstr ""
msgid ""
"If enabled, Privoxy hides the 'go there anyway' link. The user obviously "
"should not be able to bypass any blocks."
msgstr ""
msgid ""
"If you intend to operate Privoxy for more users than just yourself, it might "
"be a good idea to let them know how to reach you, what you block and why you "
"do that, your policies, etc."
msgstr ""
msgid "Invalid email address"
msgstr ""
msgid "It is NOT recommended for the casual user."
msgstr ""
msgid "Local Set-up"
msgstr ""
msgid "Location of the Privoxy User Manual."
msgstr ""
msgid "Log File Viewer"
msgstr ""
msgid "Log all data read from the network"
msgstr ""
msgid "Log all data written to the network"
msgstr ""
msgid "Log the applying actions"
msgstr ""
msgid ""
"Log the destination for each request Privoxy let through. See also 'Debug "
"1024'."
msgstr ""
msgid ""
"Log the destination for requests Privoxy didn't let through, and the reason "
"why."
msgstr ""
msgid "Main actions file"
msgstr ""
msgid "Mandatory Input: No Data given!"
msgstr ""
msgid "Mandatory Input: No Directory given!"
msgstr ""
msgid "Mandatory Input: No File given!"
msgstr ""
msgid "Mandatory Input: No Port given!"
msgstr ""
msgid "Mandatory Input: No files given!"
msgstr ""
msgid "Mandatory Input: No valid IPv4 address or host given!"
msgstr ""
msgid "Mandatory Input: No valid IPv6 address given!"
msgstr ""
msgid "Mandatory Input: No valid Port given!"
msgstr ""
msgid "Maximum number of client connections that will be served."
msgstr ""
msgid "Maximum size (in KB) of the buffer for content filtering."
msgstr ""
msgid "Miscellaneous"
msgstr ""
msgid "No trailing '/', please."
msgstr ""
msgid "Non-fatal errors - *we highly recommended enabling this*"
msgstr ""
msgid ""
"Number of seconds after which a socket times out if no data is received."
msgstr ""
msgid ""
"Number of seconds after which an open connection will no longer be reused."
msgstr ""
msgid "Please press [Read] button"
msgstr ""
msgid "Please read Privoxy manual for details!"
msgstr ""
msgid "Please update to the current version!"
msgstr ""
msgid "Privoxy WEB proxy"
msgstr ""
msgid ""
"Privoxy can (and normally does) use a number of other files for additional "
"configuration, help and logging. This section of the configuration file "
"tells Privoxy where to find those other files."
msgstr ""
msgid ""
"Privoxy is a non-caching web proxy with advanced filtering capabilities for "
"enhancing privacy, modifying web page data and HTTP headers, controlling "
"access, and removing ads and other obnoxious Internet junk."
msgstr ""
msgid "Read / Reread log file"
msgstr ""
msgid "Show I/O status"
msgstr ""
msgid "Show each connection status"
msgstr ""
msgid "Show header parsing"
msgstr ""
msgid "Software update required"
msgstr ""
msgid "Start / Stop"
msgstr ""
msgid "Start/Stop Privoxy WEB Proxy"
msgstr ""
msgid "Startup banner and warnings."
msgstr ""
msgid "Syntax:"
msgstr ""
msgid "Syntax: Client header names delimited by spaces."
msgstr ""
msgid "Syntax: target_pattern http_parent[:port]"
msgstr ""
msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]"
msgstr ""
msgid ""
"The actions file(s) to use. Multiple actionsfile lines are permitted, and "
"are in fact recommended!"
msgstr ""
msgid ""
"The address and TCP port on which Privoxy will listen for client requests."
msgstr ""
msgid ""
"The compression level that is passed to the zlib library when compressing "
"buffered content."
msgstr ""
msgid ""
"The currently installed 'privoxy' package is not supported by LuCI "
"application."
msgstr ""
msgid ""
"The directory where all logging takes place (i.e. where the logfile is "
"located)."
msgstr ""
msgid "The directory where the other configuration files are located."
msgstr ""
msgid ""
"The filter files contain content modification rules that use regular "
"expressions."
msgstr ""
msgid "The hostname shown on the CGI pages."
msgstr ""
msgid "The log file to use. File name, relative to log directory."
msgstr ""
msgid "The order in which client headers are sorted before forwarding them."
msgstr ""
msgid ""
"The status code Privoxy returns for pages blocked with +handle-as-empty-"
"document."
msgstr ""
msgid ""
"The trust mechanism is an experimental feature for building white-lists and "
"should be used with care."
msgstr ""
msgid ""
"The value of this option only matters if the experimental trust mechanism "
"has been activated."
msgstr ""
msgid ""
"This option is only there for debugging purposes. It will drastically reduce "
"performance."
msgstr ""
msgid ""
"This option will be removed in future releases as it has been obsoleted by "
"the more general header taggers."
msgstr ""
msgid ""
"This tab controls the security-relevant aspects of Privoxy's configuration."
msgstr ""
msgid ""
"Through which SOCKS proxy (and optionally to which parent HTTP proxy) "
"specific requests should be routed."
msgstr ""
msgid "To which parent HTTP proxy specific requests should be routed."
msgstr ""
msgid "User customizations"
msgstr ""
msgid "Value is not a number"
msgstr ""
msgid "Value not between 0 and 9"
msgstr ""
msgid "Value not between 1 and 4096"
msgstr ""
msgid "Value not greater 0 or empty"
msgstr ""
msgid "Value range 1 to 4096, no entry defaults to 4096"
msgstr ""
msgid "Version Information"
msgstr ""
msgid "Whether intercepted requests should be treated as valid."
msgstr ""
msgid ""
"Whether or not Privoxy recognizes special HTTP headers to change its "
"behaviour."
msgstr ""
msgid "Whether or not buffered content is compressed before delivery."
msgstr ""
msgid ""
"Whether or not outgoing connections that have been kept alive should be "
"shared between different incoming connections."
msgstr ""
msgid "Whether or not pipelined requests should be served."
msgstr ""
msgid "Whether or not proxy authentication through Privoxy should work."
msgstr ""
msgid "Whether or not the web-based actions file editor may be used."
msgstr ""
msgid "Whether or not the web-based toggle feature may be used."
msgstr ""
msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected."
msgstr ""
msgid ""
"Whether the CGI interface should stay compatible with broken HTTP clients."
msgstr ""
msgid "Whether to run only one server thread."
msgstr ""
msgid "Who can access what."
msgstr ""
msgid "installed"
msgstr ""
msgid "or greater"
msgstr ""
msgid "or higher"
msgstr ""
msgid "required"
msgstr ""

Loading…
Cancel
Save