summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDaniel F. Dickinson <cshored@thecshore.com>2018-08-02 09:39:48 -0400
committerJo-Philipp Wich <jo@mein.io>2018-09-19 20:08:19 +0200
commit6ec0353201435e0d0d7d32820d8ba600b4ca7b5b (patch)
tree8f37ae726c257f81fe105cb85e7c6aebe09c0095
parent1a0316bbbaad3f6befce34014d7e204cb1c76ec0 (diff)
modules: Make luci-base sufficient to use luci apps
Per the discussion in https://github.com/openwrt/luci/issues/869, make luci-base sufficient to login, logout, and review and apply or revert uci changes. This allows most luci-app-xxx to work without having luci-mod-admin-full installed. It has been tested with some apps and not luci-mod-admin-full, as well as with luci-mod-admin-full (to make sure the usual case doesn't break). Instead of creating a new module namespace (e.g. 'Base') we reduce the opportunities for breakage by having luci-base take over the 'shell' of the 'Administration' (admin/....) namespace. Since admin is assumed by all current building LuCI components (including Freifunk), this doesn't introduce the 'Administration' tab into any situation where it would not already be present (but includes it where it was before). We also add a "Component not installed" page to avoid fatal errors and backtrace when e.g. luci-mod-admin-full is not installed. Signed-off-by: Daniel F. Dickinson <cshored@thecshore.com>
-rw-r--r--modules/luci-base/luasrc/controller/admin/index.lua82
-rw-r--r--modules/luci-base/luasrc/controller/admin/uci.lua (renamed from modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua)0
-rw-r--r--modules/luci-base/luasrc/dispatcher.lua11
-rw-r--r--modules/luci-base/luasrc/view/admin_uci/changelog.htm (renamed from modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm)0
-rw-r--r--modules/luci-base/luasrc/view/admin_uci/changes.htm (renamed from modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm)0
-rw-r--r--modules/luci-base/luasrc/view/admin_uci/revert.htm (renamed from modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm)0
-rw-r--r--modules/luci-base/luasrc/view/empty_node_placeholder.htm11
-rw-r--r--modules/luci-mod-admin-full/luasrc/controller/admin/index.lua42
-rw-r--r--modules/luci-mod-admin-full/luasrc/controller/admin/network.lua6
-rw-r--r--modules/luci-mod-admin-full/luasrc/controller/admin/status.lua1
-rw-r--r--modules/luci-mod-admin-full/luasrc/controller/admin/system.lua1
-rw-r--r--themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm4
-rw-r--r--themes/luci-theme-material/luasrc/view/themes/material/header.htm4
-rw-r--r--themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm4
14 files changed, 108 insertions, 58 deletions
diff --git a/modules/luci-base/luasrc/controller/admin/index.lua b/modules/luci-base/luasrc/controller/admin/index.lua
new file mode 100644
index 000000000..39e6e573b
--- /dev/null
+++ b/modules/luci-base/luasrc/controller/admin/index.lua
@@ -0,0 +1,82 @@
+-- Copyright 2008 Steven Barth <steven@midlink.org>
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.controller.admin.index", package.seeall)
+
+function index()
+ function toplevel_page(page, preflookup, preftarget)
+ if preflookup and preftarget then
+ if lookup(preflookup) then
+ page.target = preftarget
+ end
+ end
+
+ if not page.target then
+ page.target = firstchild()
+ end
+ end
+
+ local root = node()
+ if not root.target then
+ root.target = alias("admin")
+ root.index = true
+ end
+
+ local page = node("admin")
+ page.title = _("Administration")
+ page.order = 10
+ page.sysauth = "root"
+ page.sysauth_authenticator = "htmlauth"
+ page.ucidata = true
+ page.index = true
+ toplevel_page(page, "admin/status/overview", alias("admin", "status"))
+
+ -- Empty menu tree to be populated by addons and modules
+
+ page = node("admin", "status")
+ page.title = _("Status")
+ page.order = 10
+ page.index = true
+ -- overview is from mod-admin-full
+ toplevel_page(page, "admin/status/overview", alias("admin", "status", "overview"))
+
+ page = node("admin", "system")
+ page.title = _("System")
+ page.order = 20
+ page.index = true
+ -- system/system is from mod-admin-full
+ toplevel_page(page, "admin/system/system", alias("admin", "system", "system"))
+
+ -- Only used if applications add items
+ page = node("admin", "services")
+ page.title = _("Services")
+ page.order = 40
+ page.index = true
+ toplevel_page(page, false, false)
+
+ -- Even for mod-admin-full network just uses first submenu item as landing
+ page = node("admin", "network")
+ page.title = _("Network")
+ page.order = 50
+ page.index = true
+ toplevel_page(page, false, false)
+
+ -- Logout is last
+ entry({"admin", "logout"}, call("action_logout"), _("Logout"), 999)
+end
+
+function action_logout()
+ local dsp = require "luci.dispatcher"
+ local utl = require "luci.util"
+ local sid = dsp.context.authsession
+
+ if sid then
+ utl.ubus("session", "destroy", { ubus_rpc_session = sid })
+
+ 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(dsp.build_url())
+end
diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua b/modules/luci-base/luasrc/controller/admin/uci.lua
index 1d955dd98..1d955dd98 100644
--- a/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua
+++ b/modules/luci-base/luasrc/controller/admin/uci.lua
diff --git a/modules/luci-base/luasrc/dispatcher.lua b/modules/luci-base/luasrc/dispatcher.lua
index 6cf2712eb..09d5d7284 100644
--- a/modules/luci-base/luasrc/dispatcher.lua
+++ b/modules/luci-base/luasrc/dispatcher.lua
@@ -741,11 +741,12 @@ function _firstchild()
end
end
- assert(lowest ~= nil,
- "The requested node contains no childs, unable to redispatch")
-
- path[#path+1] = lowest
- dispatch(path)
+ if lowest == nil then
+ require "luci.template".render("empty_node_placeholder")
+ else
+ path[#path+1] = lowest
+ dispatch(path)
+ end
end
function firstchild()
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm b/modules/luci-base/luasrc/view/admin_uci/changelog.htm
index 8a162c88b..8a162c88b 100644
--- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm
+++ b/modules/luci-base/luasrc/view/admin_uci/changelog.htm
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm b/modules/luci-base/luasrc/view/admin_uci/changes.htm
index 43bd7c23f..43bd7c23f 100644
--- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm
+++ b/modules/luci-base/luasrc/view/admin_uci/changes.htm
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm b/modules/luci-base/luasrc/view/admin_uci/revert.htm
index d8fd3de01..d8fd3de01 100644
--- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm
+++ b/modules/luci-base/luasrc/view/admin_uci/revert.htm
diff --git a/modules/luci-base/luasrc/view/empty_node_placeholder.htm b/modules/luci-base/luasrc/view/empty_node_placeholder.htm
new file mode 100644
index 000000000..b7e276b96
--- /dev/null
+++ b/modules/luci-base/luasrc/view/empty_node_placeholder.htm
@@ -0,0 +1,11 @@
+<%#
+ Copyright 2010 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2018 Daniel F. Dickinson <cshored@thecshore.com>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+header%>
+
+<p>Component not present.</p>
+
+<%+footer%>
diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua
deleted file mode 100644
index cc8c2e3ae..000000000
--- a/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua
+++ /dev/null
@@ -1,42 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Licensed to the public under the Apache License 2.0.
-
-module("luci.controller.admin.index", package.seeall)
-
-function index()
- local root = node()
- if not root.target then
- root.target = alias("admin")
- root.index = true
- end
-
- local page = node("admin")
- page.target = firstchild()
- page.title = _("Administration")
- page.order = 10
- page.sysauth = "root"
- page.sysauth_authenticator = "htmlauth"
- page.ucidata = true
- page.index = true
-
- -- Empty services menu to be populated by addons
- entry({"admin", "services"}, firstchild(), _("Services"), 40).index = true
-
- entry({"admin", "logout"}, call("action_logout"), _("Logout"), 90)
-end
-
-function action_logout()
- local dsp = require "luci.dispatcher"
- local utl = require "luci.util"
- local sid = dsp.context.authsession
-
- if sid then
- utl.ubus("session", "destroy", { ubus_rpc_session = sid })
-
- 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(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 c45605a98..c4e1c3aa1 100644
--- a/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua
+++ b/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua
@@ -8,12 +8,6 @@ function index()
local uci = require("luci.model.uci").cursor()
local page
- page = node("admin", "network")
- page.target = firstchild()
- page.title = _("Network")
- page.order = 50
- page.index = true
-
-- if page.inreq then
local has_switch = false
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 ff95f3d91..4f04cce54 100644
--- a/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua
+++ b/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua
@@ -5,7 +5,6 @@
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"}, template("admin_status/iptables"), _("Firewall"), 2).leaf = true
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 46d2e36c3..4e83769ee 100644
--- a/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua
+++ b/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua
@@ -7,7 +7,6 @@ module("luci.controller.admin.system", package.seeall)
function index()
local fs = require "nixio.fs"
- 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"}, post_on({ set = true }, "action_clock_status"))
diff --git a/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm b/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm
index 4347f133a..a6bb32697 100644
--- a/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm
+++ b/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm
@@ -193,7 +193,9 @@
<div class="alert-message warning">
<h4><%:No password set!%></h4>
<p><%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%></p>
- <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
+ <% if disp.lookup("amdin/system/admin") then %>
+ <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
+ <% end %>
</div>
<%- end -%>
diff --git a/themes/luci-theme-material/luasrc/view/themes/material/header.htm b/themes/luci-theme-material/luasrc/view/themes/material/header.htm
index c070b1a61..564c680f1 100644
--- a/themes/luci-theme-material/luasrc/view/themes/material/header.htm
+++ b/themes/luci-theme-material/luasrc/view/themes/material/header.htm
@@ -239,7 +239,9 @@
<div class="alert-message warning">
<h4><%:No password set!%></h4>
<p><%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%></p>
- <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
+ <% if disp.lookup("admin/system/admin") then %>
+ <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
+ <% end %>
</div>
<%- end -%>
diff --git a/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm b/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm
index 6fc657ddc..1d2161168 100644
--- a/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm
+++ b/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm
@@ -257,6 +257,8 @@
<div class="alert-message warning">
<h4><%:No password set!%></h4>
<p><%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%></p>
- <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
+ <% if disp.lookup("admin/system/admin") then %>
+ <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
+ <% end %>
</div>
<%- end -%>