Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>lilik-openwrt-22.03
@ -1,68 +0,0 @@ | |||||
include $(TOPDIR)/rules.mk | |||||
PKG_NAME:=luci-app-privoxy | |||||
PKG_VERSION:=1.0.1 | |||||
#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-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) $(STAGING_DIR_HOST)/bin/po2lmo $(PKG_INSTALL_DIR)/build/po2lmo | |||||
# 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)) |
@ -1,27 +0,0 @@ | |||||
#!/usr/bin/perl | |||||
@ARGV == 2 || die "Usage: $0 <source-dir> <dest-dir>\n"; | |||||
my $source_dir = shift @ARGV; | |||||
my $target_dir = shift @ARGV; | |||||
if( ! -d $target_dir ) | |||||
{ | |||||
system('mkdir', '-p', $target_dir); | |||||
} | |||||
if( open F, "find $source_dir -type f -name '*.po' |" ) | |||||
{ | |||||
while( chomp( my $file = readline F ) ) | |||||
{ | |||||
my ( $lang, $basename ) = $file =~ m{.+/(\w+)/([^/]+)\.po$}; | |||||
$lang = lc $lang; | |||||
$lang =~ s/_/-/g; | |||||
printf "Generating %-40s ", "$target_dir/$basename.$lang.lmo"; | |||||
system("./build/po2lmo", $file, "$target_dir/$basename.$lang.lmo"); | |||||
print ( -f "$target_dir/$basename.$lang.lmo" ? "done\n" : "empty\n" ); | |||||
} | |||||
close F; | |||||
} |
@ -1,132 +0,0 @@ | |||||
--[[ | |||||
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.1" -- luci-application / openwrt Makefile compatible version | |||||
version_required = "3.0.22-1" -- minimum required service version | |||||
function index() | |||||
local _sys = require "luci.sys" | |||||
local _vermin = "3.0.22-1" | |||||
local _verinst = _sys.exec([[opkg list-installed ]] .. "privoxy" .. [[ | awk '{print $3}']]) | |||||
local _cmd = [[opkg compare-versions "]] .. _verinst .. [[" ">=" "]] .. _vermin .. [["]] | |||||
local _verok = tonumber(_sys.call(_cmd)) | |||||
-- check config file and version | |||||
if not nixio.fs.access("/etc/config/privoxy") or (_verok == 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 | |||||
-- 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 |
@ -1,61 +0,0 @@ | |||||
--[[ | |||||
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" | |||||
local SYS = require "luci.sys" | |||||
-- 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]] | |||||
.. SYS.exec([[opkg list-installed ]] .. [[luci_app_privoxy]] .. [[ | awk '{print $3}']]) | |||||
.. [[\n\nprivoxy ]] .. translate("required") .. [[:]] | |||||
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.version_required .. [[ ]] .. translate("or greater") | |||||
.. [[\n\nprivoxy ]] .. translate("installed") .. [[:]] | |||||
.. [[\n\t]] .. translate("Version") .. [[:\t]] | |||||
.. SYS.exec([[opkg list-installed ]] .. [[privoxy]] .. [[ | awk '{print $3}']]) | |||||
.. [[\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 |
@ -1,942 +0,0 @@ | |||||
--[[ | |||||
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]] | |||||
.. SYS.exec([[opkg list-installed ]] .. [[luci_app_privoxy]] .. [[ | awk '{print $3}']]) | |||||
.. [[\n\nprivoxy ]] .. translate("required") .. [[:]] | |||||
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.version_required .. [[ ]] .. translate("or greater") | |||||
.. [[\n\nprivoxy ]] .. translate("installed") .. [[:]] | |||||
.. [[\n\t]] .. translate("Version") .. [[:\t]] | |||||
.. SYS.exec([[opkg list-installed ]] .. [[privoxy]] .. [[ | awk '{print $3}']]) | |||||
.. [[\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 |
@ -1,56 +0,0 @@ | |||||
<!-- ++ 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 ++ --> |
@ -1,49 +0,0 @@ | |||||
<!-- ++ 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 ++ --> |
@ -1,12 +0,0 @@ | |||||
#!/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 |
@ -1,490 +0,0 @@ | |||||
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" |
@ -1,399 +0,0 @@ | |||||
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 "" |