diff options
Diffstat (limited to 'modules/luci-mod-admin-full')
42 files changed, 732 insertions, 513 deletions
diff --git a/modules/luci-mod-admin-full/Makefile b/modules/luci-mod-admin-full/Makefile index 66c78e28a9..5fed2797ec 100644 --- a/modules/luci-mod-admin-full/Makefile +++ b/modules/luci-mod-admin-full/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Administration - full-featured for full control -LUCI_DEPENDS:=+luci-base +libubus-lua +LUCI_DEPENDS:=+luci-base PKG_BUILD_DEPENDS:=iwinfo diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua index d00d546b64..cc8c2e3ae6 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua @@ -33,12 +33,10 @@ function action_logout() if sid then utl.ubus("session", "destroy", { ubus_rpc_session = sid }) - dsp.context.urltoken.stok = nil - luci.http.header("Set-Cookie", "sysauth=%s; expires=%s; path=%s/" %{ sid, 'Thu, 01 Jan 1970 01:00:00 GMT', dsp.build_url() }) end - luci.http.redirect(luci.dispatcher.build_url()) + luci.http.redirect(dsp.build_url()) end diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua index 6e578e013c..aa533cb70b 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua @@ -1,5 +1,5 @@ -- Copyright 2008 Steven Barth <steven@midlink.org> --- Copyright 2011 Jo-Philipp Wich <jow@openwrt.org> +-- Copyright 2011-2015 Jo-Philipp Wich <jow@openwrt.org> -- Licensed to the public under the Apache License 2.0. module("luci.controller.admin.network", package.seeall) @@ -43,22 +43,22 @@ function index() end) if has_wifi then - page = entry({"admin", "network", "wireless_join"}, call("wifi_join"), nil) + page = entry({"admin", "network", "wireless_join"}, post("wifi_join"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_add"}, call("wifi_add"), nil) + page = entry({"admin", "network", "wireless_add"}, post("wifi_add"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_delete"}, call("wifi_delete"), nil) + page = entry({"admin", "network", "wireless_delete"}, post("wifi_delete"), nil) page.leaf = true page = entry({"admin", "network", "wireless_status"}, call("wifi_status"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_reconnect"}, call("wifi_reconnect"), nil) + page = entry({"admin", "network", "wireless_reconnect"}, post("wifi_reconnect"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_shutdown"}, call("wifi_shutdown"), nil) + page = entry({"admin", "network", "wireless_shutdown"}, post("wifi_shutdown"), nil) page.leaf = true page = entry({"admin", "network", "wireless"}, arcombine(template("admin_network/wifi_overview"), cbi("admin_network/wifi")), _("Wifi"), 15) @@ -85,16 +85,16 @@ function index() page = entry({"admin", "network", "iface_add"}, cbi("admin_network/iface_add"), nil) page.leaf = true - page = entry({"admin", "network", "iface_delete"}, call("iface_delete"), nil) + page = entry({"admin", "network", "iface_delete"}, post("iface_delete"), nil) page.leaf = true page = entry({"admin", "network", "iface_status"}, call("iface_status"), nil) page.leaf = true - page = entry({"admin", "network", "iface_reconnect"}, call("iface_reconnect"), nil) + page = entry({"admin", "network", "iface_reconnect"}, post("iface_reconnect"), nil) page.leaf = true - page = entry({"admin", "network", "iface_shutdown"}, call("iface_shutdown"), nil) + page = entry({"admin", "network", "iface_shutdown"}, post("iface_shutdown"), nil) page.leaf = true page = entry({"admin", "network", "network"}, arcombine(cbi("admin_network/network"), cbi("admin_network/ifaces")), _("Interfaces"), 10) @@ -138,44 +138,33 @@ function index() page.title = _("Diagnostics") page.order = 60 - page = entry({"admin", "network", "diag_ping"}, call("diag_ping"), nil) + page = entry({"admin", "network", "diag_ping"}, post("diag_ping"), nil) page.leaf = true - page = entry({"admin", "network", "diag_nslookup"}, call("diag_nslookup"), nil) + page = entry({"admin", "network", "diag_nslookup"}, post("diag_nslookup"), nil) page.leaf = true - page = entry({"admin", "network", "diag_traceroute"}, call("diag_traceroute"), nil) + page = entry({"admin", "network", "diag_traceroute"}, post("diag_traceroute"), nil) page.leaf = true - page = entry({"admin", "network", "diag_ping6"}, call("diag_ping6"), nil) + page = entry({"admin", "network", "diag_ping6"}, post("diag_ping6"), nil) page.leaf = true - page = entry({"admin", "network", "diag_traceroute6"}, call("diag_traceroute6"), nil) + page = entry({"admin", "network", "diag_traceroute6"}, post("diag_traceroute6"), nil) page.leaf = true -- end end function wifi_join() - local function param(x) - return luci.http.formvalue(x) - end - - local function ptable(x) - x = param(x) - return x and (type(x) ~= "table" and { x } or x) or {} - end - - local dev = param("device") - local ssid = param("join") + local tpl = require "luci.template" + local http = require "luci.http" + local dev = http.formvalue("device") + local ssid = http.formvalue("join") if dev and ssid then - local cancel = (param("cancel") or param("cbi.cancel")) and true or false - - if cancel then - luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless_join?device=" .. dev)) - else + local cancel = (http.formvalue("cancel") or http.formvalue("cbi.cancel")) + if not cancel then local cbi = require "luci.cbi" - local tpl = require "luci.template" local map = luci.cbi.load("admin_network/wifi_add")[1] if map:parse() ~= cbi.FORM_DONE then @@ -183,10 +172,12 @@ function wifi_join() map:render() tpl.render("footer") end + + return end - else - luci.template.render("admin_network/wifi_join") end + + tpl.render("admin_network/wifi_join") end function wifi_add() @@ -244,6 +235,8 @@ function iface_status(ifaces) proto = net:proto(), uptime = net:uptime(), gwaddr = net:gwaddr(), + ipaddrs = net:ipaddrs(), + ip6addrs = net:ip6addrs(), dnsaddrs = net:dnsaddrs(), name = device:shortname(), type = device:type(), @@ -255,29 +248,9 @@ function iface_status(ifaces) rx_packets = device:rx_packets(), tx_packets = device:tx_packets(), - ipaddrs = { }, - ip6addrs = { }, subdevices = { } } - local _, a - for _, a in ipairs(device:ipaddrs()) do - data.ipaddrs[#data.ipaddrs+1] = { - addr = a:host():string(), - netmask = a:mask():string(), - prefix = a:prefix() - } - end - for _, a in ipairs(device:ip6addrs()) do - if not a:is6linklocal() then - data.ip6addrs[#data.ip6addrs+1] = { - addr = a:host():string(), - netmask = a:mask():string(), - prefix = a:prefix() - } - end - end - for _, device in ipairs(net:get_interfaces() or {}) do data.subdevices[#data.subdevices+1] = { name = device:shortname(), diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua index 1ceb24d16a..24db1e4ff5 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua @@ -7,7 +7,10 @@ module("luci.controller.admin.status", package.seeall) function index() entry({"admin", "status"}, alias("admin", "status", "overview"), _("Status"), 20).index = true entry({"admin", "status", "overview"}, template("admin_status/index"), _("Overview"), 1) - entry({"admin", "status", "iptables"}, call("action_iptables"), _("Firewall"), 2).leaf = true + + entry({"admin", "status", "iptables"}, template("admin_status/iptables"), _("Firewall"), 2).leaf = true + entry({"admin", "status", "iptables_action"}, post("action_iptables")).leaf = true + entry({"admin", "status", "routes"}, template("admin_status/routes"), _("Routes"), 3) entry({"admin", "status", "syslog"}, call("action_syslog"), _("System Log"), 4) entry({"admin", "status", "dmesg"}, call("action_dmesg"), _("Kernel Log"), 5) @@ -42,22 +45,16 @@ end function action_iptables() if luci.http.formvalue("zero") then - if luci.http.formvalue("zero") == "6" then - luci.util.exec("ip6tables -Z") + if luci.http.formvalue("family") == "6" then + luci.util.exec("/usr/sbin/ip6tables -Z") else - luci.util.exec("iptables -Z") + luci.util.exec("/usr/sbin/iptables -Z") end - luci.http.redirect( - luci.dispatcher.build_url("admin", "status", "iptables") - ) - elseif luci.http.formvalue("restart") == "1" then + elseif luci.http.formvalue("restart") then luci.util.exec("/etc/init.d/firewall restart") - luci.http.redirect( - luci.dispatcher.build_url("admin", "status", "iptables") - ) - else - luci.template.render("admin_status/iptables") end + + luci.http.redirect(luci.dispatcher.build_url("admin/status/iptables")) end function action_bandwidth(iface) diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua index 1b38c6783c..cbba48cc25 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua @@ -9,12 +9,12 @@ function index() entry({"admin", "system"}, alias("admin", "system", "system"), _("System"), 30).index = true entry({"admin", "system", "system"}, cbi("admin_system/system"), _("System"), 1) - entry({"admin", "system", "clock_status"}, call("action_clock_status")) + entry({"admin", "system", "clock_status"}, post_on({ set = true }, "action_clock_status")) entry({"admin", "system", "admin"}, cbi("admin_system/admin"), _("Administration"), 2) if fs.access("/bin/opkg") then - entry({"admin", "system", "packages"}, call("action_packages"), _("Software"), 10) + entry({"admin", "system", "packages"}, post_on({ exec = "1" }, "action_packages"), _("Software"), 10) entry({"admin", "system", "packages", "ipkg"}, form("admin_system/ipkg")) end @@ -32,9 +32,16 @@ function index() end entry({"admin", "system", "flashops"}, call("action_flashops"), _("Backup / Flash Firmware"), 70) + entry({"admin", "system", "flashops", "reset"}, post("action_reset")) + entry({"admin", "system", "flashops", "backup"}, post("action_backup")) entry({"admin", "system", "flashops", "backupfiles"}, form("admin_system/backupfiles")) - entry({"admin", "system", "reboot"}, call("action_reboot"), _("Reboot"), 90) + -- call() instead of post() due to upload handling! + entry({"admin", "system", "flashops", "restore"}, call("action_restore")) + entry({"admin", "system", "flashops", "sysupgrade"}, call("action_sysupgrade")) + + entry({"admin", "system", "reboot"}, template("admin_system/reboot"), _("Reboot"), 90) + entry({"admin", "system", "reboot", "call"}, post("action_reboot")) end function action_clock_status() @@ -55,7 +62,8 @@ end function action_packages() local fs = require "nixio.fs" local ipkg = require "luci.model.ipkg" - local submit = luci.http.formvalue("submit") + local submit = (luci.http.formvalue("exec") == "1") + local update, upgrade local changes = false local install = { } local remove = { } @@ -75,59 +83,62 @@ function action_packages() query = (query ~= '') and query or nil - -- Packets to be installed - local ninst = submit and luci.http.formvalue("install") - local uinst = nil - - -- Install from URL - local url = luci.http.formvalue("url") - if url and url ~= '' and submit then - uinst = url - end + -- Modifying actions + if submit then + -- Packets to be installed + local ninst = luci.http.formvalue("install") + local uinst = nil - -- Do install - if ninst then - install[ninst], out, err = ipkg.install(ninst) - stdout[#stdout+1] = out - stderr[#stderr+1] = err - changes = true - end + -- Install from URL + local url = luci.http.formvalue("url") + if url and url ~= '' then + uinst = url + end - if uinst then - local pkg - for pkg in luci.util.imatch(uinst) do - install[uinst], out, err = ipkg.install(pkg) + -- Do install + if ninst then + install[ninst], out, err = ipkg.install(ninst) stdout[#stdout+1] = out stderr[#stderr+1] = err changes = true end - end - -- Remove packets - local rem = submit and luci.http.formvalue("remove") - if rem then - remove[rem], out, err = ipkg.remove(rem) - stdout[#stdout+1] = out - stderr[#stderr+1] = err - changes = true - end + if uinst then + local pkg + for pkg in luci.util.imatch(uinst) do + install[uinst], out, err = ipkg.install(pkg) + stdout[#stdout+1] = out + stderr[#stderr+1] = err + changes = true + end + end + -- Remove packets + local rem = luci.http.formvalue("remove") + if rem then + remove[rem], out, err = ipkg.remove(rem) + stdout[#stdout+1] = out + stderr[#stderr+1] = err + changes = true + end - -- Update all packets - local update = luci.http.formvalue("update") - if update then - update, out, err = ipkg.update() - stdout[#stdout+1] = out - stderr[#stderr+1] = err - end + + -- Update all packets + update = luci.http.formvalue("update") + if update then + update, out, err = ipkg.update() + stdout[#stdout+1] = out + stderr[#stderr+1] = err + end - -- Upgrade all packets - local upgrade = luci.http.formvalue("upgrade") - if upgrade then - upgrade, out, err = ipkg.upgrade() - stdout[#stdout+1] = out - stderr[#stderr+1] = err + -- Upgrade all packets + upgrade = luci.http.formvalue("upgrade") + if upgrade then + upgrade, out, err = ipkg.upgrade() + stdout[#stdout+1] = out + stderr[#stderr+1] = err + end end @@ -166,137 +177,185 @@ function action_packages() end end -function action_flashops() - local sys = require "luci.sys" - local fs = require "nixio.fs" - - local upgrade_avail = fs.access("/lib/upgrade/platform.sh") - local reset_avail = os.execute([[grep '"rootfs_data"' /proc/mtd >/dev/null 2>&1]]) == 0 +local function image_supported(image) + return (os.execute("sysupgrade -T %q >/dev/null" % image) == 0) +end - local restore_cmd = "tar -xzC/ >/dev/null 2>&1" - local backup_cmd = "sysupgrade --create-backup - 2>/dev/null" - local image_tmp = "/tmp/firmware.img" +local function image_checksum(image) + return (luci.sys.exec("md5sum %q" % image):match("^([^%s]+)")) +end - local function image_supported() - return (os.execute("sysupgrade -T %q >/dev/null" % image_tmp) == 0) - end +local function supports_sysupgrade() + return nixio.fs.access("/lib/upgrade/platform.sh") +end - local function image_checksum() - return (luci.sys.exec("md5sum %q" % image_tmp):match("^([^%s]+)")) - end +local function supports_reset() + return (os.execute([[grep -sq '"rootfs_data"' /proc/mtd]]) == 0) +end - local function storage_size() - local size = 0 - if fs.access("/proc/mtd") then - for l in io.lines("/proc/mtd") do - local d, s, e, n = l:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+"([^%s]+)"') - if n == "linux" or n == "firmware" then - size = tonumber(s, 16) - break - end +local function storage_size() + local size = 0 + if nixio.fs.access("/proc/mtd") then + for l in io.lines("/proc/mtd") do + local d, s, e, n = l:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+"([^%s]+)"') + if n == "linux" or n == "firmware" then + size = tonumber(s, 16) + break end - elseif fs.access("/proc/partitions") then - for l in io.lines("/proc/partitions") do - local x, y, b, n = l:match('^%s*(%d+)%s+(%d+)%s+([^%s]+)%s+([^%s]+)') - if b and n and not n:match('[0-9]') then - size = tonumber(b) * 1024 - break - end + end + elseif nixio.fs.access("/proc/partitions") then + for l in io.lines("/proc/partitions") do + local x, y, b, n = l:match('^%s*(%d+)%s+(%d+)%s+([^%s]+)%s+([^%s]+)') + if b and n and not n:match('[0-9]') then + size = tonumber(b) * 1024 + break end end - return size end + return size +end + + +function action_flashops() + -- + -- Overview + -- + luci.template.render("admin_system/flashops", { + reset_avail = supports_reset(), + upgrade_avail = supports_sysupgrade() + }) +end +function action_sysupgrade() + local fs = require "nixio.fs" + local http = require "luci.http" + local image_tmp = "/tmp/firmware.img" local fp - luci.http.setfilehandler( + http.setfilehandler( function(meta, chunk, eof) - if not fp then - if meta and meta.name == "image" then - fp = io.open(image_tmp, "w") - else - fp = io.popen(restore_cmd, "w") - end + if not fp and meta and meta.name == "image" then + fp = io.open(image_tmp, "w") end - if chunk then + if fp and chunk then fp:write(chunk) end - if eof then + if fp and eof then fp:close() end end ) - if luci.http.formvalue("backup") then - -- - -- Assemble file list, generate backup - -- - local reader = ltn12_popen(backup_cmd) - luci.http.header('Content-Disposition', 'attachment; filename="backup-%s-%s.tar.gz"' % { - luci.sys.hostname(), os.date("%Y-%m-%d")}) - luci.http.prepare_content("application/x-targz") - luci.ltn12.pump.all(reader, luci.http.write) - elseif luci.http.formvalue("restore") then - -- - -- Unpack received .tar.gz - -- - local upload = luci.http.formvalue("archive") - if upload and #upload > 0 then - luci.template.render("admin_system/applyreboot") - luci.sys.reboot() + if not luci.dispatcher.test_post_security() then + fs.unlink(image_tmp) + return + end + + -- + -- Cancel firmware flash + -- + if http.formvalue("cancel") then + fs.unlink(image_tmp) + http.redirect(luci.dispatcher.build_url('admin/system/flashops')) + return + end + + -- + -- Initiate firmware flash + -- + local step = tonumber(http.formvalue("step") or 1) + if step == 1 then + if image_supported(image_tmp) then + luci.template.render("admin_system/upgrade", { + checksum = image_checksum(image_tmp), + storage = storage_size(), + size = (fs.stat(image_tmp, "size") or 0), + keep = (not not http.formvalue("keep")) + }) + else + fs.unlink(image_tmp) + luci.template.render("admin_system/flashops", { + reset_avail = supports_reset(), + upgrade_avail = supports_sysupgrade(), + image_invalid = true + }) end - elseif luci.http.formvalue("image") or luci.http.formvalue("step") then - -- - -- Initiate firmware flash - -- - local step = tonumber(luci.http.formvalue("step") or 1) - if step == 1 then - if image_supported() then - luci.template.render("admin_system/upgrade", { - checksum = image_checksum(), - storage = storage_size(), - size = (fs.stat(image_tmp, "size") or 0), - keep = (not not luci.http.formvalue("keep")) - }) - else - fs.unlink(image_tmp) - luci.template.render("admin_system/flashops", { - reset_avail = reset_avail, - upgrade_avail = upgrade_avail, - image_invalid = true - }) + -- + -- Start sysupgrade flash + -- + elseif step == 2 then + local keep = (http.formvalue("keep") == "1") and "" or "-n" + luci.template.render("admin_system/applyreboot", { + title = luci.i18n.translate("Flashing..."), + msg = luci.i18n.translate("The system is flashing now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."), + addr = (#keep > 0) and "192.168.1.1" or nil + }) + fork_exec("killall dropbear uhttpd; sleep 1; /sbin/sysupgrade %s %q" %{ keep, image_tmp }) + end +end + +function action_backup() + local reader = ltn12_popen("sysupgrade --create-backup - 2>/dev/null") + + luci.http.header( + 'Content-Disposition', 'attachment; filename="backup-%s-%s.tar.gz"' %{ + luci.sys.hostname(), + os.date("%Y-%m-%d") + }) + + luci.http.prepare_content("application/x-targz") + luci.ltn12.pump.all(reader, luci.http.write) +end + +function action_restore() + local fs = require "nixio.fs" + local http = require "luci.http" + local archive_tmp = "/tmp/restore.tar.gz" + + local fp + http.setfilehandler( + function(meta, chunk, eof) + if not fp and meta and meta.name == "archive" then + fp = io.open(archive_tmp, "w") + end + if fp and chunk then + fp:write(chunk) + end + if fp and eof then + fp:close() end - -- - -- Start sysupgrade flash - -- - elseif step == 2 then - local keep = (luci.http.formvalue("keep") == "1") and "" or "-n" - luci.template.render("admin_system/applyreboot", { - title = luci.i18n.translate("Flashing..."), - msg = luci.i18n.translate("The system is flashing now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."), - addr = (#keep > 0) and "192.168.1.1" or nil - }) - fork_exec("killall dropbear uhttpd; sleep 1; /sbin/sysupgrade %s %q" %{ keep, image_tmp }) end - elseif reset_avail and luci.http.formvalue("reset") then - -- - -- Reset system - -- + ) + + if not luci.dispatcher.test_post_security() then + fs.unlink(archive_tmp) + return + end + + local upload = http.formvalue("archive") + if upload and #upload > 0 then + luci.template.render("admin_system/applyreboot") + os.execute("tar -C / -xzf %q >/dev/null 2>&1" % archive_tmp) + luci.sys.reboot() + return + end + + http.redirect(luci.dispatcher.build_url('admin/system/flashops')) +end + +function action_reset() + if supports_reset() then luci.template.render("admin_system/applyreboot", { title = luci.i18n.translate("Erasing..."), msg = luci.i18n.translate("The system is erasing the configuration partition now and will reboot itself when finished."), addr = "192.168.1.1" }) + fork_exec("killall dropbear uhttpd; sleep 1; mtd -r erase rootfs_data") - else - -- - -- Overview - -- - luci.template.render("admin_system/flashops", { - reset_avail = reset_avail, - upgrade_avail = upgrade_avail - }) + return end + + http.redirect(luci.dispatcher.build_url('admin/system/flashops')) end function action_passwd() @@ -316,11 +375,7 @@ function action_passwd() end function action_reboot() - local reboot = luci.http.formvalue("reboot") - luci.template.render("admin_system/reboot", {reboot=reboot}) - if reboot then - luci.sys.reboot() - end + luci.sys.reboot() end function fork_exec(command) diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua index 6de3c73a3c..9c33d9c18b 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua @@ -1,5 +1,5 @@ -- Copyright 2008 Steven Barth <steven@midlink.org> --- Copyright 2010 Jo-Philipp Wich <jow@openwrt.org> +-- Copyright 2010-2015 Jo-Philipp Wich <jow@openwrt.org> -- Licensed to the public under the Apache License 2.0. module("luci.controller.admin.uci", package.seeall) @@ -10,9 +10,9 @@ function index() entry({"admin", "uci"}, nil, _("Configuration")) entry({"admin", "uci", "changes"}, call("action_changes"), _("Changes"), 40).query = {redir=redir} - entry({"admin", "uci", "revert"}, call("action_revert"), _("Revert"), 30).query = {redir=redir} - entry({"admin", "uci", "apply"}, call("action_apply"), _("Apply"), 20).query = {redir=redir} - entry({"admin", "uci", "saveapply"}, call("action_apply"), _("Save & Apply"), 10).query = {redir=redir} + entry({"admin", "uci", "revert"}, post("action_revert"), _("Revert"), 30).query = {redir=redir} + entry({"admin", "uci", "apply"}, post("action_apply"), _("Apply"), 20).query = {redir=redir} + entry({"admin", "uci", "saveapply"}, post("action_apply"), _("Save & Apply"), 10).query = {redir=redir} end function action_changes() diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua index 49103a8113..572446feff 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua @@ -51,13 +51,10 @@ rf.optional = true s:taboption("files", Flag, "nohosts", - translate("Ignore Hosts files")).optional = true + translate("Ignore <code>/etc/hosts</code>")).optional = true -hf = s:taboption("files", DynamicList, "addnhosts", - translate("Additional Hosts files")) - -hf:depends("nohosts", "") -hf.optional = true +s:taboption("files", DynamicList, "addnhosts", + translate("Additional Hosts files")).optional = true s:taboption("advanced", Flag, "boguspriv", @@ -138,7 +135,7 @@ rd = s:taboption("general", DynamicList, "rebind_domain", translate("List of domains to allow RFC1918 responses for")) rd:depends("rebind_protection", "1") -rd.datatype = "host" +rd.datatype = "host(1)" rd.placeholder = "ihost.netflix.com" diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua index da1e140de0..e48e3b4bdf 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua @@ -17,7 +17,12 @@ newnet = m:field(Value, "_netname", translate("Name of the new interface"), newnet:depends("_attach", "") newnet.default = arg[1] and "net_" .. arg[1]:gsub("[^%w_]+", "_") -newnet.datatype = "uciname" +newnet.datatype = "and(uciname,maxlength(15))" + +advice = m:field(DummyValue, "d1", translate("Note: interface name length"), + translate("Maximum length of the name is 15 characters including " .. + "the automatic protocol/bridge prefix (br-, 6in4-, pppoe- etc.)" + )) newproto = m:field(ListValue, "_netproto", translate("Protocol of the new interface")) diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua index 40f8014f1a..ce3c3ef325 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua @@ -107,6 +107,12 @@ m.uci:foreach("network", "switch", local sp = s:option(ListValue, "mirror_source_port", translate("Mirror source port")) local mp = s:option(ListValue, "mirror_monitor_port", translate("Mirror monitor port")) + sp:depends("enable_mirror_tx", "1") + sp:depends("enable_mirror_rx", "1") + + mp:depends("enable_mirror_tx", "1") + mp:depends("enable_mirror_rx", "1") + local pt for pt = 0, num_ports - 1 do local name diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua index 9a2bd5d201..44528927e7 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua @@ -361,7 +361,8 @@ s:tab("encryption", translate("Wireless Security")) s:tab("macfilter", translate("MAC-Filter")) s:tab("advanced", translate("Advanced Settings")) -s:taboption("general", Value, "ssid", translate("<abbr title=\"Extended Service Set Identifier\">ESSID</abbr>")) +ssid = s:taboption("general", Value, "ssid", translate("<abbr title=\"Extended Service Set Identifier\">ESSID</abbr>")) +ssid.datatype = "maxlength(32)" mode = s:taboption("general", ListValue, "mode", translate("Mode")) mode.override_values = true @@ -748,7 +749,7 @@ auth_server:depends({mode="ap", encryption="wpa2"}) auth_server:depends({mode="ap-wds", encryption="wpa"}) auth_server:depends({mode="ap-wds", encryption="wpa2"}) auth_server.rmempty = true -auth_server.datatype = "host" +auth_server.datatype = "host(0)" auth_port = s:taboption("encryption", Value, "auth_port", translate("Radius-Authentication-Port"), translatef("Default %d", 1812)) auth_port:depends({mode="ap", encryption="wpa"}) @@ -772,7 +773,7 @@ acct_server:depends({mode="ap", encryption="wpa2"}) acct_server:depends({mode="ap-wds", encryption="wpa"}) acct_server:depends({mode="ap-wds", encryption="wpa2"}) acct_server.rmempty = true -acct_server.datatype = "host" +acct_server.datatype = "host(0)" acct_port = s:taboption("encryption", Value, "acct_port", translate("Radius-Accounting-Port"), translatef("Default %d", 1813)) acct_port:depends({mode="ap", encryption="wpa"}) diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab.lua index d4e834daff..fd466d5c26 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab.lua @@ -33,12 +33,67 @@ until not ln block:close() - m = Map("fstab", translate("Mount Points")) +s = m:section(TypedSection, "global", translate("Global Settings")) +s.addremove = false +s.anonymous = true + +detect = s:option(Button, "block_detect", translate("Generate Config"), translate("Find all currently attached filesystems and swap and replace configuration with defaults based on what was detected")) +detect.inputstyle = "reload" + +detect.write = function(self, section) + luci.sys.call("block detect >/etc/config/fstab") + luci.http.redirect(luci.dispatcher.build_url("admin/system", "fstab")) +end + +o = s:option(Flag, "anon_swap", translate("Anonymous Swap"), translate("Mount swap not specifically configured")) +o.default = o.disabled +o.rmempty = false + +o = s:option(Flag, "anon_mount", translate("Anonymous Mount"), translate("Mount filesystems not specifically configured")) +o.default = o.disabled +o.rmempty = false + +o = s:option(Flag, "auto_swap", translate("Automount Swap"), translate("Automatically mount swap on hotplug")) +o.default = o.enabled +o.rmempty = false + +o = s:option(Flag, "auto_mount", translate("Automount Filesystem"), translate("Automatically mount filesystems on hotplug")) +o.default = o.enabled +o.rmempty = false + +o = s:option(Flag, "check_fs", translate("Check fileystems before mount"), translate("Automatically check filesystem for errors before mounting")) +o.default = o.disabled +o.rmempty = false local mounts = luci.sys.mounts() +local non_system_mounts = {} +for rawmount, val in pairs(mounts) do + if (string.find(val.mountpoint, "/tmp/.jail") == nil) then + repeat + val.umount = false + if (val.mountpoint == "/") then + break + elseif (val.mountpoint == "/overlay") then + break + elseif (val.mountpoint == "/rom") then + break + elseif (val.mountpoint == "/tmp") then + break + elseif (val.mountpoint == "/tmp/shm") then + break + elseif (val.mountpoint == "/tmp/upgrade") then + break + elseif (val.mountpoint == "/dev") then + break + end + val.umount = true + until true + non_system_mounts[rawmount] = val + end +end -v = m:section(Table, mounts, translate("Mounted file systems")) +v = m:section(Table, non_system_mounts, translate("Mounted file systems")) fs = v:option(DummyValue, "fs", translate("Filesystem")) @@ -61,7 +116,21 @@ function used.cfgvalue(self, section) ) .. ")" end +unmount = v:option(Button, "unmount", translate("Unmount")) +unmount.render = function(self, section, scope) + if non_system_mounts[section].umount then + self.title = translate("Unmount") + self.inputstyle = "remove" + Button.render(self, section, scope) + end +end +unmount.write = function(self, section) + if non_system_mounts[section].umount then + luci.sys.call("/bin/umount '%s'" % luci.util.shellstartsqescape(non_system_mounts[section].mountpoint)) + return luci.http.redirect(luci.dispatcher.build_url("admin/system", "fstab")) + end +end mount = m:section(TypedSection, "mount", translate("Mount Points"), translate("Mount Points define at which point a memory device will be attached to the filesystem")) mount.anonymous = true diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua index 2652e00f25..f5751673fd 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua @@ -112,7 +112,7 @@ o.default = [[ mkdir -p /tmp/extroot mount --bind / /tmp/introot mount /dev/sda1 /tmp/extroot -tar -C /tmp/intproot -cvf - . | tar -C /tmp/extroot -xf - +tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf - umount /tmp/introot umount /tmp/extroot</pre> ]] %{ diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua index 2f3c4927b3..7c6d7e1c66 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua @@ -3,12 +3,15 @@ -- Licensed to the public under the Apache License 2.0. local ipkgfile = "/etc/opkg.conf" +local distfeeds = "/etc/opkg/distfeeds.conf" +local customfeeds = "/etc/opkg/customfeeds.conf" -f = SimpleForm("ipkgconf", translate("OPKG-Configuration")) +f = SimpleForm("ipkgconf", translate("OPKG-Configuration"), translate("General options for opkg")) f:append(Template("admin_system/ipkg")) t = f:field(TextValue, "lines") +t.wrap = "off" t.rows = 10 function t.cfgvalue() return nixio.fs.readfile(ipkgfile) or "" @@ -22,4 +25,40 @@ function f.handle(self, state, data) return true end -return f +g = SimpleForm("distfeedconf", translate("Distribution feeds"), + translate("Build/distribution specific feed definitions. This file will NOT be preserved in any sysupgrade.")) + +d = g:field(TextValue, "lines2") +d.wrap = "off" +d.rows = 10 +function d.cfgvalue() + return nixio.fs.readfile(distfeeds) or "" +end + +function d.write(self, section, data) + return nixio.fs.writefile(distfeeds, data:gsub("\r\n", "\n")) +end + +function g.handle(self, state, data) + return true +end + +h = SimpleForm("customfeedconf", translate("Custom feeds"), + translate("Custom feed definitions, e.g. private feeds. This file can be preserved in a sysupgrade.")) + +c = h:field(TextValue, "lines3") +c.wrap = "off" +c.rows = 10 +function c.cfgvalue() + return nixio.fs.readfile(customfeeds) or "" +end + +function c.write(self, section, data) + return nixio.fs.writefile(customfeeds, data:gsub("\r\n", "\n")) +end + +function h.handle(self, state, data) + return true +end + +return f, g, h diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/system.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/system.lua index 94ba8053ad..2874b5607e 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/system.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/system.lua @@ -204,7 +204,7 @@ if has_ntpd then o = s:option(DynamicList, "server", translate("NTP server candidates")) - o.datatype = "host" + o.datatype = "host(0)" o:depends("enable", "1") -- retain server list even if disabled diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm index 05c866128d..685082a335 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm @@ -34,7 +34,7 @@ local has_traceroute6 = fs.access("/usr/bin/traceroute6") legend.parentNode.style.display = 'block'; legend.style.display = 'inline'; - stxhr.get('<%=luci.dispatcher.build_url("admin", "network")%>/diag_' + tool + protocol + '/' + addr, null, + stxhr.post('<%=url('admin/network')%>/diag_' + tool + protocol + '/' + addr, { token: '<%=token%>' }, function(x) { if (x.responseText) @@ -53,9 +53,9 @@ local has_traceroute6 = fs.access("/usr/bin/traceroute6") } //]]></script> -<form method="post" action="<%=pcdata(luci.http.getenv("REQUEST_URI"))%>"> +<form method="post" action="<%=url('admin/network/diagnostics')%>"> <div class="cbi-map"> - <h2><a id="content" name="content"><%:Diagnostics%></a></h2> + <h2 name="content"><%:Diagnostics%></h2> <fieldset class="cbi-section"> <legend><%:Network Utilities%></legend> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm index 1de349856e..646d931f37 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm @@ -49,7 +49,7 @@ s.innerHTML = '<%:Waiting for changes to be applied...%>'; } - XHR.get('<%=luci.dispatcher.build_url("admin", "network")%>/iface_' + (reconnect ? 'reconnect' : 'shutdown') + '/' + id, null, + (new XHR()).post('<%=url('admin/network')%>/iface_' + (reconnect ? 'reconnect' : 'shutdown') + '/' + id, { token: '<%=token%>' }, function(x) { if (s) @@ -66,12 +66,22 @@ ); } + function iface_delete(id) { + if (!confirm('<%:Really delete this interface? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this interface.%>')) + return; + + (new XHR()).post('<%=url('admin/network/iface_delete')%>/' + id, { token: '<%=token%>' }, + function(x) { + location.href = '<%=url('admin/network/network')%>'; + } + ); + } var iwxhr = new XHR(); var wifidevs = <%=luci.http.write_json(netdevs)%>; var arptable = <%=luci.http.write_json(arpcache)%>; - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "iface_status", table.concat(ifaces, ","))%>', null, + XHR.poll(5, '<%=url('admin/network/iface_status', table.concat(ifaces, ","))%>', null, function(x, ifcs) { if (ifcs) @@ -125,7 +135,7 @@ html += String.format('<strong><%:Uptime%>:</strong> %t<br />', ifc.uptime); } - if (ifc.type != 'tunnel') + if (ifc.macaddr) { html += String.format('<strong><%:MAC-Address%>:</strong> %s<br />', ifc.macaddr); } @@ -139,32 +149,20 @@ if (ifc.ipaddrs && ifc.ipaddrs.length) { - html += '<strong><%:IPv4%>: </strong>'; - for (var i = 0; i < ifc.ipaddrs.length; i++) html += String.format( - '%s%s/%d', - i ? ', ' : '', - ifc.ipaddrs[i].addr, - ifc.ipaddrs[i].prefix + '<strong><%:IPv4%>:</strong> %s<br />', + ifc.ipaddrs[i] ); - - html += '<br />'; } if (ifc.ip6addrs && ifc.ip6addrs.length) { - html += '<strong><%:IPv6%>: </strong>'; - for (var i = 0; i < ifc.ip6addrs.length; i++) html += String.format( - '%s%s/%d', - i ? ', ' : '', - ifc.ip6addrs[i].addr.toUpperCase(), - ifc.ip6addrs[i].prefix + '<strong><%:IPv6%>:</strong> %s<br />', + ifc.ip6addrs[i] ); - - html += '<br />'; } d.innerHTML = html; @@ -178,14 +176,14 @@ d.innerHTML = String.format( '<em><%:Unsupported protocol type.%></em><br />' + '<a href="%h"><%:Install protocol extensions...%></a>', - '<%=luci.dispatcher.build_url("admin/system/packages")%>?query=luci-proto&display=available' + '<%=url("admin/system/packages")%>?query=luci-proto&display=available' ); } else if (d && !ifc.ifname) { d.innerHTML = String.format( '<em><%:Network without interfaces.%></em><br />' + - '<a href="<%=luci.dispatcher.build_url("admin/network/network/%s")%>?tab.network.%s=physical"><%:Assign interfaces...%></a>', + '<a href="<%=url("admin/network/network/%s")%>?tab.network.%s=physical"><%:Assign interfaces...%></a>', ifc.name, ifc.name ); } @@ -239,13 +237,13 @@ <td style="width:420px"> <input type="button" class="cbi-button cbi-button-reload" style="width:100px" onclick="iface_shutdown('<%=net[1]%>', true)" title="<%:Reconnect this interface%>" value="<%:Connect%>" /> <input type="button" class="cbi-button cbi-button-reset" style="width:100px" onclick="iface_shutdown('<%=net[1]%>', false)" title="<%:Shutdown this interface%>" value="<%:Stop%>" /> - <input type="button" class="cbi-button cbi-button-edit" style="width:100px" onclick="location.href='<%=luci.dispatcher.build_url("admin/network/network", net[1])%>'" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit" /> - <input type="button" class="cbi-button cbi-button-remove" style="width:100px" onclick="if (confirm('<%:Really delete this interface? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this interface.%>')) location.href='<%=luci.dispatcher.build_url("admin/network/iface_delete", net[1])%>'" title="<%:Delete this interface%>" value="<%:Delete%>" /> + <input type="button" class="cbi-button cbi-button-edit" style="width:100px" onclick="location.href='<%=url("admin/network/network", net[1])%>'" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit" /> + <input type="button" class="cbi-button cbi-button-remove" style="width:100px" onclick="iface_delete('<%=net[1]%>')" value="<%:Delete%>" /> </td> </tr> <% end %> </table> - <input type="button" class="cbi-button cbi-button-add" value="<%:Add new interface...%>" onclick="location.href='<%=luci.dispatcher.build_url("admin/network/iface_add")%>'" /> + <input type="button" class="cbi-button cbi-button-add" value="<%:Add new interface...%>" onclick="location.href='<%=url("admin/network/iface_add")%>'" /> </fieldset> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm index 8136383969..94d9e88117 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm @@ -1,7 +1,7 @@ <%+cbi/valueheader%> <script type="text/javascript">//<![CDATA[ - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "iface_status", self.network)%>', null, + XHR.poll(5, '<%=url('admin/network/iface_status', self.network)%>', null, function(x, ifc) { if (ifc && (ifc = ifc[0])) @@ -25,7 +25,7 @@ html += String.format('<strong><%:Uptime%>:</strong> %t<br />', ifc.uptime); } - if (ifc.type != 'tunnel') + if (ifc.macaddr) { html += String.format('<strong><%:MAC-Address%>:</strong> %s<br />', ifc.macaddr); } @@ -43,10 +43,9 @@ for (var i = 0; i < ifc.ipaddrs.length; i++) html += String.format( - '%s%s/%d', + '%s%s', i ? ', ' : '', - ifc.ipaddrs[i].addr, - ifc.ipaddrs[i].prefix + ifc.ipaddrs[i] ); html += '<br />'; @@ -58,10 +57,9 @@ for (var i = 0; i < ifc.ip6addrs.length; i++) html += String.format( - '%s%s/%d', + '%s%s', i ? ', ' : '', - ifc.ip6addrs[i].addr.toUpperCase(), - ifc.ip6addrs[i].prefix + ifc.ip6addrs[i].toUpperCase() ); html += '<br />'; diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm index 0ba334ee9d..ab8e732573 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm @@ -1,5 +1,5 @@ <script type="text/javascript">//<![CDATA[ - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "dhcplease_status")%>', null, + XHR.poll(5, '<%=url('admin/network/dhcplease_status')%>', null, function(x, st) { var tb = document.getElementById('lease_status_table'); diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm index b299575e2f..53c35ae59c 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm @@ -1,6 +1,6 @@ <script type="text/javascript">//<![CDATA[ var switches = [ '<%=table.concat(self.switches, "', '")%>' ]; - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "switch_status")%>/' + switches.join(','), null, + XHR.poll(5, '<%=url('admin/network/switch_status')%>/' + switches.join(','), null, function(x, st) { for (var i = 0; i < switches.length; i++) diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm index 90cc4c03e1..3533c6fa4d 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm @@ -1,5 +1,5 @@ <%# - Copyright 2009 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2009-2015 Jo-Philipp Wich <jow@openwrt.org> Licensed to the public under the Apache License 2.0. -%> @@ -87,7 +87,7 @@ <%+header%> -<h2><a id="content" name="content"><%:Join Network: Wireless Scan%></a></h2> +<h2 name="content"><%:Join Network: Wireless Scan%></h2> <div class="cbi-map"> <fieldset class="cbi-section"> @@ -109,7 +109,8 @@ <strong>Encryption:</strong> <%=format_wifi_encryption(net.encryption)%> </td> <td class="cbi-value-field" style="width:40px"> - <form action="<%=REQUEST_URI%>" method="post"> + <form action="<%=url('admin/network/wireless_join')%>" method="post"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>" /> <input type="hidden" name="join" value="<%=utl.pcdata(net.ssid)%>" /> <input type="hidden" name="mode" value="<%=net.mode%>" /> @@ -135,10 +136,11 @@ </fieldset> </div> <div class="cbi-page-actions right"> - <form class="inline" action="<%=luci.dispatcher.build_url("admin/network/wireless")%>" method="get"> + <form class="inline" action="<%=url("admin/network/wireless")%>" method="get"> <input class="cbi-button cbi-button-reset" type="submit" value="<%:Back to overview%>" /> </form> - <form class="inline" action="<%=REQUEST_URI%>" method="get"> + <form class="inline" action="<%=url('admin/network/wireless_join')%>" method="post"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>" /> <input class="cbi-button cbi-input-find" type="submit" value="<%:Repeat scan%>" /> </form> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm index 4fc268e66c..f82d06dcdc 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm @@ -149,7 +149,7 @@ st.innerHTML = '<em><%:Wireless is restarting...%></em>'; } - XHR.get('<%=luci.dispatcher.build_url("admin", "network")%>/wireless_' + (reconnect ? 'reconnect' : 'shutdown') + '/' + id, null, + (new XHR()).post('<%=url('admin/network')%>/wireless_' + (reconnect ? 'reconnect' : 'shutdown') + '/' + id, { token: '<%=token%>' }, function(x) { if (s) @@ -167,7 +167,18 @@ ); } - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "wireless_status", table.concat(netlist, ","))%>', null, + function wifi_delete(id) { + if (!confirm('<%:Really delete this wireless network? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this network.%>')) + return; + + (new XHR()).post('<%=url('admin/network/wireless_delete')%>/' + id, { token: '<%=token%>' }, + function(x) { + location.href = '<%=url('admin/network/wireless')%>'; + } + ); + } + + XHR.poll(5, '<%=url('admin/network/wireless_status', table.concat(netlist, ","))%>', null, function(x, st) { if (st) @@ -348,7 +359,7 @@ ); //]]></script> -<h2><a id="content" name="content"><%:Wireless Overview%></a></h2> +<h2 name="content"><%:Wireless Overview%></h2> <fieldset class="cbi-section" style="display:none"> <legend><%:Reconnecting interface%></legend> @@ -370,8 +381,16 @@ <span id="<%=dev:name()%>-iw-devinfo"></span> </td> <td style="width:310px;text-align:right"> - <input type="button" class="cbi-button cbi-button-find" style="width:100px" onclick="location.href='<%=luci.dispatcher.build_url("admin/network/wireless_join")%>?device=<%=dev:name()%>'" title="<%:Find and join network%>" value="<%:Scan%>" /> - <input type="button" class="cbi-button cbi-button-add" style="width:100px" onclick="location.href='<%=luci.dispatcher.build_url("admin/network/wireless_add")%>?device=<%=dev:name()%>'" title="<%:Provide new network%>" value="<%:Add%>" /> + <form action="<%=url('admin/network/wireless_join')%>" method="post" class="inline"> + <input type="hidden" name="device" value="<%=dev:name()%>" /> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="submit" class="cbi-button cbi-button-find" style="width:100px" title="<%:Find and join network%>" value="<%:Scan%>" /> + </form> + <form action="<%=url('admin/network/wireless_add')%>" method="post" class="inline"> + <input type="hidden" name="device" value="<%=dev:name()%>" /> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="submit" class="cbi-button cbi-button-add" style="width:100px" title="<%:Provide new network%>" value="<%:Add%>" /> + </form> </td> </tr> <!-- /physical device --> @@ -391,7 +410,7 @@ <td class="cbi-value-field" style="width:310px;text-align:right"> <input id="<%=net:id()%>-iw-toggle" type="button" class="cbi-button cbi-button-reload" style="width:100px" onclick="wifi_shutdown('<%=net:id()%>', this)" title="<%:Delete this network%>" value="<%:Enable%>" /> <input type="button" class="cbi-button cbi-button-edit" style="width:100px" onclick="location.href='<%=net:adminlink()%>'" title="<%:Edit this network%>" value="<%:Edit%>" /> - <input type="button" class="cbi-button cbi-button-remove" style="width:100px" onclick="if (confirm('<%:Really delete this wireless network? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this network.%>')) location.href='<%=luci.dispatcher.build_url("admin/network/wireless_delete", net:ifname())%>'" title="<%:Delete this network%>" value="<%:Remove%>" /> + <input type="button" class="cbi-button cbi-button-remove" style="width:100px" onclick="wifi_delete('<%=net:ifname()%>')" title="<%:Delete this network%>" value="<%:Remove%>" /> </td> </tr> <% end %> @@ -410,7 +429,7 @@ <% end %> - <h2><a id="content" name="content"><%:Associated Stations%></a></h2> + <h2><%:Associated Stations%></h2> <fieldset class="cbi-section"> <table class="cbi-section-table" style="margin:10px" id="iw-assoclist"> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm index fa0a97b707..04687f38e7 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm @@ -1,7 +1,7 @@ <%+cbi/valueheader%> <script type="text/javascript">//<![CDATA[ - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "wireless_status", self.ifname)%>', null, + XHR.poll(5, '<%=url('admin/network/wireless_status', self.ifname)%>', null, function(x, iw) { if (iw && (iw = iw[0])) diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm index dbcf06beef..04da3c1239 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm @@ -264,7 +264,7 @@ ); //]]></script> -<h2><a id="content" name="content"><%:Realtime Traffic%></a></h2> +<h2 name="content"><%:Realtime Traffic%></h2> <ul class="cbi-tabmenu"> <% for _, dev in ipairs(devices) do %> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm index 64b950e24b..0b2e52e059 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm @@ -312,7 +312,7 @@ ); //]]></script> -<h2><a id="content" name="content"><%:Realtime Connections%></a></h2> +<h2 name="content"><%:Realtime Connections%></h2> <div class="cbi-map-descr"><%:This page gives an overview over currently active network connections.%></div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm index a63bb71128..c119b57296 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm @@ -5,7 +5,7 @@ -%> <%+header%> -<h2><a id="content" name="content"><%:Kernel Log%></a></h2> +<h2 name="content"><%:Kernel Log%></h2> <div id="content_syslog"> <textarea readonly="readonly" wrap="off" rows="<%=dmesg:cmatch("\n")+2%>" id="syslog"><%=dmesg:pcdata()%></textarea> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm index 07a96b2bf0..62188e45e2 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm @@ -88,7 +88,9 @@ if has_dsl then local dsl_stat = luci.sys.exec("/etc/init.d/dsl_control lucistat") local dsl_func = loadstring(dsl_stat) - rv.dsl = dsl_func() + if dsl_func then + rv.dsl = dsl_func() + end end luci.http.prepare_content("application/json") @@ -550,7 +552,7 @@ ); //]]></script> -<h2><a id="content" name="content"><%:Status%></a></h2> +<h2 name="content"><%:Status%></h2> <fieldset class="cbi-section"> <legend><%:System%></legend> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm index ba2933adef..f49469a599 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm @@ -1,6 +1,6 @@ <%# Copyright 2008-2009 Steven Barth <steven@midlink.org> - Copyright 2008-2011 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org> Licensed to the public under the Apache License 2.0. -%> @@ -37,7 +37,7 @@ local net = wba.iface_get_network(i) if net and i ~= "lo" then return '<a href="%s">%s</a>' %{ - luci.dispatcher.build_url("admin", "network", "network", net), i + url("admin/network/network", net), i } end @@ -59,91 +59,88 @@ } </style> -<h2><a id="content" name="content"><%:Firewall Status%></a></h2> +<h2 name="content"><%:Firewall Status%></h2> +<br /> <% if has_ip6tables then %> <ul class="cbi-tabmenu"> - <li class="cbi-tab<%= mode ~= 4 and "-disabled" %>"><a href="<%=luci.dispatcher.build_url("admin/status/iptables/4")%>"><%:IPv4 Firewall%></a></li> - <li class="cbi-tab<%= mode ~= 6 and "-disabled" %>"><a href="<%=luci.dispatcher.build_url("admin/status/iptables/6")%>"><%:IPv6 Firewall%></a></li> + <li class="cbi-tab<%= mode ~= 4 and "-disabled" %>"><a href="<%=url("admin/status/iptables/4")%>"><%:IPv4 Firewall%></a></li> + <li class="cbi-tab<%= mode ~= 6 and "-disabled" %>"><a href="<%=url("admin/status/iptables/6")%>"><%:IPv6 Firewall%></a></li> </ul> <% end %> -<form method="post" action="<%=REQUEST_URI%>"> - <div class="cbi-map"> - <fieldset class="cbi-section"> - <h3><%:Actions%></h3> - <ul> - <li><a href="<%=REQUEST_URI%>?zero=<%=mode%>"><%:Reset Counters%></a></li> - <li><a href="<%=REQUEST_URI%>?restart=1"><%:Restart Firewall%></a></li> - </ul> - <br /><br /> - - <% for _, tbl in ipairs(tables) do chaincnt = 0 %> - <h3><%:Table%>: <%=tbl%></h3> - <table class="cbi-section-table" style="font-size:90%"> - <% for _, chain in ipairs(ipt:chains(tbl)) do - rowcnt = 0 - chaincnt = chaincnt + 1 - chaininfo = ipt:chain(tbl, chain) - %> - <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> - <th class="cbi-section-table-cell" style="text-align:left" colspan="11"> - <br /><span id="rule_<%=tbl:lower()%>_<%=chain%>"> - <%:Chain%> <em><%=chain%></em> - (<%- if chaininfo.policy then -%> - <%:Policy%>: <em><%=chaininfo.policy%></em>, <%:Packets%>: <%=chaininfo.packets%>, <%:Traffic%>: <%=wba.byte_format(chaininfo.bytes)-%> - <%- else -%> - <%:References%>: <%=chaininfo.references-%> - <%- end -%>)</span> - </th> +<div class="cbi-map" style="position: relative"> + + <form method="post" action="<%=url("admin/status/iptables_action")%>" style="position: absolute; right: 0"> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="hidden" name="family" value="<%=mode%>" /> + <input type="submit" class="cbi-button" name="zero" value="<%:Reset Counters%>" /> + <input type="submit" class="cbi-button" name="restart" value="<%:Restart Firewall%>" /> + </form> + + <fieldset class="cbi-section"> + + <% for _, tbl in ipairs(tables) do chaincnt = 0 %> + <h3><%:Table%>: <%=tbl%></h3> + <table class="cbi-section-table" style="font-size:90%"> + <% for _, chain in ipairs(ipt:chains(tbl)) do + rowcnt = 0 + chaincnt = chaincnt + 1 + chaininfo = ipt:chain(tbl, chain) + %> + <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> + <th class="cbi-section-table-cell" style="text-align:left" colspan="11"> + <br /><span id="rule_<%=tbl:lower()%>_<%=chain%>"> + <%:Chain%> <em><%=chain%></em> + (<%- if chaininfo.policy then -%> + <%:Policy%>: <em><%=chaininfo.policy%></em>, <%:Packets%>: <%=chaininfo.packets%>, <%:Traffic%>: <%=wba.byte_format(chaininfo.bytes)-%> + <%- else -%> + <%:References%>: <%=chaininfo.references-%> + <%- end -%>)</span> + </th> + </tr> + <tr class="cbi-section-table-descr"> + <th class="cbi-section-table-cell"><%:Pkts.%></th> + <th class="cbi-section-table-cell"><%:Traffic%></th> + <th class="cbi-section-table-cell"><%:Target%></th> + <th class="cbi-section-table-cell"><%:Prot.%></th> + <th class="cbi-section-table-cell"><%:In%></th> + <th class="cbi-section-table-cell"><%:Out%></th> + <th class="cbi-section-table-cell"><%:Source%></th> + <th class="cbi-section-table-cell"><%:Destination%></th> + <th class="cbi-section-table-cell" style="width:30%"><%:Options%></th> + </tr> + + <% for _, rule in ipairs(ipt:find({table=tbl, chain=chain})) do %> + <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> + <td><%=rule.packets%></td> + <td style="white-space: nowrap"><%=wba.byte_format(rule.bytes)%></td> + <td><%=rule.target and link_target(tbl, rule.target) or "-"%></td> + <td><%=rule.protocol%></td> + <td><%=link_iface(rule.inputif)%></td> + <td><%=link_iface(rule.outputif)%></td> + <td><%=rule.source%></td> + <td><%=rule.destination%></td> + <td style="width:30%"><small><%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%></small></td> </tr> - <tr class="cbi-section-table-descr"> - <th class="cbi-section-table-cell"><%:Rule #%></th> - <th class="cbi-section-table-cell"><%:Pkts.%></th> - <th class="cbi-section-table-cell"><%:Traffic%></th> - <th class="cbi-section-table-cell"><%:Target%></th> - <th class="cbi-section-table-cell"><%:Prot.%></th> - <th class="cbi-section-table-cell"><%:Flags%></th> - <th class="cbi-section-table-cell"><%:In%></th> - <th class="cbi-section-table-cell"><%:Out%></th> - <th class="cbi-section-table-cell"><%:Source%></th> - <th class="cbi-section-table-cell"><%:Destination%></th> - <th class="cbi-section-table-cell" style="width:30%"><%:Options%></th> - </tr> - - <% for _, rule in ipairs(ipt:find({table=tbl, chain=chain})) do %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> - <td><%=rule.index%></td> - <td><%=rule.packets%></td> - <td><%=wba.byte_format(rule.bytes)%></td> - <td><%=rule.target and link_target(tbl, rule.target) or "-"%></td> - <td><%=rule.protocol%></td> - <td><%=rule.flags%></td> - <td><%=link_iface(rule.inputif)%></td> - <td><%=link_iface(rule.outputif)%></td> - <td><%=rule.source%></td> - <td><%=rule.destination%></td> - <td style="width:30%"><small><%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%></small></td> - </tr> - <% end %> - - <% if rowcnt == 1 then %> - <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> - <td colspan="11"><em><%:No rules in this chain%></em></td> - </tr> - <% end %> <% end %> - <% if chaincnt == 0 then %> + <% if rowcnt == 1 then %> <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> - <td colspan="11"><em><%:No chains in this table%></em></td> + <td colspan="9"><em><%:No rules in this chain%></em></td> </tr> <% end %> - </table> - <br /><br /> - <% end %> - </fieldset> - </div> -</form> + <% end %> + + <% if chaincnt == 0 then %> + <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> + <td colspan="9"><em><%:No chains in this table%></em></td> + </tr> + <% end %> + </table> + <br /><br /> + <% end %> + </fieldset> +</div> <%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm index d095948e50..97a2f5ed59 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm @@ -242,7 +242,7 @@ ); //]]></script> -<h2><a id="content" name="content"><%:Realtime Load%></a></h2> +<h2 name="content"><%:Realtime Load%></h2> <embed id="bwsvg" style="width:100%; height:300px; border:1px solid #000000; background-color:#FFFFFF" src="<%=resource%>/load.svg" /> <div style="text-align:right"><small id="scale">-</small></div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm index 82dd3a7dfe..5f2c074939 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm @@ -33,7 +33,7 @@ <%+header%> <div class="cbi-map" id="cbi-network"> - <h2><a id="content" name="content"><%:Routes%></a></h2> + <h2 name="content"><%:Routes%></h2> <div class="cbi-map-descr"><%:The following rules are currently active on this system.%></div> <fieldset class="cbi-section"> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm index 40032a1426..b87f21d08d 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm @@ -5,7 +5,7 @@ -%> <%+header%> -<h2><a id="content" name="content"><%:System Log%></a></h2> +<h2 name="content"><%:System Log%></h2> <div id="content_syslog"> <textarea readonly="readonly" wrap="off" rows="<%=syslog:cmatch("\n")+2%>" id="syslog"><%=syslog:pcdata()%></textarea> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm index 025fece90b..f185926104 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm @@ -314,7 +314,7 @@ ); //]]></script> -<h2><a id="content" name="content"><%:Realtime Wireless%></a></h2> +<h2 name="content"><%:Realtime Wireless%></h2> <ul class="cbi-tabmenu"> <% for _, dev in ipairs(devices) do %> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm index 15c96e34df..e722a48096 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm @@ -25,7 +25,7 @@ <body> <div id="maincontainer"> <div id="maincontent"> - <h2><a id="content" name="content"><%:System%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %></a></h2> + <h2 name="content"><%:System%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %></h2> <fieldset class="cbi-section"> <p> <% if msg then %><%=msg%><% else %><%:Changes applied.%><% end %> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm index 0a6df109df..c1f3361ae2 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm @@ -5,6 +5,6 @@ -%> <ul class="cbi-tabmenu"> - <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/system/flashops")%>"><%:Actions%></a></li> + <li class="cbi-tab-disabled"><a href="<%=url("admin/system/flashops")%>"><%:Actions%></a></li> <li class="cbi-tab"><a href="#"><%:Configuration%></a></li> </ul> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm index 84e151075f..37d8ae0e85 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm @@ -1,7 +1,7 @@ <%+cbi/valueheader%> <script type="text/javascript">//<![CDATA[ - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "system", "clock_status")%>', null, + XHR.poll(5, '<%=url('admin/system/clock_status')%>', null, function(x, rv) { var s = document.getElementById('<%=self.option%>-clock-status'); @@ -17,8 +17,8 @@ btn.disabled = true; btn.value = '<%:Synchronizing...%>'; - XHR.get('<%=luci.dispatcher.build_url("admin", "system", "clock_status")%>', - { set: Math.floor((new Date()).getTime() / 1000) }, + (new XHR()).post('<%=url('admin/system/clock_status')%>', + { token: '<%=token%>', set: Math.floor((new Date()).getTime() / 1000) }, function() { btn.disabled = false; diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm index bea565aa05..82a1fdbc9c 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm @@ -1,12 +1,12 @@ <%# Copyright 2008 Steven Barth <steven@midlink.org> - Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org> Licensed to the public under the Apache License 2.0. -%> <%+header%> -<h2><a id="content" name="content"><%:Flash operations%></a></h2> +<h2 name="content"><%:Flash operations%></h2> <ul class="cbi-tabmenu"> <li class="cbi-tab"><a href="#"><%:Actions%></a></li> @@ -17,36 +17,43 @@ <fieldset class="cbi-section"> <legend><%:Backup / Restore%></legend> - <form method="post" action="<%=REQUEST_URI%>" enctype="multipart/form-data"> - <div class="cbi-section-descr"><%:Click "Generate archive" to download a tar archive of the current configuration files. To reset the firmware to its initial state, click "Perform reset" (only possible with squashfs images).%></div> - <div class="cbi-section-node"> + <div class="cbi-section-descr"><%:Click "Generate archive" to download a tar archive of the current configuration files. To reset the firmware to its initial state, click "Perform reset" (only possible with squashfs images).%></div> + <div class="cbi-section-node"> + <form class="inline" method="post" action="<%=url('admin/system/flashops/backup')%>"> + <input type="hidden" name="token" value="<%=token%>" /> <div class="cbi-value<% if not reset_avail then %> cbi-value-last<% end %>"> <label class="cbi-value-title" for="image"><%:Download backup%>:</label> <div class="cbi-value-field"> <input class="cbi-button cbi-button-apply" type="submit" name="backup" value="<%:Generate archive%>" /> </div> </div> - <% if reset_avail then %> + </form> + <% if reset_avail then %> + <form class="inline" method="post" action="<%=url('admin/system/flashops/reset')%>"> + <input type="hidden" name="token" value="<%=token%>" /> <div class="cbi-value cbi-value-last"> <label class="cbi-value-title"><%:Reset to defaults%>:</label> <div class="cbi-value-field"> <input onclick="return confirm('<%:Really reset all changes?%>')" class="cbi-button cbi-button-reset" type="submit" name="reset" value="<%:Perform reset%>" /> </div> </div> - <% end %> - </div> - <br /> - <div class="cbi-section-descr"><%:To restore configuration files, you can upload a previously generated backup archive here.%></div> - <div class="cbi-section-node"> + </form> + <% end %> + </div> + <br /> + <div class="cbi-section-descr"><%:To restore configuration files, you can upload a previously generated backup archive here.%></div> + <div class="cbi-section-node"> + <form class="inline" method="post" action="<%=url('admin/system/flashops/restore')%>" enctype="multipart/form-data"> <div class="cbi-value cbi-value-last"> <label class="cbi-value-title" for="archive"><%:Restore backup%>:</label> <div class="cbi-value-field"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="file" name="archive" id="archive" /> <input type="submit" class="cbi-button cbi-input-apply" name="restore" value="<%:Upload archive...%>" /> </div> </div> - </div> - </form> + </form> + </div> </fieldset> <br /> @@ -54,7 +61,8 @@ <fieldset class="cbi-section"> <legend><%:Flash new firmware image%></legend> <% if upgrade_avail then %> - <form method="post" action="<%=REQUEST_URI%>" enctype="multipart/form-data"> + <form method="post" action="<%=url('admin/system/flashops/sysupgrade')%>" enctype="multipart/form-data"> + <input type="hidden" name="token" value="<%=token%>" /> <div class="cbi-section-descr"><%:Upload a sysupgrade-compatible image here to replace the running firmware. Check "Keep settings" to retain the current configuration (requires an OpenWrt compatible firmware image).%></div> <div class="cbi-section-node"> <div class="cbi-value"> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/ipkg.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/ipkg.htm index 6b812e837e..a7ff4e50bd 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/ipkg.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/ipkg.htm @@ -5,6 +5,6 @@ -%> <ul class="cbi-tabmenu"> - <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/system/packages")%>"><%:Actions%></a></li> + <li class="cbi-tab-disabled"><a href="<%=url("admin/system/packages")%>"><%:Actions%></a></li> <li class="cbi-tab"><a href="#"><%:Configuration%></a></li> </ul> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm index 1ceda47852..1bc9caceda 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm @@ -44,19 +44,20 @@ end <%+header%> -<h2><a id="content" name="content"><%:Software%></a></h2> +<h2 name="content"><%:Software%></h2> -<form method="post" action="<%=REQUEST_URI%>"> - <div class="cbi-map"> +<div class="cbi-map"> - <ul class="cbi-tabmenu"> - <li class="cbi-tab"><a href="#"><%:Actions%></a></li> - <li class="cbi-tab-disabled"><a href="<%=REQUEST_URI%>/ipkg"><%:Configuration%></a></li> - </ul> - - <fieldset class="cbi-section"> + <ul class="cbi-tabmenu"> + <li class="cbi-tab"><a href="#"><%:Actions%></a></li> + <li class="cbi-tab-disabled"><a href="<%=REQUEST_URI%>/ipkg"><%:Configuration%></a></li> + </ul> + <form method="post" action="<%=REQUEST_URI%>"> + <input type="hidden" name="exec" value="1" /> + <input type="hidden" name="token" value="<%=token%>" /> + <fieldset class="cbi-section"> <fieldset class="cbi-section-node"> <% if (install and next(install)) or (remove and next(remove)) or update or upgrade then %> <div class="cbi-value"> @@ -80,7 +81,7 @@ end <% else %> <%:No package lists available%> <% end %> - <input type="button" onclick="location.href='?update=1'" href="#" class="cbi-button cbi-button-apply" style="margin-left:3em" value="<%:Update lists%>" /> + <input type="submit" name="update" href="#" class="cbi-button cbi-button-apply" style="margin-left:3em" value="<%:Update lists%>" /> </div> <% end %> @@ -101,7 +102,7 @@ end <label class="cbi-value-title"><%:Download and install package%>:</label> <div class="cbi-value-field"> <input type="text" name="url" size="30" value="" /> - <input class="cbi-button cbi-input-save" type="submit" name="submit" value="<%:OK%>" /> + <input class="cbi-button cbi-input-save" type="submit" name="exec" value="<%:OK%>" /> </div> </div> @@ -114,80 +115,98 @@ end </div> </fieldset> </fieldset> - <br /> - - <h3><%:Status%></h3> - - - <ul class="cbi-tabmenu"> - <li class="cbi-tab<% if display ~= "installed" then %>-disabled<% end %>"><a href="?display=installed&query=<%=pcdata(query)%>"><%:Installed packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li> - <li class="cbi-tab<% if display ~= "available" then %>-disabled<% end %>"><a href="?display=available&query=<%=pcdata(query)%>"><%:Available packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li> - </ul> - - <% if display ~= "available" then %> - <fieldset class="cbi-section"> - <table class="cbi-section-table" style="width:100%"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell" style="text-align:left"> </th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Package name%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Version%></th> - </tr> - <% local empty = true; luci.model.ipkg.list_installed(querypat, function(n, v, d) empty = false; filter[n] = true %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> - <td style="text-align:left; width:10%"><a onclick="return window.confirm('<%:Remove%> "<%=luci.util.pcdata(n)%>" ?')" href="<%=REQUEST_URI%>?submit=1&remove=<%=luci.util.pcdata(n)%>"><%:Remove%></a></td> - <td style="text-align:left"><%=luci.util.pcdata(n)%></td> - <td style="text-align:left"><%=luci.util.pcdata(v)%></td> - </tr> - <% end) %> - <% if empty then %> - <tr class="cbi-section-table-row"> - <td style="text-align:left"> </td> - <td style="text-align:left"><em><%:none%></em></td> - <td style="text-align:left"><em><%:none%></em></td> - </tr> - <% end %> - </table> - </fieldset> - <% else %> - <fieldset class="cbi-section"> - <% if not querypat then %> - <ul class="cbi-tabmenu"> - <% local i; for i = 65, 90 do %> - <li class="cbi-tab<% if letter ~= i then %>-disabled<% end %>"><a href="?display=available&letter=<%=string.char(i)%>"><%=string.char(i)%></a></li> - <% end %> - <li class="cbi-tab<% if letter ~= 35 then %>-disabled<% end %>"><a href="?display=available&letter=%23">#</a></li> - </ul> - <div class="cbi-section-node"> - <% end %> - <table class="cbi-section-table" style="width:100%"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell" style="text-align:left"> </th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Package name%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Version%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Description%></th> - </tr> - <% local empty = true; opkg_list(querypat or letterpat, function(n, v, d) if filter[n] then return end; empty = false %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> - <td style="text-align:left; width:10%"><a onclick="return window.confirm('<%:Install%> "<%=luci.util.pcdata(n)%>" ?')" href="<%=REQUEST_URI%>?submit=1&install=<%=luci.util.pcdata(n)%>"><%:Install%></a></td> - <td style="text-align:left"><%=luci.util.pcdata(n)%></td> - <td style="text-align:left"><%=luci.util.pcdata(v)%></td> - <td style="text-align:left"><%=luci.util.pcdata(d)%></td> - </tr> - <% end) %> - <% if empty then %> - <tr class="cbi-section-table-row"> - <td style="text-align:left"> </td> - <td style="text-align:left"><em><%:none%></em></td> - <td style="text-align:left"><em><%:none%></em></td> - <td style="text-align:left"><em><%:none%></em></td> - </tr> - <% end %> - </table> - <% if not querypat then %> - </div> - <% end %> - </fieldset> + </form> + + + <h3><%:Status%></h3> + + + <ul class="cbi-tabmenu"> + <li class="cbi-tab<% if display ~= "installed" then %>-disabled<% end %>"><a href="?display=installed&query=<%=pcdata(query)%>"><%:Installed packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li> + <li class="cbi-tab<% if display ~= "available" then %>-disabled<% end %>"><a href="?display=available&query=<%=pcdata(query)%>"><%:Available packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li> + </ul> + + <% if display ~= "available" then %> + <fieldset class="cbi-section"> + <table class="cbi-section-table" style="width:100%"> + <tr class="cbi-section-table-titles"> + <th class="cbi-section-table-cell" style="text-align:left"> </th> + <th class="cbi-section-table-cell" style="text-align:left"><%:Package name%></th> + <th class="cbi-section-table-cell" style="text-align:left"><%:Version%></th> + </tr> + <% local empty = true; luci.model.ipkg.list_installed(querypat, function(n, v, s, d) empty = false; filter[n] = true %> + <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> + <td style="text-align:left; width:10%"> + <form method="post" class="inline" action="<%=REQUEST_URI%>"> + <input type="hidden" name="exec" value="1" /> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="hidden" name="remove" value="<%=pcdata(n)%>" /> + <a onclick="window.confirm('<%:Remove%> "<%=luci.util.pcdata(n)%>" ?') && this.parentNode.submit(); return false" href="#"><%:Remove%></a> + </form> + </td> + <td style="text-align:left"><%=luci.util.pcdata(n)%></td> + <td style="text-align:left"><%=luci.util.pcdata(v)%></td> + </tr> + <% end) %> + <% if empty then %> + <tr class="cbi-section-table-row"> + <td style="text-align:left"> </td> + <td style="text-align:left"><em><%:none%></em></td> + <td style="text-align:left"><em><%:none%></em></td> + </tr> + <% end %> + </table> + </fieldset> + <% else %> + <fieldset class="cbi-section"> + <% if not querypat then %> + <ul class="cbi-tabmenu"> + <% local i; for i = 65, 90 do %> + <li class="cbi-tab<% if letter ~= i then %>-disabled<% end %>"><a href="?display=available&letter=<%=string.char(i)%>"><%=string.char(i)%></a></li> + <% end %> + <li class="cbi-tab<% if letter ~= 35 then %>-disabled<% end %>"><a href="?display=available&letter=%23">#</a></li> + </ul> + <div class="cbi-section-node"> + <% end %> + <table class="cbi-section-table" style="width:100%"> + <tr class="cbi-section-table-titles"> + <th class="cbi-section-table-cell" style="text-align:left"> </th> + <th class="cbi-section-table-cell" style="text-align:left"><%:Package name%></th> + <th class="cbi-section-table-cell" style="text-align:left"><%:Version%></th> + <th class="cbi-section-table-cell" style="text-align:right"><%:Size (.ipk)%></th> + <th class="cbi-section-table-cell" style="text-align:left"><%:Description%></th> + </tr> + <% local empty = true; opkg_list(querypat or letterpat, function(n, v, s, d) if filter[n] then return end; empty = false %> + <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> + <td style="text-align:left; width:10%"> + <form method="post" class="inline" action="<%=REQUEST_URI%>"> + <input type="hidden" name="exec" value="1" /> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="hidden" name="install" value="<%=pcdata(n)%>" /> + <a onclick="window.confirm('<%:Install%> "<%=luci.util.pcdata(n)%>" ?') && this.parentNode.submit(); return false" href="#"><%:Install%></a> + </form> + </td> + <td style="text-align:left"><%=luci.util.pcdata(n)%></td> + <td style="text-align:left"><%=luci.util.pcdata(v)%></td> + <td style="text-align:right"><%=luci.util.pcdata(s)%></td> + <td style="text-align:left"><%=luci.util.pcdata(d)%></td> + </tr> + <% end) %> + <% if empty then %> + <tr class="cbi-section-table-row"> + <td style="text-align:left"> </td> + <td style="text-align:left"><em><%:none%></em></td> + <td style="text-align:left"><em><%:none%></em></td> + <td style="text-align:right"><em><%:none%></em></td> + <td style="text-align:left"><em><%:none%></em></td> + </tr> + <% end %> + </table> + <% if not querypat then %> + </div> <% end %> - </div> -</form> + </fieldset> + <% end %> +</div> + <%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm index 80768119fe..c9551804d2 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm @@ -1,25 +1,59 @@ <%# Copyright 2008 Steven Barth <steven@midlink.org> - Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org> Licensed to the public under the Apache License 2.0. -%> <%+header%> -<h2><a id="content" name="content"><%:System%></a></h2> -<h3><%:Reboot%></h3> + +<h2 name="content"><%:Reboot%></h2> +<br /> + <p><%:Reboots the operating system of your device%></p> -<%- -local c = require("luci.model.uci").cursor():changes() -if c and next(c) then --%> - <p class="warning"><%:Warning: There are unsaved changes that will be lost while rebooting!%></p> -<%- -end -if not reboot then --%> -<p><a href="<%=controller%>/admin/system/reboot?reboot=1"><%:Perform reboot%></a></p> -<%- else -%> -<p><%:Please wait: Device rebooting...%></p> -<script type="text/javascript">setTimeout("location='<%=controller%>/admin'", 60000)</script> + +<%- local c = require("luci.model.uci").cursor():changes(); if c and next(c) then -%> + <p class="alert-message warning"><%:Warning: There are unsaved changes that will get lost on reboot!%></p> <%- end -%> -<%+footer%>
\ No newline at end of file + +<hr /> + +<script type="text/javascript">//<![CDATA[ + var tries = 0; + + function ok() { + window.location = '<%=controller%>/admin'; + } + + function check() { + if (tries++ < 12) + window.setTimeout(ping, 5000); + else + alert('<%:Device unreachable%>'); + } + + function ping() { + var img = document.createElement('img'); + + img.onload = ok; + img.onerror = check; + img.src = '<%=resource%>/icons/loading.gif?' + Math.random(); + + document.getElementById('reboot-message').innerHTML = '<%:Waiting for device...%>'; + } + + function reboot(button) { + button.style.display = 'none'; + document.getElementById('reboot-message').parentNode.style.display = ''; + + (new XHR()).post('<%=controller%>/admin/system/reboot/call', { token: '<%=token%>' }, check); + } +//]]></script> + +<input class="cbi-button cbi-button-apply" type="button" value="<%:Perform reboot%>" onclick="reboot(this)" /> + +<p class="alert-message" style="display:none"> + <img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> + <span id="reboot-message"><%:Device is rebooting...%></span> +</p> + +<%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm index b9d42357bb..5ca0398e13 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm @@ -6,7 +6,7 @@ <%+header%> -<h2><a id="content" name="content"><%:Flash Firmware%> - <%:Verify%></a></h2> +<h2 name="content"><%:Flash Firmware%> - <%:Verify%></h2> <p> <%_ The flash image was uploaded. Below is the checksum and file size listed, @@ -45,12 +45,11 @@ </fieldset> <div class="cbi-page-actions right"> - <form style="display:inline" action="<%=REQUEST_URI%>" method="post"> - <input class="cbi-button cbi-button-reset" type="submit" value="<%:Cancel%>" /> - </form> - <form style="display:inline" action="<%=REQUEST_URI%>" method="post"> + <form class="inline" action="<%=REQUEST_URI%>" method="post"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="step" value="2" /> <input type="hidden" name="keep" value="<%=keep and "1" or ""%>" /> + <input class="cbi-button cbi-button-reset" name="cancel" type="submit" value="<%:Cancel%>" /> <input class="cbi-button cbi-button-apply" type="submit" value="<%:Proceed%>" /> </form> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm index 4284b44d38..370027e510 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm @@ -6,7 +6,7 @@ <%+header%> -<h2><a id="content" name="content"><%:Configuration%> / <%:Apply%></a></h2> +<h2 name="content"><%:Configuration%> / <%:Apply%></h2> <% if changes then %> <%+cbi/apply_xhr%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm index 84e22879e0..c3373604f3 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm @@ -1,12 +1,12 @@ <%# Copyright 2008 Steven Barth <steven@midlink.org> - Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org> Licensed to the public under the Apache License 2.0. -%> <%+header%> -<h2><a id="content" name="content"><%:Configuration%> / <%:Changes%></a></h2> +<h2 name="content"><%:Configuration%> / <%:Changes%></h2> <% if changes then %> <%+admin_uci/changelog%> @@ -25,15 +25,18 @@ <% end %> <div style="text-align:right"> - <form class="inline" method="get" action="<%=controller%>/admin/uci/apply"> + <form class="inline" method="post" action="<%=controller%>/admin/uci/apply"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" /> <input class="cbi-button cbi-button-apply" type="submit" value="<%:Apply%>" /> </form> - <form class="inline" method="get" action="<%=controller%>/admin/uci/saveapply"> + <form class="inline" method="post" action="<%=controller%>/admin/uci/saveapply"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" /> <input class="cbi-button cbi-button-save" type="submit" value="<%:Save & Apply%>" /> </form> - <form class="inline" method="get" action="<%=controller%>/admin/uci/revert"> + <form class="inline" method="post" action="<%=controller%>/admin/uci/revert"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" /> <input class="cbi-button cbi-button-reset" type="submit" value="<%:Revert%>" /> </form> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm index d2bdc7a971..5da7281a80 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm @@ -6,7 +6,7 @@ <%+header%> -<h2><a id="content" name="content"><%:Configuration%> / <%:Revert%></a></h2> +<h2 name="content"><%:Configuration%> / <%:Revert%></h2> <% if changes then %> <%+cbi/apply_xhr%> |