* Major repository revision
This commit is contained in:
parent
b864e2933d
commit
cd498aa924
93 changed files with 60 additions and 1918 deletions
42
Makefile
42
Makefile
|
@ -1,42 +0,0 @@
|
|||
LUAC = luac
|
||||
LUAC_OPTIONS = -s
|
||||
|
||||
FILES = ffluci/debug.lua
|
||||
|
||||
CFILES = ffluci/util.lua ffluci/http.lua ffluci/fs.lua \
|
||||
ffluci/sys.lua ffluci/model/uci.lua ffluci/model/ipkg.lua \
|
||||
ffluci/config.lua ffluci/i18n.lua ffluci/template.lua \
|
||||
ffluci/cbi.lua ffluci/dispatcher.lua ffluci/menu.lua ffluci/init.lua
|
||||
|
||||
DIRECTORIES = dist/ffluci/model/cbi dist/ffluci/model/menu dist/ffluci/controller dist/ffluci/i18n dist/ffluci/view
|
||||
|
||||
INFILES = $(CFILES:%=src/%)
|
||||
OUTFILE = ffluci/init.lua
|
||||
|
||||
.PHONY: all dist-compile dist-source examples-compile examples-source dist examples compile source clean
|
||||
|
||||
all: compile
|
||||
|
||||
dist-compile: compile dist
|
||||
dist-source: source dist
|
||||
|
||||
dist:
|
||||
cp src/ffluci/controller/* dist/ffluci/controller/ -R
|
||||
cp src/ffluci/i18n/* dist/ffluci/i18n/
|
||||
cp src/ffluci/view/* dist/ffluci/view/ -R
|
||||
cp src/ffluci/model/cbi/* dist/ffluci/model/cbi/ -R
|
||||
cp src/ffluci/model/menu/* dist/ffluci/model/menu/ -R
|
||||
|
||||
compile:
|
||||
mkdir -p $(DIRECTORIES)
|
||||
$(LUAC) $(LUAC_OPTIONS) -o dist/$(OUTFILE) $(INFILES)
|
||||
for i in $(CFILES); do [ -f dist/$$i ] || ln -s `dirname $$i | cut -s -d / -f 2- | sed -e 's/[^/]*\/*/..\//g'``basename $(OUTFILE)` dist/$$i; done
|
||||
for i in $(FILES); do cp src/$$i dist/$$i; done
|
||||
|
||||
source:
|
||||
mkdir -p $(DIRECTORIES)
|
||||
for i in $(CFILES); do cp src/$$i dist/$$i; done
|
||||
for i in $(FILES); do cp src/$$i dist/$$i; done
|
||||
|
||||
clean:
|
||||
rm dist -rf
|
|
@ -1,88 +0,0 @@
|
|||
#!/bin/sh
|
||||
. /etc/functions.sh
|
||||
|
||||
# initialize defaults
|
||||
RAMFS_COPY_BIN="" # extra programs for temporary ramfs root
|
||||
RAMFS_COPY_DATA="" # extra data files
|
||||
export KEEP_PATTERN=""
|
||||
export VERBOSE=1
|
||||
|
||||
# parse options
|
||||
while [ -n "$1" ]; do
|
||||
case "$1" in
|
||||
-k)
|
||||
shift
|
||||
export KEEP_PATTERN="$1"
|
||||
;;
|
||||
-*)
|
||||
echo "Invalid option: $1"
|
||||
exit 1
|
||||
;;
|
||||
*) break;;
|
||||
esac
|
||||
shift;
|
||||
done
|
||||
|
||||
export CONFFILES=/tmp/sysupgrade.conffiles
|
||||
export CONF_TAR=/tmp/sysupgrade.tgz
|
||||
|
||||
[ -f $CONFFILES ] && rm $CONFFILES
|
||||
[ -f $CONF_TAR ] && rm $CONF_TAR
|
||||
|
||||
export ARGV="$*"
|
||||
export ARGC="$#"
|
||||
|
||||
[ -z "$ARGV" ] && {
|
||||
cat <<EOF
|
||||
Usage: $0 [options] <image file or URL>
|
||||
|
||||
Options:
|
||||
-k <"file 1, file 2, ..."> Files to be kept
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
|
||||
add_pattern_conffiles() {
|
||||
local file="$1"
|
||||
find $KEEP_PATTERN >> "$file" 2>/dev/null
|
||||
return 0
|
||||
}
|
||||
|
||||
# hooks
|
||||
sysupgrade_image_check="platform_check_image"
|
||||
sysupgrade_init_conffiles=""
|
||||
|
||||
[ -n "$KEEP_PATTERN" ] && append sysupgrade_init_conffiles "add_pattern_conffiles"
|
||||
|
||||
include /lib/upgrade
|
||||
|
||||
do_save_conffiles() {
|
||||
[ -z "$(rootfs_type)" ] && {
|
||||
echo "Cannot save config while running from ramdisk."
|
||||
exit 3
|
||||
return 0
|
||||
}
|
||||
run_hooks "$CONFFILES" $sysupgrade_init_conffiles
|
||||
|
||||
v "Saving config files..."
|
||||
[ "$VERBOSE" -gt 1 ] && TAR_V="v" || TAR_V=""
|
||||
tar c${TAR_V}zf "$CONF_TAR" -T "$CONFFILES" 2>/dev/null
|
||||
}
|
||||
|
||||
type platform_check_image >/dev/null 2>/dev/null || {
|
||||
echo "Firmware upgrade is not implemented for this platform."
|
||||
exit 1
|
||||
}
|
||||
|
||||
for check in $sysupgrade_image_check; do
|
||||
( eval "$check \"\$ARGV\"" ) || {
|
||||
echo "Image check '$check' failed."
|
||||
exit 2
|
||||
}
|
||||
done
|
||||
|
||||
[ -n "$sysupgrade_init_conffiles" ] && do_save_conffiles
|
||||
run_hooks "" $sysupgrade_pre_upgrade
|
||||
|
||||
v "Switching to ramdisk..."
|
||||
run_ramfs '. /etc/functions.sh; include /lib/upgrade; do_upgrade'
|
|
@ -1,121 +0,0 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
START=46
|
||||
|
||||
apply_portfw() {
|
||||
local cfg="$1"
|
||||
config_get proto "$cfg" proto
|
||||
config_get dport "$cfg" dport
|
||||
config_get iface "$cfg" iface
|
||||
config_get to "$cfg" to
|
||||
|
||||
ports=$(echo $to | cut -sd: -f2)
|
||||
if [ -n "$ports" ]; then
|
||||
ports="--dport $(echo $ports | sed -e 's/-/:/')"
|
||||
else
|
||||
ports="--dport $dport"
|
||||
fi
|
||||
|
||||
ip=$(echo $to | cut -d: -f1)
|
||||
|
||||
if ([ "$proto" == "tcpudp" ] || [ "$proto" == "tcp" ]); then
|
||||
iptables -t nat -A luci_prerouting -i "$iface" -p tcp --dport "$dport" -j DNAT --to "$to"
|
||||
iptables -A luci_forward -i "$iface" -p tcp -d "$ip" $ports -j ACCEPT
|
||||
fi
|
||||
|
||||
if ([ "$proto" == "tcpudp" ] || [ "$proto" == "udp" ]); then
|
||||
iptables -t nat -A luci_prerouting -i "$iface" -p udp --dport "$dport" -j DNAT --to "$to"
|
||||
iptables -A luci_forward -i "$iface" -p udp -d "$ip" $ports -j ACCEPT
|
||||
fi
|
||||
}
|
||||
|
||||
apply_rule() {
|
||||
local cfg="$1"
|
||||
local cmd=""
|
||||
|
||||
config_get chain "$cfg" chain
|
||||
[ -n "$chain" ] || return 0
|
||||
[ "$chain" == "forward" ] && cmd="$cmd -A luci_forward"
|
||||
[ "$chain" == "input" ] && cmd="$cmd -A luci_input"
|
||||
[ "$chain" == "output" ] && cmd="$cmd -A luci_output"
|
||||
[ "$chain" == "prerouting" ] && cmd="$cmd -t nat -A luci_prerouting"
|
||||
[ "$chain" == "postrouting" ] && cmd="$cmd -t nat -A luci_postrouting"
|
||||
|
||||
config_get iface "$cfg" iface
|
||||
[ -n "$iface" ] && cmd="$cmd -i $iface"
|
||||
|
||||
config_get oface "$cfg" oface
|
||||
[ -n "$oface" ] && cmd="$cmd -o $oface"
|
||||
|
||||
config_get proto "$cfg" proto
|
||||
[ -n "$proto" ] && cmd="$cmd -p $proto"
|
||||
|
||||
config_get source "$cfg" source
|
||||
[ -n "$source" ] && cmd="$cmd -s $source"
|
||||
|
||||
config_get destination "$cfg" destination
|
||||
[ -n "$destination" ] && cmd="$cmd -d $destination"
|
||||
|
||||
config_get sport "$cfg" sport
|
||||
[ -n "$sport" ] && cmd="$cmd --sport $sport"
|
||||
|
||||
config_get dport "$cfg" dport
|
||||
[ -n "$dport" ] && cmd="$cmd --dport $dport"
|
||||
|
||||
config_get todest "$cfg" todest
|
||||
[ -n "$todest" ] && cmd="$cmd --to-destination $todest"
|
||||
|
||||
config_get tosrc "$cfg" tosrc
|
||||
[ -n "$tosrc" ] && cmd="$cmd --to-source $tosrc"
|
||||
|
||||
config_get jump "$cfg" jump
|
||||
[ -n "$jump" ] && cmd="$cmd -j $jump"
|
||||
|
||||
config_get command "$cfg" command
|
||||
[ -n "$command" ] && cmd="$cmd $command"
|
||||
|
||||
iptables $cmd
|
||||
}
|
||||
|
||||
start() {
|
||||
### Create subchains
|
||||
iptables -N luci_input
|
||||
iptables -N luci_output
|
||||
iptables -N luci_forward
|
||||
iptables -t nat -N luci_prerouting
|
||||
iptables -t nat -N luci_postrouting
|
||||
|
||||
### Hook in the chains
|
||||
iptables -A input_rule -j luci_input
|
||||
iptables -A output_rule -j luci_output
|
||||
iptables -A forwarding_rule -j luci_forward
|
||||
iptables -t nat -A prerouting_rule -j luci_prerouting
|
||||
iptables -t nat -A postrouting_rule -j luci_postrouting
|
||||
|
||||
### Read chains from config
|
||||
config_load luci_fw
|
||||
config_foreach apply_portfw portfw
|
||||
config_foreach apply_rule rule
|
||||
}
|
||||
|
||||
stop() {
|
||||
### Hook out the chains
|
||||
iptables -D input_rule -j luci_input
|
||||
iptables -D output_rule -j luci_output
|
||||
iptables -D forwarding_rule -j luci_forward
|
||||
iptables -t nat -D prerouting_rule -j luci_prerouting
|
||||
iptables -t nat -D postrouting_rule -j luci_postrouting
|
||||
|
||||
### Clear subchains
|
||||
iptables -F luci_input
|
||||
iptables -F luci_output
|
||||
iptables -F luci_forward
|
||||
iptables -t nat -F luci_prerouting
|
||||
iptables -t nat -F luci_postrouting
|
||||
|
||||
### Delete subchains
|
||||
iptables -X luci_input
|
||||
iptables -X luci_output
|
||||
iptables -X luci_forward
|
||||
iptables -t nat -X luci_prerouting
|
||||
iptables -t nat -X luci_postrouting
|
||||
}
|
|
@ -1,256 +0,0 @@
|
|||
@charset "utf-8";
|
||||
|
||||
body {
|
||||
font-family: Verdana, Arial, sans-serif;
|
||||
background-color: #aaaaaa;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0%;
|
||||
font-size: 1.4em;
|
||||
font-weight: bold;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin: 0%;
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0%;
|
||||
}
|
||||
|
||||
#header {
|
||||
padding: 0.2em;
|
||||
height: 4.5em;
|
||||
background-color: #262626;
|
||||
}
|
||||
|
||||
#columns {
|
||||
border-left: 10.1em solid #262626;
|
||||
border-right: 10.1em solid #262626;
|
||||
display: block;
|
||||
background-color: white;
|
||||
padding: 0.1em;
|
||||
}
|
||||
|
||||
#columnswrapper {
|
||||
display: block;
|
||||
margin-left: -10em;
|
||||
margin-right: -10em;
|
||||
}
|
||||
|
||||
#content {
|
||||
margin-left: 14em;
|
||||
margin-right: 14em;
|
||||
display: block;
|
||||
position: relative;
|
||||
padding: 2px;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.headerlogo {
|
||||
height: 4em;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.headerlogo img {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.headertitle {
|
||||
font-size: 2.4em;
|
||||
color: gray;
|
||||
letter-spacing: 0.5em;
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
||||
.separator {
|
||||
padding-left: 0.25em;
|
||||
font-weight: bold;
|
||||
font-size: 0.8em;
|
||||
line-height: 1.4em;
|
||||
}
|
||||
|
||||
.whitetext {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.yellowtext {
|
||||
color: #ffcb05;
|
||||
}
|
||||
|
||||
.magentatext {
|
||||
color: #dc0065;
|
||||
}
|
||||
|
||||
.inheritcolor {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.smalltext {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.yellow {
|
||||
background-color: #ffcb05;
|
||||
}
|
||||
|
||||
.magenta {
|
||||
background-color: #dc0065;
|
||||
}
|
||||
|
||||
.nodeco {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.redhover:hover {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
position: relative;
|
||||
padding: 0.25em;
|
||||
color: gray;
|
||||
width: 9em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.separator a, .sidebar a {
|
||||
color: inherit;
|
||||
text-decoration: inherit;
|
||||
}
|
||||
|
||||
.separator a:hover, .sidebar a:hover {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.sidebar div {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
|
||||
.sidebar ul {
|
||||
font-size: 0.8em;
|
||||
color: white;
|
||||
list-style-type: none;
|
||||
padding-left: 1em;
|
||||
margin-top: 0%;
|
||||
}
|
||||
|
||||
.left {
|
||||
float: left;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.right {
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.inline {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.code {
|
||||
background: #f7f7f7;
|
||||
border: 1px solid #d7d7d7;
|
||||
margin: 1em 1.75em;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
code {
|
||||
display: block;
|
||||
background: #f7f7f7;
|
||||
border: 1px solid #d7d7d7;
|
||||
margin: 1em 1.75em;
|
||||
padding: 1em;
|
||||
overflow: auto;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
.cbi-section {
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
.cbi-section-remove {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.cbi-value-title {
|
||||
line-height: 1.75em;
|
||||
width: 15em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.cbi-value-field {
|
||||
text-align: left;
|
||||
line-height: 1.75em;
|
||||
}
|
||||
|
||||
.cbi-value-field input, .cbi-value-field select,
|
||||
.cbi-optionals select, .cbi-optionals input,
|
||||
.cbi-section-remove input, .cbi-section-create input {
|
||||
font-size: 0.8em;
|
||||
margin: 0%;
|
||||
}
|
||||
|
||||
.cbi-value-description {
|
||||
font-style: italic;
|
||||
font-size: 0.8em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
.cbi-form-separator {
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
.cbi-section-node {
|
||||
display: block;
|
||||
background: #f7f7f7;
|
||||
border: 1px solid #d7d7d7;
|
||||
overflow: auto;
|
||||
margn-bottom: 0%;
|
||||
}
|
||||
|
||||
.cbi-section-node h3 {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
.cbi-error {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
font-size: 0.8em;
|
||||
margin-bottom: 0.75em;
|
||||
}
|
||||
|
||||
.cbi-optionals {
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
.cbi-optionals option {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.error {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.ok {
|
||||
color: green;
|
||||
font-weight: bold;
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
var cbi_d = {};
|
||||
|
||||
function cbi_d_add(field, target, value) {
|
||||
if (!cbi_d[target]) {
|
||||
cbi_d[target] = {};
|
||||
}
|
||||
if (!cbi_d[target][value]) {
|
||||
cbi_d[target][value] = [];
|
||||
}
|
||||
cbi_d[target][value].push(field);
|
||||
}
|
||||
|
||||
function cbi_d_update(target) {
|
||||
if (!cbi_d[target]) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (var x in cbi_d[target]) {
|
||||
for (var i=0; i<cbi_d[target][x].length; i++) {
|
||||
document.getElementById(cbi_d[target][x][i]).style.display = "none";
|
||||
}
|
||||
}
|
||||
|
||||
var t = document.getElementById(target);
|
||||
if (t && t.value && cbi_d[target][t.value]) {
|
||||
for (var i=0; i<cbi_d[target][t.value].length; i++) {
|
||||
document.getElementById(cbi_d[target][t.value][i]).style.display = "block";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function cbi_d_init() {
|
||||
for (var x in cbi_d) {
|
||||
cbi_d_update(x);
|
||||
}
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
.contact th {
|
||||
text-align: left;
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 3.9 KiB |
|
@ -15,7 +15,7 @@ PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
|
|||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
|
||||
|
||||
MAKE_ACTION:=dist-compile LUAC=$(BUILD_DIR_HOST)/lua-luci/luac
|
||||
MAKE_ACTION:=compile LUAC=$(BUILD_DIR_HOST)/lua-luci/luac
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
|
@ -31,29 +31,38 @@ define Build/Configure
|
|||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(MAKE) -C $(PKG_BUILD_DIR) $(MAKE_ACTION)
|
||||
$(MAKE) -C $(PKG_BUILD_DIR)/core $(MAKE_ACTION)
|
||||
$(MAKE) -C $(PKG_BUILD_DIR)/module/admin-core $(MAKE_ACTION)
|
||||
$(MAKE) -C $(PKG_BUILD_DIR)/module/public-core $(MAKE_ACTION)
|
||||
endef
|
||||
|
||||
define Package/ffluci/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib/lua
|
||||
$(INSTALL_DIR) $(1)/usr/lib/lua/ffluci
|
||||
$(INSTALL_DIR) $(1)/www/cgi-bin
|
||||
$(INSTALL_DIR) $(1)/www/ffluci
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_DIR) $(1)/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/init.d/luci_fw $(1)/etc/init.d/luci_fw
|
||||
$(CP) $(PKG_BUILD_DIR)/dist/* $(1)/usr/lib/lua/ -R
|
||||
$(CP) $(PKG_BUILD_DIR)/contrib/media $(1)/www/ffluci/ -R
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/ffluci $(1)/www/cgi-bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/ffluci-upload $(1)/www/cgi-bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/index.cgi $(1)/www/cgi-bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/index.html $(1)/www
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/ffluci-flash $(1)/sbin
|
||||
$(CP) $(PKG_BUILD_DIR)/contrib/uci/luci $(1)/etc/config/luci
|
||||
$(CP) $(PKG_BUILD_DIR)/contrib/uci/luci_fw $(1)/etc/config/luci_fw
|
||||
|
||||
$(CP) $(PKG_BUILD_DIR)/core/dist/* $(1)/usr/lib/lua/ -R
|
||||
$(CP) $(PKG_BUILD_DIR)/core/contrib/media $(1)/www/ffluci/ -R
|
||||
$(CP) $(PKG_BUILD_DIR)/core/contrib/uci/luci $(1)/etc/config/luci
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/core/contrib/ffluci $(1)/www/cgi-bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/core/contrib/ffluci-upload $(1)/www/cgi-bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/core/contrib/index.cgi $(1)/www/cgi-bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/core/contrib/index.html $(1)/www
|
||||
|
||||
$(CP) $(PKG_BUILD_DIR)/module/admin-core/dist/* $(1)/usr/lib/lua/ffluci/ -R
|
||||
$(CP) $(PKG_BUILD_DIR)/module/admin-core/contrib/uci/luci_fw $(1)/etc/config/luci_fw
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/admin-core/contrib/init.d/luci_fw $(1)/etc/init.d/luci_fw
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/admin-core/contrib/ffluci-flash $(1)/sbin
|
||||
|
||||
$(CP) $(PKG_BUILD_DIR)/module/public-core/dist/* $(1)/usr/lib/lua/ffluci/ -R
|
||||
$(CP) $(PKG_BUILD_DIR)/module/public-core/contrib/media $(1)/www/ffluci/ -R
|
||||
|
||||
$(CP) -a ./ipkg/ffluci.postinst $(1)/CONTROL/postinst
|
||||
$(CP) -a ./ipkg/conffiles $(1)/CONTROL/conffiles
|
||||
rm $(DL_DIR)/$(PKG_SOURCE)
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,ffluci))
|
||||
$(eval $(call BuildPackage,ffluci))
|
|
@ -1,2 +0,0 @@
|
|||
|
||||
|
37
core/Makefile
Normal file
37
core/Makefile
Normal file
|
@ -0,0 +1,37 @@
|
|||
LUAC = luac
|
||||
LUAC_OPTIONS = -s
|
||||
|
||||
FILES = ffluci/debug.lua ffluci/view/*.htm ffluci/view/cbi/*.htm
|
||||
|
||||
CFILES = ffluci/util.lua ffluci/http.lua ffluci/fs.lua \
|
||||
ffluci/sys.lua ffluci/model/uci.lua ffluci/model/ipkg.lua \
|
||||
ffluci/config.lua ffluci/i18n.lua ffluci/template.lua \
|
||||
ffluci/cbi.lua ffluci/dispatcher.lua ffluci/menu.lua ffluci/init.lua
|
||||
|
||||
DIRECTORIES = ffluci/model/cbi ffluci/model/menu ffluci/controller ffluci/i18n ffluci/view/cbi
|
||||
|
||||
OUTDIRS = $(DIRECTORIES:%=dist/%)
|
||||
INFILES = $(CFILES:%=src/%)
|
||||
OUTFILE = ffluci/init.lua
|
||||
CPFILES = $(FILES:%=src/%)
|
||||
|
||||
.PHONY: all compile source depends clean
|
||||
|
||||
all: compile
|
||||
|
||||
depends:
|
||||
mkdir -p $(OUTDIRS)
|
||||
for i in $(CPFILES); do [ -f "$$i" ] && (i=$$(echo $$i | cut -d/ -f2-); \
|
||||
mkdir -p dist/$$(dirname $$i); cp src/$$i dist/$$i); done
|
||||
|
||||
compile: depends
|
||||
$(LUAC) $(LUAC_OPTIONS) -o dist/$(OUTFILE) $(INFILES)
|
||||
for i in $(CFILES); do [ -f dist/$$i ] || ln -s `dirname $$i | cut -s -d / -f 2- | sed -e 's/[^/]*\/*/..\//g'``basename $(OUTFILE)` dist/$$i; done
|
||||
|
||||
|
||||
source: depends
|
||||
for i in $(CFILES); do cp src/$$i dist/$$i; done
|
||||
|
||||
|
||||
clean:
|
||||
rm dist -rf
|
|
@ -1 +0,0 @@
|
|||
module("ffluci.controller.admin.index", package.seeall)
|
|
@ -1 +0,0 @@
|
|||
module(..., package.seeall)
|
|
@ -1 +0,0 @@
|
|||
module("ffluci.controller.admin.services", package.seeall)
|
|
@ -1 +0,0 @@
|
|||
module("ffluci.controller.admin.status", package.seeall)
|
|
@ -1,202 +0,0 @@
|
|||
module("ffluci.controller.admin.system", package.seeall)
|
||||
|
||||
require("ffluci.sys")
|
||||
require("ffluci.http")
|
||||
require("ffluci.util")
|
||||
require("ffluci.fs")
|
||||
require("ffluci.model.ipkg")
|
||||
require("ffluci.model.uci")
|
||||
|
||||
function action_editor()
|
||||
local file = ffluci.http.formvalue("file", "")
|
||||
local data = ffluci.http.formvalue("data")
|
||||
local err = nil
|
||||
local msg = nil
|
||||
local stat = true
|
||||
|
||||
if file and data then
|
||||
stat, err = ffluci.fs.writefile(file, data)
|
||||
end
|
||||
|
||||
if not stat then
|
||||
err = ffluci.util.split(err, " ")
|
||||
table.remove(err, 1)
|
||||
msg = table.concat(err, " ")
|
||||
end
|
||||
|
||||
local cnt, err = ffluci.fs.readfile(file)
|
||||
if cnt then
|
||||
cnt = ffluci.util.pcdata(cnt)
|
||||
end
|
||||
ffluci.template.render("admin_system/editor", {fn=file, cnt=cnt, msg=msg})
|
||||
end
|
||||
|
||||
function action_ipkg()
|
||||
local file = "/etc/ipkg.conf"
|
||||
local data = ffluci.http.formvalue("data")
|
||||
local stat = nil
|
||||
local err = nil
|
||||
|
||||
if data then
|
||||
stat, err = ffluci.fs.writefile(file, data)
|
||||
end
|
||||
|
||||
local cnt = ffluci.fs.readfile(file)
|
||||
if cnt then
|
||||
cnt = ffluci.util.pcdata(cnt)
|
||||
end
|
||||
|
||||
ffluci.template.render("admin_system/ipkg", {cnt=cnt, msg=err})
|
||||
end
|
||||
|
||||
function action_packages()
|
||||
local ipkg = ffluci.model.ipkg
|
||||
local void = nil
|
||||
local submit = ffluci.http.formvalue("submit")
|
||||
|
||||
|
||||
-- Search query
|
||||
local query = ffluci.http.formvalue("query")
|
||||
query = (query ~= '') and query or nil
|
||||
|
||||
|
||||
-- Packets to be installed
|
||||
local install = ffluci.http.formvalue("install")
|
||||
install = (type(install) == "table" and submit) and install or nil
|
||||
|
||||
-- Install from URL
|
||||
local url = ffluci.http.formvalue("url")
|
||||
if url and url ~= '' and submit then
|
||||
if not install then
|
||||
install = {}
|
||||
end
|
||||
install[url] = 1
|
||||
end
|
||||
|
||||
-- Do install
|
||||
if install then
|
||||
for k, v in pairs(install) do
|
||||
void, install[k] = ipkg.install(k)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Remove packets
|
||||
local remove = ffluci.http.formvalue("remove")
|
||||
remove = (type(remove) == "table" and submit) and remove or nil
|
||||
if remove then
|
||||
for k, v in pairs(remove) do
|
||||
void, remove[k] = ipkg.remove(k)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Update all packets
|
||||
local update = ffluci.http.formvalue("update")
|
||||
if update then
|
||||
void, update = ipkg.update()
|
||||
end
|
||||
|
||||
|
||||
-- Upgrade all packets
|
||||
local upgrade = ffluci.http.formvalue("upgrade")
|
||||
if upgrade then
|
||||
void, upgrade = ipkg.upgrade()
|
||||
end
|
||||
|
||||
|
||||
-- Package info
|
||||
local info = ffluci.model.ipkg.info(query)
|
||||
info = info or {}
|
||||
local pkgs = {}
|
||||
|
||||
-- Sort after status and name
|
||||
for k, v in pairs(info) do
|
||||
local x = 0
|
||||
for i, j in pairs(pkgs) do
|
||||
local vins = (v.Status and v.Status.installed)
|
||||
local jins = (j.Status and j.Status.installed)
|
||||
if vins ~= jins then
|
||||
if vins then
|
||||
break
|
||||
end
|
||||
else
|
||||
if j.Package > v.Package then
|
||||
break
|
||||
end
|
||||
end
|
||||
x = i
|
||||
end
|
||||
table.insert(pkgs, x+1, v)
|
||||
end
|
||||
|
||||
ffluci.template.render("admin_system/packages", {pkgs=pkgs, query=query,
|
||||
install=install, remove=remove, update=update, upgrade=upgrade})
|
||||
end
|
||||
|
||||
function action_passwd()
|
||||
local p1 = ffluci.http.formvalue("pwd1")
|
||||
local p2 = ffluci.http.formvalue("pwd2")
|
||||
local stat = nil
|
||||
|
||||
if p1 or p2 then
|
||||
if p1 == p2 then
|
||||
stat = ffluci.sys.user.setpasswd("root", p1)
|
||||
else
|
||||
stat = 10
|
||||
end
|
||||
end
|
||||
|
||||
ffluci.template.render("admin_system/passwd", {stat=stat})
|
||||
end
|
||||
|
||||
function action_reboot()
|
||||
local reboot = ffluci.http.formvalue("reboot")
|
||||
ffluci.template.render("admin_system/reboot", {reboot=reboot})
|
||||
if reboot then
|
||||
ffluci.sys.reboot()
|
||||
end
|
||||
end
|
||||
|
||||
function action_sshkeys()
|
||||
local file = "/etc/dropbear/authorized_keys"
|
||||
local data = ffluci.http.formvalue("data")
|
||||
local stat = nil
|
||||
local err = nil
|
||||
|
||||
if data then
|
||||
stat, err = ffluci.fs.writefile(file, data)
|
||||
end
|
||||
|
||||
local cnt = ffluci.fs.readfile(file)
|
||||
if cnt then
|
||||
cnt = ffluci.util.pcdata(cnt)
|
||||
end
|
||||
|
||||
ffluci.template.render("admin_system/sshkeys", {cnt=cnt, msg=err})
|
||||
end
|
||||
|
||||
function action_upgrade()
|
||||
local ret = nil
|
||||
local plat = ffluci.fs.mtime("/lib/upgrade/platform.sh")
|
||||
|
||||
local image = ffluci.http.formvalue("image")
|
||||
local imgname = ffluci.http.formvalue("image_name")
|
||||
local keepcfg = ffluci.http.formvalue("keepcfg")
|
||||
|
||||
if plat and imgname then
|
||||
local kpattern = nil
|
||||
if keepcfg then
|
||||
local files = ffluci.model.uci.show("luci", "flash_keep")
|
||||
if files.luci and files.luci.flash_keep then
|
||||
kpattern = ""
|
||||
for k,v in pairs(files.luci.flash_keep) do
|
||||
kpattern = kpattern .. " " .. v
|
||||
end
|
||||
end
|
||||
end
|
||||
ret = ffluci.sys.flash(image, kpattern)
|
||||
end
|
||||
|
||||
ffluci.template.render("admin_system/upgrade", {sysupgrade=plat, ret=ret})
|
||||
end
|
|
@ -1,59 +0,0 @@
|
|||
module("ffluci.controller.admin.uci", package.seeall)
|
||||
require("ffluci.util")
|
||||
require("ffluci.sys")
|
||||
|
||||
-- This function has a higher priority than the admin_uci/apply template
|
||||
function action_apply()
|
||||
local changes = ffluci.model.uci.changes()
|
||||
local output = ""
|
||||
|
||||
if changes then
|
||||
local apply = {}
|
||||
|
||||
-- Collect files to be applied
|
||||
for i, line in ipairs(ffluci.util.split(changes)) do
|
||||
local r = line:match("^-?([^.]+)")
|
||||
if r then
|
||||
apply[r] = true
|
||||
end
|
||||
end
|
||||
|
||||
-- Commit changes
|
||||
ffluci.model.uci.commit()
|
||||
|
||||
-- Search for post-commit commands
|
||||
if ffluci.config.uci_oncommit then
|
||||
for k, v in pairs(apply) do
|
||||
local cmd = ffluci.config.uci_oncommit[k]
|
||||
if cmd then
|
||||
output = output .. cmd .. ":" .. ffluci.sys.exec(cmd)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ffluci.template.render("admin_uci/apply", {changes=changes, output=output})
|
||||
end
|
||||
|
||||
|
||||
function action_revert()
|
||||
local changes = ffluci.model.uci.changes()
|
||||
if changes then
|
||||
local revert = {}
|
||||
|
||||
-- Collect files to be reverted
|
||||
for i, line in ipairs(ffluci.util.split(changes)) do
|
||||
local r = line:match("^-?([^.]+)")
|
||||
if r then
|
||||
revert[r] = true
|
||||
end
|
||||
end
|
||||
|
||||
-- Revert them
|
||||
for k, v in pairs(revert) do
|
||||
ffluci.model.uci.revert(k)
|
||||
end
|
||||
end
|
||||
|
||||
ffluci.template.render("admin_uci/revert", {changes=changes})
|
||||
end
|
|
@ -1 +0,0 @@
|
|||
module("ffluci.controller.admin.wifi", package.seeall)
|
|
@ -1 +0,0 @@
|
|||
module(..., package.seeall)
|
|
@ -1 +0,0 @@
|
|||
hello = "Hello"
|
|
@ -1,15 +0,0 @@
|
|||
m = Map("luci", "Kontakt", [[Diese Daten sind auf der öffentlichen Kontaktseite
|
||||
sichtbar. Alle Felder sind natürlich freiwillig. Du kannst soviel oder so wenig
|
||||
über dich angeben, wie du möchtest.]])
|
||||
|
||||
c = m:section(NamedSection, "contact")
|
||||
|
||||
c:option(Value, "nickname", "Pseudonym")
|
||||
c:option(Value, "name", "Name")
|
||||
c:option(Value, "mail", "E-Mail")
|
||||
c:option(Value, "phone", "Telefon")
|
||||
c:option(Value, "location", "Standort")
|
||||
c:option(Value, "geo", "Koordinaten", "Bitte als Breite;Länge angeben")
|
||||
c:option(Value, "note", "Notiz")
|
||||
|
||||
return m
|
|
@ -1,17 +0,0 @@
|
|||
-- ToDo: Translate, Add descriptions and help texts
|
||||
m = Map("luci", "FFLuCI")
|
||||
|
||||
c = m:section(NamedSection, "main", "core", "Allgemein")
|
||||
c:option(Value, "lang", "Sprache")
|
||||
c:option(Value, "mediaurlbase", "Mediaverzeichnis")
|
||||
|
||||
f = m:section(NamedSection, "flash", "extern", "Firmwareupgrade")
|
||||
f:option(Value, "keep", "Übernehme Dateien").size = 64
|
||||
|
||||
p = m:section(NamedSection, "category_privileges", "core", "Kategorieprivilegien")
|
||||
p.dynamic = true
|
||||
|
||||
u = m:section(NamedSection, "uci_oncommit", "event", "UCI-Befehle beim Anwenden")
|
||||
u.dynamic = true
|
||||
|
||||
return m
|
|
@ -1,37 +0,0 @@
|
|||
-- ToDo: Translate, Add descriptions and help texts
|
||||
require("ffluci.model.uci")
|
||||
require("ffluci.sys")
|
||||
|
||||
m = Map("dhcp", "DHCP")
|
||||
|
||||
s = m:section(TypedSection, "dhcp")
|
||||
s.addremove = true
|
||||
s.anonymous = true
|
||||
|
||||
iface = s:option(ListValue, "interface", "Schnittstelle")
|
||||
for k, v in pairs(ffluci.model.uci.show("network").network) do
|
||||
if v[".type"] == "interface" and k ~= "loopback" then
|
||||
iface:value(k)
|
||||
end
|
||||
end
|
||||
|
||||
s:option(Value, "start", "Start").rmempty = true
|
||||
|
||||
s:option(Value, "limit", "Limit").rmempty = true
|
||||
|
||||
s:option(Flag, "dynamicdhcp", "Dynamisches DHCP").rmempty = true
|
||||
|
||||
s:option(Value, "name", "Name").optional = true
|
||||
|
||||
s:option(Flag, "ignore", "Schnittstelle ignorieren").optional = true
|
||||
|
||||
s:option(Value, "netmask", "Netzmaske").optional = true
|
||||
|
||||
s:option(Flag, "force", "Start erzwingen").optional = true
|
||||
|
||||
for i, line in pairs(ffluci.sys.execl("dnsmasq --help dhcp")) do
|
||||
k, v = line:match("([^ ]+) +([^ ]+)")
|
||||
s:option(Value, "dhcp"..k, v).optional = true
|
||||
end
|
||||
|
||||
return m
|
|
@ -1,61 +0,0 @@
|
|||
-- ToDo: Translate, Add descriptions and help texts
|
||||
m = Map("luci_fw", "Firewall")
|
||||
|
||||
s = m:section(TypedSection, "rule")
|
||||
s.addremove = true
|
||||
s.anonymous = true
|
||||
|
||||
chain = s:option(ListValue, "chain", "Kette")
|
||||
chain:value("forward", "Forward")
|
||||
chain:value("input", "Input")
|
||||
chain:value("output", "Output")
|
||||
chain:value("prerouting", "Prerouting")
|
||||
chain:value("postrouting", "Postrouting")
|
||||
|
||||
s:option(Value, "iface", "Eingangsschnittstelle").optional = true
|
||||
s:option(Value, "oface", "Ausgangsschnittstelle").optional = true
|
||||
|
||||
proto = s:option(ListValue, "proto", "Protokoll")
|
||||
proto.optional = true
|
||||
proto:value("")
|
||||
proto:value("tcp", "TCP")
|
||||
proto:value("udp", "UDP")
|
||||
|
||||
s:option(Value, "source", "Quelladresse").optional = true
|
||||
s:option(Value, "destination", "Zieladresse").optional = true
|
||||
|
||||
sport = s:option(Value, "sport", "Quellport")
|
||||
sport.optional = true
|
||||
sport:depends("proto", "tcp")
|
||||
sport:depends("proto", "udp")
|
||||
|
||||
dport = s:option(Value, "dport", "Zielport")
|
||||
dport.optional = true
|
||||
dport:depends("proto", "tcp")
|
||||
dport:depends("proto", "udp")
|
||||
|
||||
tosrc = s:option(Value, "tosrc", "Neue Quelladresse [SNAT]")
|
||||
tosrc.optional = true
|
||||
tosrc:depends("jump", "SNAT")
|
||||
|
||||
tosrc = s:option(Value, "todest", "Neue Zieladresse [DNAT]")
|
||||
tosrc.optional = true
|
||||
tosrc:depends("jump", "DNAT")
|
||||
|
||||
jump = s:option(ListValue, "jump", "Aktion")
|
||||
jump.rmempty = true
|
||||
jump:value("", "")
|
||||
jump:value("ACCEPT", "annehmen (ACCEPT)")
|
||||
jump:value("REJECT", "zurückweisen (REJECT)")
|
||||
jump:value("DROP", "verwerfen (DROP)")
|
||||
jump:value("LOG", "protokollieren (LOG)")
|
||||
jump:value("DNAT", "Ziel umschreiben (DNAT) [nur Prerouting]")
|
||||
jump:value("MASQUERADE", "maskieren (MASQUERADE) [nur Postrouting]")
|
||||
jump:value("SNAT", "Quelle umschreiben (SNAT) [nur Postrouting]")
|
||||
|
||||
|
||||
add = s:option(Value, "command", "Eigener Befehl")
|
||||
add.size = 50
|
||||
add.rmempty = true
|
||||
|
||||
return m
|
|
@ -1,40 +0,0 @@
|
|||
-- ToDo: Translate, Add descriptions and help texts
|
||||
m = Map("network", "Schnittstellen")
|
||||
|
||||
s = m:section(TypedSection, "interface")
|
||||
s.addremove = true
|
||||
s:exclude("loopback")
|
||||
s:depends("proto", "static")
|
||||
s:depends("proto", "dhcp")
|
||||
|
||||
p = s:option(ListValue, "proto", "Protokoll")
|
||||
p:value("static", "statisch")
|
||||
p:value("dhcp", "DHCP")
|
||||
p.default = "static"
|
||||
|
||||
br = s:option(Flag, "type", "Netzwerkbrücke", "überbrückt angegebene Schnittstelle(n)")
|
||||
br.enabled = "bridge"
|
||||
br.rmempty = true
|
||||
|
||||
s:option(Value, "ifname", "Schnittstelle")
|
||||
|
||||
s:option(Value, "ipaddr", "IP-Adresse")
|
||||
|
||||
s:option(Value, "netmask", "Netzmaske"):depends("proto", "static")
|
||||
|
||||
gw = s:option(Value, "gateway", "Gateway")
|
||||
gw:depends("proto", "static")
|
||||
gw.rmempty = true
|
||||
|
||||
dns = s:option(Value, "dns", "DNS-Server")
|
||||
dns:depends("proto", "static")
|
||||
dns.optional = true
|
||||
|
||||
mtu = s:option(Value, "mtu", "MTU")
|
||||
mtu.optional = true
|
||||
mtu.isinteger = true
|
||||
|
||||
mac = s:option(Value, "macaddr", "MAC-Adresse")
|
||||
mac.optional = true
|
||||
|
||||
return m
|
|
@ -1,24 +0,0 @@
|
|||
-- ToDo: Translate, Add descriptions and help texts
|
||||
require("ffluci.sys")
|
||||
m = Map("luci_fw", "Portweiterleitung")
|
||||
|
||||
s = m:section(TypedSection, "portfw")
|
||||
s.addremove = true
|
||||
s.anonymous = true
|
||||
|
||||
iface = s:option(ListValue, "iface", "Externes Interface")
|
||||
iface:value("")
|
||||
for k,v in pairs(ffluci.sys.net.devices()) do
|
||||
iface:value(v)
|
||||
end
|
||||
|
||||
proto = s:option(ListValue, "proto", "Protokoll")
|
||||
proto:value("tcp", "TCP")
|
||||
proto:value("udp", "UDP")
|
||||
proto:value("tcpudp", "TCP+UDP")
|
||||
|
||||
dport = s:option(Value, "dport", "Externer Port", "Port[:Endport]")
|
||||
|
||||
to = s:option(Value, "to", "Interne Adresse", "IP-Adresse[:Zielport[-Zielendport]]")
|
||||
|
||||
return m
|
|
@ -1,31 +0,0 @@
|
|||
-- ToDo: Translate, Add descriptions and help texts
|
||||
m = Map("network", "Punkt-zu-Punkt Verbindungen")
|
||||
|
||||
s = m:section(TypedSection, "interface")
|
||||
s.addremove = true
|
||||
s:depends("proto", "pppoe")
|
||||
s:depends("proto", "pptp")
|
||||
|
||||
p = s:option(ListValue, "proto", "Protokoll")
|
||||
p:value("pppoe", "PPPoE")
|
||||
p:value("pptp", "PPTP")
|
||||
p.default = "pppoe"
|
||||
|
||||
s:option(Value, "ifname", "Schnittstelle")
|
||||
|
||||
s:option(Value, "username", "Benutzername")
|
||||
s:option(Value, "password", "Passwort")
|
||||
|
||||
s:option(Value, "keepalive", "Keep-Alive").optional = true
|
||||
|
||||
s:option(Value, "demand", "Dial on Demand (idle time)").optional = true
|
||||
|
||||
srv = s:option(Value, "server", "PPTP-Server")
|
||||
srv:depends("proto", "pptp")
|
||||
srv.optional = true
|
||||
|
||||
mtu = s:option(Value, "mtu", "MTU")
|
||||
mtu.optional = true
|
||||
mtu.isinteger = true
|
||||
|
||||
return m
|
|
@ -1,16 +0,0 @@
|
|||
-- ToDo: Translate, Add descriptions and help texts
|
||||
m = Map("network", "Statische Routen")
|
||||
|
||||
s = m:section(TypedSection, "route")
|
||||
s.addremove = true
|
||||
s.anonymous = true
|
||||
|
||||
s:option(Value, "interface", "Schnittstelle")
|
||||
|
||||
s:option(Value, "target", "Ziel", "Host-IP oder Netzwerk")
|
||||
|
||||
s:option(Value, "netmask", "Netzmaske", "falls Ziel ein Netzwerk ist").rmemepty = true
|
||||
|
||||
s:option(Value, "gateway", "Gateway")
|
||||
|
||||
return m
|
|
@ -1,10 +0,0 @@
|
|||
-- ToDo: Autodetect things, maybe use MultiValue instead, Translate, Add descriptions
|
||||
m = Map("network", "VLAN", "Konfguriert den Switch des Routers.")
|
||||
|
||||
s = m:section(TypedSection, "switch")
|
||||
|
||||
for i = 0, 15 do
|
||||
s:option(Value, "vlan"..i, "vlan"..i).optional = true
|
||||
end
|
||||
|
||||
return m
|
|
@ -1,29 +0,0 @@
|
|||
m = Map("dhcp", "Dnsmasq")
|
||||
|
||||
s = m:section(TypedSection, "dnsmasq", "Einstellungen")
|
||||
s.anonymous = true
|
||||
|
||||
s:option(Flag, "domainneeded", "Anfragen nur mit Domain", "Anfragen ohne Domainnamen nicht weiterleiten")
|
||||
s:option(Flag, "authoritative", "Authoritativ", "Dies ist der einzige DHCP im lokalen Netz")
|
||||
s:option(Flag, "boguspriv", "Private Anfragen filtern", "Reverse DNS-Anfragen für lokalen Netze nicht weiterleiten")
|
||||
s:option(Flag, "filterwin2k", "Windowsanfragen filtern", "nutzlose DNS-Anfragen aktueller Windowssysteme filtern")
|
||||
s:option(Flag, "localise_queries", "Lokalisiere Anfragen", "Gibt die Adresse eines Hostnamen entsprechend seines Subnetzes zurück")
|
||||
s:option(Value, "local", "Lokale Server")
|
||||
s:option(Value, "domain", "Lokale Domain")
|
||||
s:option(Flag, "expandhosts", "Erweitere Hosts", "Fügt Domainnamen zu einfachen Hosteinträgen in der Resolvdatei hinzu")
|
||||
s:option(Flag, "nonegcache", "Unbekannte nicht cachen", "Negative DNS-Antworten nicht zwischenspeichern")
|
||||
s:option(Flag, "readethers", "Verwende /etc/ethers", "Lese Informationen aus /etc/ethers um den DHCP-Server zu konfigurieren")
|
||||
s:option(Value, "leasefile", "Leasedatei", "Speicherort für vergebenen DHCP-Adressen")
|
||||
s:option(Value, "resolvfile", "Resolvdatei", "Lokale DNS-Datei")
|
||||
s:option(Flag, "nohosts", "Ignoriere /etc/hosts").optional = true
|
||||
s:option(Flag, "strictorder", "Strikte Reihenfolge", "DNS-Server werden strikt der Reihenfolge in der Resolvdatei nach abgefragt").optional = true
|
||||
s:option(Flag, "logqueries", "Schreibe Abfragelog").optional = true
|
||||
s:option(Flag, "noresolv", "Ignoriere Resolvdatei").optional = true
|
||||
s:option(Value, "dnsforwardmax", "gleichzeitige Abfragen").optional = true
|
||||
s:option(Value, "port", "DNS-Port").optional = true
|
||||
s:option(Value, "ednspacket_max", "max. EDNS.0 Paketgröße").optional = true
|
||||
s:option(Value, "dhcpleasemax", "max. DHCP-Leases").optional = true
|
||||
s:option(Value, "addnhosts", "Zusätzliche Hostdatei").optional = true
|
||||
s:option(Value, "queryport", "Abfrageport").optional = true
|
||||
|
||||
return m
|
|
@ -1,14 +0,0 @@
|
|||
-- ToDo: Translate, Add descriptions
|
||||
m = Map("dropbear", "SSH-Server")
|
||||
|
||||
s = m:section(TypedSection, "dropbear")
|
||||
s.anonymous = true
|
||||
|
||||
port = s:option(Value, "Port", "Port")
|
||||
port.isinteger = true
|
||||
|
||||
pwauth = s:option(Flag, "PasswordAuth", "Passwortanmeldung")
|
||||
pwauth.enabled = 'on'
|
||||
pwauth.disabled = 'off'
|
||||
|
||||
return m
|
|
@ -1,18 +0,0 @@
|
|||
-- ToDo: Translate, Add descriptions
|
||||
m = Map("httpd", "HTTP-Server")
|
||||
|
||||
s = m:section(TypedSection, "httpd")
|
||||
s.anonymous = true
|
||||
|
||||
port = s:option(Value, "port", "Port")
|
||||
port.isinteger = true
|
||||
|
||||
s:option(Value, "home", "Wurzelverzeichnis")
|
||||
|
||||
config = s:option(Value, "c_file", "Konfigurationsdatei", "/etc/httpd.conf wenn leer")
|
||||
config.rmempty = true
|
||||
|
||||
realm = s:option(Value, "realm", "Anmeldeaufforderung")
|
||||
realm.rmempty = true
|
||||
|
||||
return m
|
|
@ -1,82 +0,0 @@
|
|||
-- ToDo: Autodetect things, Translate, Add descriptions
|
||||
require("ffluci.fs")
|
||||
|
||||
m = Map("olsr", "OLSR")
|
||||
|
||||
s = m:section(NamedSection, "general", "olsr", "Allgemeine Einstellungen")
|
||||
|
||||
debug = s:option(ListValue, "DebugLevel", "Debugmodus")
|
||||
for i=0, 9 do
|
||||
debug:value(i)
|
||||
end
|
||||
|
||||
ipv = s:option(ListValue, "IpVersion", "Internet Protokoll")
|
||||
ipv:value("4", "IPv4")
|
||||
ipv:value("6", "IPv6")
|
||||
|
||||
noint = s:option(Flag, "AllowNoInt", "Start ohne Netzwerk")
|
||||
noint.enabled = "yes"
|
||||
noint.disabled = "no"
|
||||
|
||||
s:option(Value, "Pollrate", "Abfragerate (Pollrate)", "s").isnumber = true
|
||||
|
||||
tcr = s:option(ListValue, "TcRedundancy", "TC-Redundanz")
|
||||
tcr:value("0", "MPR-Selektoren")
|
||||
tcr:value("1", "MPR-Selektoren und MPR")
|
||||
tcr:value("2", "Alle Nachbarn")
|
||||
|
||||
s:option(Value, "MprCoverage", "MPR-Erfassung").isinteger = true
|
||||
|
||||
lql = s:option(ListValue, "LinkQualityLevel", "VQ-Level")
|
||||
lql:value("0", "deaktiviert")
|
||||
lql:value("1", "MPR-Auswahl")
|
||||
lql:value("2", "MPR-Auswahl und Routing")
|
||||
|
||||
lqfish = s:option(Flag, "LinkQualityFishEye", "VQ-Fisheye")
|
||||
|
||||
s:option(Value, "LinkQualityWinSize", "VQ-Fenstergröße").isinteger = true
|
||||
|
||||
s:option(Value, "LinkQualityDijkstraLimit", "VQ-Dijkstralimit")
|
||||
|
||||
hyst = s:option(Flag, "UseHysteresis", "Hysterese aktivieren")
|
||||
hyst.enabled = "yes"
|
||||
hyst.disabled = "no"
|
||||
|
||||
|
||||
i = m:section(TypedSection, "Interface", "Schnittstellen")
|
||||
i.anonymous = true
|
||||
i.addremove = true
|
||||
i.dynamic = true
|
||||
|
||||
i:option(Value, "Interface", "Netzwerkschnittstellen")
|
||||
|
||||
i:option(Value, "HelloInterval", "Hello-Intervall").isnumber = true
|
||||
|
||||
i:option(Value, "HelloValidityTime", "Hello-Gültigkeit").isnumber = true
|
||||
|
||||
i:option(Value, "TcInterval", "TC-Intervall").isnumber = true
|
||||
|
||||
i:option(Value, "TcValidityTime", "TC-Gültigkeit").isnumber = true
|
||||
|
||||
i:option(Value, "MidInterval", "MID-Intervall").isnumber = true
|
||||
|
||||
i:option(Value, "MidValidityTime", "MID-Gültigkeit").isnumber = true
|
||||
|
||||
i:option(Value, "HnaInterval", "HNA-Intervall").isnumber = true
|
||||
|
||||
i:option(Value, "HnaValidityTime", "HNA-Gültigkeit").isnumber = true
|
||||
|
||||
|
||||
p = m:section(TypedSection, "LoadPlugin", "Plugins")
|
||||
p.addremove = true
|
||||
p.dynamic = true
|
||||
|
||||
lib = p:option(ListValue, "Library", "Bibliothek")
|
||||
lib:value("")
|
||||
for k, v in pairs(ffluci.fs.dir("/usr/lib")) do
|
||||
if v:sub(1, 6) == "olsrd_" then
|
||||
lib:value(v)
|
||||
end
|
||||
end
|
||||
|
||||
return m
|
|
@ -1,21 +0,0 @@
|
|||
m = Map("fstab", "Einhängepunkte")
|
||||
|
||||
mount = m:section(TypedSection, "mount", "Einhängepunkte")
|
||||
mount.anonymous = true
|
||||
mount.addremove = true
|
||||
|
||||
mount:option(Flag, "enabled", "aktivieren")
|
||||
mount:option(Value, "device", "Gerät")
|
||||
mount:option(Value, "target", "Einhängepunkt")
|
||||
mount:option(Value, "fstype", "Dateisystem")
|
||||
mount:option(Value, "options", "Optionen")
|
||||
|
||||
|
||||
swap = m:section(TypedSection, "swap", "SWAP")
|
||||
swap.anonymous = true
|
||||
swap.addremove = true
|
||||
|
||||
swap:option(Flag, "enabled", "aktivieren")
|
||||
swap:option(Value, "device", "Gerät")
|
||||
|
||||
return m
|
|
@ -1,52 +0,0 @@
|
|||
-- ToDo: Translate, Add descriptions and help texts
|
||||
|
||||
m = Map("wireless", "Geräte")
|
||||
|
||||
s = m:section(TypedSection, "wifi-device")
|
||||
--s.addremove = true
|
||||
|
||||
en = s:option(Flag, "disabled", "Aktivieren")
|
||||
en.enabled = "0"
|
||||
en.disabled = "1"
|
||||
|
||||
t = s:option(ListValue, "type", "Typ")
|
||||
t:value("broadcom")
|
||||
t:value("atheros")
|
||||
t:value("mac80211")
|
||||
t:value("prism2")
|
||||
--[[
|
||||
require("ffluci.sys")
|
||||
local c = ". /etc/functions.sh;for i in /lib/wifi/*;do . $i;done;echo $DRIVERS"
|
||||
for driver in ffluci.sys.execl(c)[1]:gmatch("[^ ]+") do
|
||||
t:value(driver)
|
||||
end
|
||||
]]--
|
||||
|
||||
mode = s:option(ListValue, "mode", "Modus")
|
||||
mode:value("", "standard")
|
||||
mode:value("11b", "802.11b")
|
||||
mode:value("11g", "802.11g")
|
||||
mode:value("11a", "802.11a")
|
||||
mode:value("11bg", "802.11b+g")
|
||||
mode.rmempty = true
|
||||
|
||||
s:option(Value, "channel", "Funkkanal")
|
||||
|
||||
s:option(Value, "txantenna", "Sendeantenne").rmempty = true
|
||||
|
||||
s:option(Value, "rxantenna", "Empfangsantenne").rmempty = true
|
||||
|
||||
s:option(Value, "distance", "Distanz",
|
||||
"Distanz zum am weitesten entfernten Funkpartner (m)").rmempty = true
|
||||
|
||||
s:option(Value, "diversity", "Diversität"):depends("type", "atheros")
|
||||
|
||||
country = s:option(Value, "country", "Ländercode")
|
||||
country.optional = true
|
||||
country:depends("type", "broadcom")
|
||||
|
||||
maxassoc = s:option(Value, "maxassoc", "Verbindungslimit")
|
||||
maxassoc:depends("type", "broadcom")
|
||||
maxassoc.optional = true
|
||||
|
||||
return m
|
|
@ -1,70 +0,0 @@
|
|||
-- ToDo: Translate, Add descriptions and help texts
|
||||
m = Map("wireless", "Netze")
|
||||
|
||||
s = m:section(TypedSection, "wifi-iface")
|
||||
s.addremove = true
|
||||
s.anonymous = true
|
||||
|
||||
s:option(Value, "ssid", "Netzkennung (ESSID)").maxlength = 32
|
||||
|
||||
device = s:option(ListValue, "device", "Gerät")
|
||||
local d = ffluci.model.uci.show("wireless").wireless
|
||||
if d then
|
||||
for k, v in pairs(d) do
|
||||
if v[".type"] == "wifi-device" then
|
||||
device:value(k)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
network = s:option(ListValue, "network", "Netzwerk")
|
||||
network:value("")
|
||||
for k, v in pairs(ffluci.model.uci.show("network").network) do
|
||||
if v[".type"] == "interface" and k ~= "loopback" then
|
||||
network:value(k)
|
||||
end
|
||||
end
|
||||
|
||||
mode = s:option(ListValue, "mode", "Modus")
|
||||
mode:value("ap", "Access Point")
|
||||
mode:value("adhoc", "Ad-Hoc")
|
||||
mode:value("sta", "Client")
|
||||
mode:value("wds", "WDS")
|
||||
|
||||
s:option(Value, "bssid", "BSSID").optional = true
|
||||
|
||||
s:option(Value, "txpower", "Sendeleistung", "dbm").rmempty = true
|
||||
|
||||
encr = s:option(ListValue, "encryption", "Verschlüsselung")
|
||||
encr:value("none", "keine")
|
||||
encr:value("wep", "WEP")
|
||||
encr:value("psk", "WPA-PSK")
|
||||
encr:value("wpa", "WPA-Radius")
|
||||
encr:value("psk2", "WPA2-PSK")
|
||||
encr:value("wpa2", "WPA2-Radius")
|
||||
|
||||
key = s:option(Value, "key", "Schlüssel")
|
||||
key:depends("encryption", "wep")
|
||||
key:depends("encryption", "psk")
|
||||
key:depends("encryption", "wpa")
|
||||
key:depends("encryption", "psk2")
|
||||
key:depends("encryption", "wpa2")
|
||||
key.rmempty = true
|
||||
|
||||
server = s:option(Value, "server", "Radius-Server")
|
||||
server:depends("encryption", "wpa")
|
||||
server:depends("encryption", "wpa2")
|
||||
server.rmempty = true
|
||||
|
||||
port = s:option(Value, "port", "Radius-Port")
|
||||
port:depends("encryption", "wpa")
|
||||
port:depends("encryption", "wpa2")
|
||||
port.rmempty = true
|
||||
|
||||
s:option(Flag, "isolate", "AP-Isolation", "Unterbindet Client-Client-Verkehr").optional = true
|
||||
|
||||
s:option(Flag, "hidden", "ESSID verstecken").optional = true
|
||||
|
||||
|
||||
|
||||
return m
|
|
@ -1,38 +0,0 @@
|
|||
-- General menu definition
|
||||
add("public", "index", "Übersicht", 10)
|
||||
act("contact", "Kontakt")
|
||||
|
||||
|
||||
add("admin", "index", "Übersicht", 10)
|
||||
act("contact", "Kontakt")
|
||||
act("luci", "FFLuCI")
|
||||
|
||||
add("admin", "status", "Status", 20)
|
||||
act("system", "System")
|
||||
|
||||
add("admin", "system", "System", 30)
|
||||
act("packages", "Paketverwaltung")
|
||||
act("passwd", "Passwort ändern")
|
||||
act("sshkeys", "SSH-Schlüssel")
|
||||
act("fstab", "Einhängepunkte")
|
||||
act("upgrade", "Firmwareupgrade")
|
||||
act("reboot", "Neu starten")
|
||||
|
||||
add("admin", "services", "Dienste", 40)
|
||||
act("olsrd", "OLSR")
|
||||
act("httpd", "HTTP-Server")
|
||||
act("dropbear", "SSH-Server")
|
||||
act("dnsmasq", "Dnsmasq")
|
||||
|
||||
add("admin", "network", "Netzwerk", 50)
|
||||
act("vlan", "Switch")
|
||||
act("ifaces", "Schnittstellen")
|
||||
act("dhcp", "DHCP-Server")
|
||||
act("ptp", "PPPoE / PPTP")
|
||||
act("routes", "Statische Routen")
|
||||
act("portfw", "Portweiterleitung")
|
||||
act("firewall", "Firewall")
|
||||
|
||||
add("admin", "wifi", "Drahtlos", 60)
|
||||
act("devices", "Geräte")
|
||||
act("networks", "Netze")
|
|
@ -1,5 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:hello Hallo!%></h1>
|
||||
<p><%:admin1 Dies ist der Administrationsbereich. %>
|
||||
<p><em>ToDo: Intelligenter Einleitungstext</em></p>
|
||||
<%+footer%>
|
|
@ -1,2 +0,0 @@
|
|||
<%+header%>
|
||||
<%+footer%>
|
|
@ -1,2 +0,0 @@
|
|||
<%+header%>
|
||||
<%+footer%>
|
|
@ -1,2 +0,0 @@
|
|||
<%+header%>
|
||||
<%+footer%>
|
|
@ -1,2 +0,0 @@
|
|||
<%+header%>
|
||||
<%+footer%>
|
|
@ -1,2 +0,0 @@
|
|||
<%+header%>
|
||||
<%+footer%>
|
|
@ -1,14 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:texteditor Texteditor%></h1>
|
||||
<form method="post" action="<%=controller%>/admin/system/editor">
|
||||
<div><%:file Datei%>: <input type="text" name="file" size="30" value="<%=(fn or '')%>" />
|
||||
<% if msg then %><span class="error"><%:error Fehler%>: <%=msg%></span><% end %></div>
|
||||
<br />
|
||||
<div><textarea style="width: 100%" rows="20" name="data"><%=(cnt or '')%></textarea></div>
|
||||
<br />
|
||||
<div>
|
||||
<input type="submit" value="<%:save Speichern%>" />
|
||||
<input type="reset" value="<%:reset Zurücksetzen%>" />
|
||||
</div>
|
||||
</form>
|
||||
<%+footer%>
|
|
@ -1,2 +0,0 @@
|
|||
<%+header%>
|
||||
<%+footer%>
|
|
@ -1,23 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:system System%></h1>
|
||||
<h2><%:ipkg IPKG-Konfiguration%></h2>
|
||||
|
||||
<br />
|
||||
|
||||
<div><strong><%:ipkg_pkglists Paketlisten%>:</strong><code>src <em>Name</em> <em>URL</em></code></div>
|
||||
<div><strong><%:ipkg_targets Installationsziele%>:</strong><code>dest <em>Name</em> <em>Pfad</em></code></div>
|
||||
|
||||
<br />
|
||||
|
||||
<form method="post" action="<%=controller%>/admin/system/ipkg">
|
||||
<fieldset class="cbi-section-node">
|
||||
<div><textarea style="width: 100%" rows="10" name="data"><%=(cnt or '')%></textarea></div>
|
||||
<br />
|
||||
<div>
|
||||
<input type="submit" value="<%:save Speichern%>" />
|
||||
<input type="reset" value="<%:reset Zurücksetzen%>" />
|
||||
</div>
|
||||
<% if msg then %><br /><div class="error"><%:error Fehler%>: <%=msg%></div><% end %>
|
||||
</fieldset>
|
||||
</form>
|
||||
<%+footer%>
|
|
@ -1,77 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:system System%></h1>
|
||||
<h2><%:packages Paketverwaltung%></h2>
|
||||
|
||||
<br />
|
||||
|
||||
<% if install or remove or update or upgrade then %>
|
||||
<div class="code"><strong><%:status Status%>:</strong><br />
|
||||
<% if update then %>
|
||||
<%:packages_update Paketlisten aktualisieren%>: <% if update == 0 then %><span class="ok"><%:ok OK%></span><% else %><span class="error"><%:error Fehler%> (<%:code Code%> <%=update%>)</span><% end %><br />
|
||||
<% end %>
|
||||
<% if upgrade then%>
|
||||
<%:packages_upgrade Installierte Pakete aktualisieren%>: <% if upgrade == 0 then %><span class="ok"><%:ok OK%></span><% else %><span class="error"><%:error Fehler%> (<%:code Code%> <%=upgrade%>)</span><% end %><br />
|
||||
<% end %>
|
||||
<% if install then for k,v in pairs(install) do %>
|
||||
<%:packages_install Installation von%> '<%=k%>': <% if v == 0 then %><span class="ok"><%:ok OK%></span><% else %><span class="error"><%:error Fehler%> (<%:code Code%> <%=v%>)</span><% end %><br />
|
||||
<% end end %>
|
||||
<% if remove then for k,v in pairs(remove) do %>
|
||||
<%:packages_remove Deinstallation von%> '<%=k%>': <% if v == 0 then %><span class="ok"><%:ok OK%></span><% else %><span class="error"><%:error Fehler%> (<%:code Code%> <%=v%>)</span><% end %><br />
|
||||
<% end end %>
|
||||
</div>
|
||||
<br />
|
||||
<% end %>
|
||||
|
||||
<div>
|
||||
<a href="<%=controller%>/admin/system/ipkg"><%:packages_ipkg Paketlisten und Installationsziele bearbeiten%></a><br />
|
||||
<a href="<%=controller%>/admin/system/packages?update=1"><%:packages_updatelist Paketlisten aktualisieren%></a><br />
|
||||
<a href="<%=controller%>/admin/system/packages?upgrade=1"><%:packages_upgrade Installierte Pakete aktualisieren%></a>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<form method="post" action="<%=controller%>/admin/system/packages">
|
||||
<div>
|
||||
<span class="bold"><%:packages_installurl Paket herunterladen und installieren%>:</span><br />
|
||||
<input type="text" name="url" size="30" value="" />
|
||||
<input type="submit" name="submit" value="<%:ok OK%>" />
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<div>
|
||||
<span class="bold"><%:filter Filter%>:</span>
|
||||
<input type="text" name="query" size="20" value="<%=(query or '')%>" />
|
||||
<input type="submit" name="search" value="<%:packages_search Paket suchen%>" />
|
||||
<input type="submit" name="submit" value="<%:packages_do Aktionen ausführen%>" />
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<div>
|
||||
<table style="font-size: 0.8em">
|
||||
<tr>
|
||||
<th><%:packages_name Paketname%></th>
|
||||
<th><%:version Version%></th>
|
||||
<th><%:install Installieren%></th>
|
||||
<th><%:delete Löschen%></th>
|
||||
<th><%:descr Beschreibung%></th>
|
||||
</tr>
|
||||
<% for k, pkg in pairs(pkgs) do %>
|
||||
<tr>
|
||||
<td><%=pkg.Package%></td>
|
||||
<td><%=(pkg.Version or '')%></td>
|
||||
<td><% if not pkg.Status or not pkg.Status.installed then %><input type="checkbox" name="install.<%=pkg.Package%>" value="1" /><% else %><%:installed installiert%><% end %></td>
|
||||
<td><% if pkg.Status and pkg.Status.installed then %><input type="checkbox" name="remove.<%=pkg.Package%>" value="1" /><% else %><%:notinstalled nicht installiert%><% end %></td>
|
||||
<td><%=(pkg.Description or '')%></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
</div>
|
||||
<br />
|
||||
<input type="submit" name="submit" value="<%:packages_do Aktionen ausführen%>" />
|
||||
</form>
|
||||
<%+footer%>
|
|
@ -1,34 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:system System%></h1>
|
||||
<h2><%:passwd Passwort ändern%></h2>
|
||||
<div><br />
|
||||
<% if stat then %>
|
||||
<% if stat == 0 then %>
|
||||
<code><%:password_changed Passwort erfolgreich geändert!%></code>
|
||||
<% elseif stat == 10 then %>
|
||||
<code class="error"><%:password_nomatch Passwörter stimmen nicht überein! %></code>
|
||||
<% else %>
|
||||
<code class="error"><%:unknown_error Unbekannter Fehler!%></code>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if not stat or stat == 10 then %>
|
||||
<form method="post" action="<%=controller%>/admin/system/passwd">
|
||||
<fieldset class="cbi-section-node">
|
||||
<div class="cbi-value clear">
|
||||
<div class="cbi-value-title left"><%:password Passwort%></div>
|
||||
<div class="cbi-value-field"><input type="password" name="pwd1" /></div>
|
||||
</div>
|
||||
<div class="cbi-value clear">
|
||||
<div class="cbi-value-title left"><%:confirmation Bestätigung%></div>
|
||||
<div class="cbi-value-field"><input type="password" name="pwd2" /></div>
|
||||
</div>
|
||||
<br />
|
||||
<div>
|
||||
<input type="submit" value="<%:save Speichern%>" />
|
||||
<input type="reset" value="<%:reset Zurücksetzen%>" />
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
<% end %>
|
||||
</div>
|
||||
<%+footer%>
|
|
@ -1,10 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:system System%></h1>
|
||||
<h2><%:reboot Neu starten%></h2>
|
||||
<% if not reboot then %>
|
||||
<p><a href="<%=controller%>/admin/system/reboot?reboot=1"><%:reboot_do Neustart durchführen%></a></p>
|
||||
<% else %>
|
||||
<p><%:reboot_running Bitte warten: Neustart wird durchgeführt...%></p>
|
||||
<script type="text/javascript">setTimeout("location='<%=controller%>/admin'", 30000)</script>
|
||||
<% end %>
|
||||
<%+footer%>
|
|
@ -1,23 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:system System%></h1>
|
||||
<h2><%:sshkeys SSH-Schlüssel%></h2>
|
||||
|
||||
<br />
|
||||
|
||||
<div><%:sshkeys_descr Hier können öffentliche SSH-Schlüssel (einer pro Zeile)
|
||||
zur Authentifizierung abgelegt werden.%></div>
|
||||
|
||||
<br />
|
||||
|
||||
<form method="post" action="<%=controller%>/admin/system/sshkeys">
|
||||
<fieldset class="cbi-section-node">
|
||||
<div><textarea style="width: 100%" rows="10" name="data"><%=(cnt or '')%></textarea></div>
|
||||
<br />
|
||||
<div>
|
||||
<input type="submit" value="<%:save Speichern%>" />
|
||||
<input type="reset" value="<%:reset Zurücksetzen%>" />
|
||||
</div>
|
||||
<% if msg then %><br /><div class="error"><%:error Fehler%>: <%=msg%></div><% end %>
|
||||
</fieldset>
|
||||
</form>
|
||||
<%+footer%>
|
|
@ -1,32 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:system System%></h1>
|
||||
<h2><%:upgrade Upgrade%></h2>
|
||||
<br />
|
||||
<% if sysupgrade and not ret then %>
|
||||
<form method="post" action="<%=controller%>-upload/admin/system/upgrade" enctype="multipart/form-data">
|
||||
<fieldset class="cbi-section-node">
|
||||
<div class="cbi-value clear">
|
||||
<div class="cbi-value-title left"><%:fwimage Firmwareimage%></div>
|
||||
<div class="cbi-value-field"><input type="file" size="30" name="image" /></div>
|
||||
</div>
|
||||
<br />
|
||||
<div class="cbi-value clear">
|
||||
<input type="checkbox" name="keepcfg" value="1" checked="checked" />
|
||||
<span class="bold"><%:keepcfg Konfigurationsdateien übernehmen%></span>
|
||||
</div>
|
||||
<br />
|
||||
<div>
|
||||
<input type="submit" value="<%:fwupgrade Firmware aktualisieren%>" />
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
<% elseif ret then %>
|
||||
<% if ret == 0 then %>
|
||||
<div class="ok"><%:flashed Flashvorgang erfolgreich. Router startet neu...%></div>
|
||||
<% else %>
|
||||
<div class="error"><%:flasherr Flashvorgang fehlgeschlagen!%> (<%:code Code%> <%=ret%>)</div>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<div class="error"><%:notimplemented Diese Funktion steht leider (noch) nicht zur Verfügung.%></div>
|
||||
<% end %>
|
||||
<%+footer%>
|
|
@ -1,6 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:config Konfiguration%></h1>
|
||||
<p><%:uci_applied Die folgenden Änderungen wurden übernommen:%></p>
|
||||
<code><%=(changes or "-")%>
|
||||
<%=output%></code>
|
||||
<%+footer%>
|
|
@ -1,11 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:config Konfiguration%></h1>
|
||||
<h2><%:changes Änderungen%></h2>
|
||||
<code><%=(ffluci.model.uci.changes() or "-")%></code>
|
||||
<form class="inline" method="get" action="<%=controller%>/admin/uci/apply">
|
||||
<input type="submit" value="<%:apply Anwenden%>" />
|
||||
</form>
|
||||
<form class="inline" method="get" action="<%=controller%>/admin/uci/revert">
|
||||
<input type="submit" value="<%:revert Verwerfen%>" />
|
||||
</form>
|
||||
<%+footer%>
|
|
@ -1,5 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:config Konfiguration%></h1>
|
||||
<p><%:uci_reverted Die folgenden Änderungen wurden verworfen:%></p>
|
||||
<code><%=(changes or "-")%></code>
|
||||
<%+footer%>
|
|
@ -1,2 +0,0 @@
|
|||
<%+header%>
|
||||
<%+footer%>
|
|
@ -1,12 +0,0 @@
|
|||
<%+cbi/valueheader%>
|
||||
<% if self.value then
|
||||
if type(self.value) == "function" then %>
|
||||
<%=self:value(section)%>
|
||||
<% else %>
|
||||
<%=self.value%>
|
||||
<% end
|
||||
else %>
|
||||
<%=(self:cfgvalue(section) or "")%>
|
||||
<% end %>
|
||||
|
||||
<%+cbi/valuefooter%>
|
|
@ -1,7 +0,0 @@
|
|||
<div>
|
||||
<input type="submit" value="<%:save Speichern%>" />
|
||||
<input type="reset" value="<%:reset Zurücksetzen%>" />
|
||||
<script type="text/javascript">cbi_d_init();</script>
|
||||
</div>
|
||||
</form>
|
||||
<%+footer%>
|
|
@ -1,3 +0,0 @@
|
|||
<%+cbi/valueheader%>
|
||||
<input onchange="cbi_d_update(this.id)" type="checkbox" id="cbid.<%=self.config.."."..section.."."..self.option%>" name="cbid.<%=self.config.."."..section.."."..self.option%>"<% if self:cfgvalue(section) == self.enabled then %> checked="checked"<% end %> value="1" />
|
||||
<%+cbi/valuefooter%>
|
|
@ -1,7 +0,0 @@
|
|||
<%+header%>
|
||||
<form method="post" action="<%=os.getenv("REQUEST_URI")%>">
|
||||
<div>
|
||||
<script type="text/javascript" src="<%=media%>/cbi.js"></script>
|
||||
<input type="hidden" name="cbi.submit" value="1" />
|
||||
<input type="submit" value="<%:cbi_save Speichern%>" class="hidden" />
|
||||
</div>
|
|
@ -1,16 +0,0 @@
|
|||
<%+cbi/valueheader%>
|
||||
<% if self.widget == "select" then %>
|
||||
<select onchange="cbi_d_update(this.id)" id="cbid.<%=self.config.."."..section.."."..self.option%>" name="cbid.<%=self.config.."."..section.."."..self.option%>"<% if self.size then %> size="<%=self.size%>"<% end %>>
|
||||
<%for i, key in pairs(self.keylist) do%>
|
||||
<option<% if self:cfgvalue(section) == key then %> selected="selected"<% end %> value="<%=key%>"><%=self.vallist[i]%></option>
|
||||
<% end %>
|
||||
</select>
|
||||
<% elseif self.widget == "radio" then
|
||||
local c = 0;
|
||||
for i, key in pairs(self.keylist) do
|
||||
c = c + 1%>
|
||||
<%=self.vallist[i]%><input type="radio" name="cbid.<%=self.config.."."..section.."."..self.option%>"<% if self:cfgvalue(section) == key then %> checked="checked"<% end %> value="<%=key%>" />
|
||||
<% if c == self.size then c = 0 %><br />
|
||||
<% end end %>
|
||||
<% end %>
|
||||
<%+cbi/valuefooter%>
|
|
@ -1,7 +0,0 @@
|
|||
<div class="cbi-map" id="cbi-<%=self.config%>">
|
||||
<h1><%=self.title%></h1>
|
||||
<div class="cbi-map-descr"><%=self.description%></div>
|
||||
<br />
|
||||
<% self:render_children() %>
|
||||
<br />
|
||||
</div>
|
|
@ -1,19 +0,0 @@
|
|||
<%
|
||||
local v = self:valuelist(section)
|
||||
%>
|
||||
<%+cbi/valueheader%>
|
||||
<% if self.widget == "select" then %>
|
||||
<select multiple="multiple" name="cbid.<%=self.config.."."..section.."."..self.option%>[]"<% if self.size then %> size="<%=self.size%>"<% end %>>
|
||||
<%for i, key in pairs(self.keylist) do %>
|
||||
<option<% if ffluci.util.contains(v, key) then %> selected="selected"<% end %> value="<%=key%>"><%=self.vallist[i]%></option>
|
||||
<% end %>
|
||||
</select>
|
||||
<% elseif self.widget == "checkbox" then
|
||||
local c = 0;
|
||||
for i, key in pairs(self.keylist) do
|
||||
c = c + 1%>
|
||||
<%=self.vallist[i]%><input type="checkbox" name="cbid.<%=self.config.."."..section.."."..self.option%>[]"<% if ffluci.util.contains(v, key) then %> checked="checked"<% end %> value="<%=key%>" />
|
||||
<% if c == self.size then c = 0 %><br />
|
||||
<% end end %>
|
||||
<% end %>
|
||||
<%+cbi/valuefooter%>
|
|
@ -1,17 +0,0 @@
|
|||
<% if self:cfgvalue(self.section) then
|
||||
section = self.section %>
|
||||
<div class="cbi-section" id="cbi-<%=self.config%>-<%=section%>">
|
||||
<h2><%=self.title%></h2>
|
||||
<div class="cbi-section-descr"><%=self.description%></div>
|
||||
<% if self.addremove then %><div class="cbi-section-remove">
|
||||
<input type="submit" name="cbi.rns.<%=self.config%>.<%=section%>" value="<%:cbi_del Eintrag entfernen%>" />
|
||||
</div><% end %>
|
||||
<%+cbi/ucisection%>
|
||||
</div>
|
||||
<% elseif self.addremove then %>
|
||||
<div class="cbi-section" id="cbi-<%=self.config%>-<%=self.section%>">
|
||||
<h2><%=self.title%></h2>
|
||||
<div class="cbi-section-descr"><%=self.description%></div>
|
||||
<input type="submit" name="cbi.cns.<%=self.config%>.<%=self.section%>" value="<%:cbi_cns Eintrag anlegen%>" />
|
||||
</div>
|
||||
<% end %>
|
|
@ -1,22 +0,0 @@
|
|||
<div class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>">
|
||||
<h2><%=self.title%></h2>
|
||||
<div class="cbi-section-descr"><%=self.description%></div>
|
||||
<% for k, v in pairs(self:cfgsections()) do%>
|
||||
<% if self.addremove then %><div class="cbi-section-remove right">
|
||||
<input type="submit" name="cbi.rts.<%=self.config%>.<%=k%>" value="<%:cbi_del Eintrag entfernen%>" />
|
||||
</div><% end %>
|
||||
<% if not self.anonymous then %><h3><%=k%></h3><% end %>
|
||||
<% section = k %>
|
||||
<%+cbi/ucisection%>
|
||||
<% end %>
|
||||
<% if self.addremove then %>
|
||||
<div class="cbi-section-create">
|
||||
<% if self.anonymous then %>
|
||||
<input type="submit" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" value="<%:cbi_add Eintrag hinzufügen%>" />
|
||||
<% else %>
|
||||
<input type="text" class="cbi-section-create-name" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" />
|
||||
<input type="submit" value="<%:cbi_add Eintrag hinzufügen%>" />
|
||||
<% end %><% if self.err_invalid then %><div class="cbi-error"><%:cbi_invalid Fehler: Ungültige Eingabe%></div><% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
|
@ -1,23 +0,0 @@
|
|||
<fieldset class="cbi-section-node" id="cbi-<%=self.config%>-<%=section%>">
|
||||
<% self:render_children(section) %>
|
||||
<% if #self.optionals[section] > 0 or self.dynamic then %>
|
||||
<div class="cbi-optionals">
|
||||
<% if self.dynamic then %>
|
||||
<input type="text" name="cbi.opt.<%=self.config%>.<%=section%>" />
|
||||
<% else %>
|
||||
<select name="cbi.opt.<%=self.config%>.<%=section%>">
|
||||
<option><%:cbi_addopt -- Feld --%></option>
|
||||
<% for key, val in pairs(self.optionals[section]) do %>
|
||||
<option id="cbi-<%=self.config.."-"..section.."-"..val.option%>" value="<%=val.option%>"><%=val.title%></option>
|
||||
<% end %>
|
||||
</select>
|
||||
<script type="text/javascript"><% for key, val in pairs(self.optionals[section]) do %>
|
||||
<% if #val.deps > 0 then %><% for j, d in ipairs(val.deps) do %>cbi_d_add("cbi-<%=self.config.."-"..section.."-"..val.option%>", "cbid.<%=self.config.."."..section.."."..d.field%>", "<%=d.value%>");
|
||||
<% end %><% end %>
|
||||
<% end %></script>
|
||||
<% end %>
|
||||
<input type="submit" value="<%:add hinzufügen%>" />
|
||||
</div>
|
||||
<% end %>
|
||||
</fieldset>
|
||||
<br />
|
|
@ -1,3 +0,0 @@
|
|||
<%+cbi/valueheader%>
|
||||
<input type="text" onchange="cbi_d_update(this.id)" <% if self.size then %>size="<%=self.size%>" <% end %><% if self.maxlength then %>maxlength="<%=self.maxlength%>" <% end %>name="cbid.<%=self.config.."."..section.."."..self.option%>" id="cbid.<%=self.config.."."..section.."."..self.option%>" value="<%=(self:cfgvalue(section) or "")%>" />
|
||||
<%+cbi/valuefooter%>
|
|
@ -1,8 +0,0 @@
|
|||
<div class="cbi-value-description inline"><%=self.description%></div>
|
||||
</div>
|
||||
<% if self.tag_invalid[section] then %><div class="cbi-error"><%:cbi_invalid Fehler: Ungültige Eingabe%></div><% end %>
|
||||
</div>
|
||||
<% if #self.deps > 0 then %><script type="text/javascript">
|
||||
<% for j, d in ipairs(self.deps) do %>cbi_d_add("cbi-<%=self.config.."-"..section.."-"..self.option%>", "cbid.<%=self.config.."."..section.."."..d.field%>", "<%=d.value%>");
|
||||
<% end %>
|
||||
</script><% end %>
|
|
@ -1,3 +0,0 @@
|
|||
<div class="cbi-value clear" id="cbi-<%=self.config.."-"..section.."-"..self.option%>">
|
||||
<div class="cbi-value-title left"><%=self.title%></div>
|
||||
<div class="cbi-value-field">
|
|
@ -1,5 +0,0 @@
|
|||
<%+header%>
|
||||
<h1>404 Not Found</h1>
|
||||
<p>Sorry, the object you requested was not found.</p>
|
||||
<tt>Unable to dispatch: <%=os.getenv("PATH_INFO")%></tt>
|
||||
<%+footer%>
|
|
@ -1,5 +0,0 @@
|
|||
<%+header%>
|
||||
<h1>500 Internal Server Error</h1>
|
||||
<p>Sorry, the server encountered an unexpected error.</p>
|
||||
<tt><%=message%></tt>
|
||||
<%+footer%>
|
|
@ -1,7 +0,0 @@
|
|||
</div>
|
||||
<div class="clear"></div>
|
||||
</div></div>
|
||||
|
||||
<div class="separator magenta bold">FFLuCI 0.2 - Freifunk Lua Configuration Interface</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,78 +0,0 @@
|
|||
<%
|
||||
require("ffluci.sys")
|
||||
local load1, load5, load15 = ffluci.sys.loadavg()
|
||||
local req = require("ffluci.dispatcher").request
|
||||
local menu = require("ffluci.menu").get()[req.category]
|
||||
require("ffluci.i18n").loadc("default")
|
||||
require("ffluci.http").htmlheader()
|
||||
%><?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<link rel="stylesheet" type="text/css" href="<%=media%>/cascade.css" />
|
||||
<link rel="stylesheet" type="text/css" href="<%=media%>/css/<%=req.category%>_<%=req.module%>.css" />
|
||||
<meta http-equiv="content-type" content="text/xhtml+xml; charset=utf-8" />
|
||||
<meta http-equiv="content-script-type" content="text/javascript" />
|
||||
<title>FFLuCI</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<div class="headerlogo left"><img src="<%=media%>/logo.png" alt="Freifunk" /></div>
|
||||
<div class="whitetext smalltext right">
|
||||
OpenWRT Kamikaze<br />
|
||||
Freifunk Firmware 2.0-dev<br />
|
||||
<%:load Last%>: <%=load1%> <%=load5%> <%=load15%><br />
|
||||
<%:hostname Hostname%>: <%=ffluci.sys.hostname()%>
|
||||
</div>
|
||||
<div>
|
||||
<span class="headertitle">Freifunk Kamikaze</span><br />
|
||||
<span class="whitetext bold"><%:batmanedition Fledermausedition%></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="separator yellow bold">
|
||||
<%:path Pfad%>: <a href="<%=controller .. "/" .. req.category%>"><%=translate(req.category, req.category)%></a>
|
||||
» <a href="<%=controller .. "/" .. req.category .. "/" .. req.module %>"><%=translate(req.module, req.module)%></a>
|
||||
» <a href="<%=controller .. "/" .. req.category .. "/" .. req.module .. "/" .. req.action %>"><%=translate(req.action, req.action)%></a>
|
||||
</div>
|
||||
|
||||
<div id="columns"><div id="columnswrapper">
|
||||
<div class="sidebar left">
|
||||
<% for k,v in pairs(menu) do %>
|
||||
<div<% if v[".contr"] == req.module then %> class="yellowtext"<% end %>><a href="<%=controller.."/"..req.category.."/"..v[".contr"]%>"><%=translate(v[".contr"], v[".descr"])%></a><%
|
||||
if v[".contr"] == req.module then %>
|
||||
<ul><% for key,val in ipairs(v) do %>
|
||||
<li<% if val.action == req.action then %> class="yellowtext"<% end %>><a href="<%=controller.."/"..req.category.."/"..req.module.."/"..val.action%>"><%=translate(val.action, val.descr)%></a></li>
|
||||
<% end %></ul>
|
||||
<% end %></div>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="sidebar right">
|
||||
<div><%:webif Weboberfläche%>
|
||||
<ul>
|
||||
<li<% if "public" == req.category then %> class="yellowtext"<% end %>><a href="<%=controller%>/public"><%:public Öffentlich%></a></li>
|
||||
<li<% if "admin" == req.category then %> class="yellowtext"<% end %>><a href="<%=controller%>/admin"><%:admin Verwaltung%></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<%
|
||||
if "admin" == req.category then
|
||||
require("ffluci.model.uci")
|
||||
local ucic = ffluci.model.uci.changes()
|
||||
if ucic then
|
||||
ucic = #ffluci.util.split(ucic)
|
||||
end
|
||||
%>
|
||||
<div><%:config Konfiguration%>
|
||||
<ul>
|
||||
<% if ucic then %>
|
||||
<li><a href="<%=controller%>/admin/uci/changes"><%:changes Änderungen:%> <%=ucic%></a></li>
|
||||
<li><a href="<%=controller%>/admin/uci/apply"><%:apply Anwenden%></a></li>
|
||||
<li><a href="<%=controller%>/admin/uci/revert"><%:revert Verwerfen%></a></li>
|
||||
<% else %>
|
||||
<li><%:changes Änderungen: %> 0</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<div id="content">
|
|
@ -1,12 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:contact Kontakt%></h1>
|
||||
<table class="contact">
|
||||
<tr><th><%:nickname Pseudonym%>:</th><td><%~luci.contact.nickname%></td></tr>
|
||||
<tr><th><%:name Name%>:</th><td><%~luci.contact.name%></td></tr>
|
||||
<tr><th><%:mail E-Mail%>:</th><td><%~luci.contact.mail%></td></tr>
|
||||
<tr><th><%:phone Telefon%>:</th><td><%~luci.contact.phone%></td></tr>
|
||||
<tr><th><%:location Standort%>:</th><td><%~luci.contact.location%></td></tr>
|
||||
<tr><th><%:geocoord Geokoordinaten%>:</th><td><%~luci.contact.geo%></td></tr>
|
||||
<tr><th><%:note Notiz%>:</th><td><%~luci.contact.note%></td></tr>
|
||||
</table>
|
||||
<%+footer%>
|
|
@ -1,5 +0,0 @@
|
|||
<%+header%>
|
||||
<h1><%:hello Hallo!%></h1>
|
||||
<p><%:admin1 Dies ist der Administrationsbereich. %>
|
||||
<p><em>ToDo: Intelligenter Einleitungstext</em></p>
|
||||
<%+footer%>
|
Loading…
Reference in a new issue