summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-attendedsysupgrade
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2017-08-22 21:23:05 +0200
committerGitHub <noreply@github.com>2017-08-22 21:23:05 +0200
commit72b90c0a10678392692bd6b99301daba8792258a (patch)
treefc48884025ebf0fd594bb1daccd8f8cfb0d2a536 /applications/luci-app-attendedsysupgrade
parentd86244ab3946cb4cf8b15443dd3e62e23db1079a (diff)
parentf389d676de6d4eda676b569039878aed54e786a7 (diff)
Merge pull request #1314 from aparcar/acld
luci-app-attendedsysupgrade: lua code for acl.d
Diffstat (limited to 'applications/luci-app-attendedsysupgrade')
-rw-r--r--applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm75
1 files changed, 75 insertions, 0 deletions
diff --git a/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
index ea140c1b83..1e423b49f0 100644
--- a/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
+++ b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
@@ -1,3 +1,78 @@
+<%
+-- all lua code provided by https://github.com/jow-/
+-- thank you very much!
+
+ function apply_acls(filename, session)
+ local json = require "luci.jsonc"
+ local util = require "luci.util"
+ local fs = require "nixio.fs"
+
+ local grants = { }
+
+ local acl = json.parse(fs.readfile(filename))
+ if type(acl) ~= "table" then
+ return
+ end
+
+ local group, perms
+ for group, perms in pairs(acl) do
+ local perm, scopes
+ for perm, scopes in pairs(perms) do
+ if type(scopes) == "table" then
+ local scope, objects
+ for scope, objects in pairs(scopes) do
+ if type(objects) == "table" then
+ if not grants[scope] then
+ grants[scope] = { }
+ end
+
+ if next(objects) == 1 then
+ local _, object
+ for _, object in ipairs(objects) do
+ if not grants[scope][object] then
+ grants[scope][object] = { }
+ end
+ table.insert(grants[scope][object], perm)
+ end
+ else
+ local object, funcs
+ for object, funcs in pairs(objects) do
+ if type(funcs) == "table" then
+ local _, func
+ for _, func in ipairs(funcs) do
+ if not grants[scope][object] then
+ grants[scope][object] = { }
+ end
+ table.insert(grants[scope][object], func)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ local _, scope, object, func
+ for scope, _ in pairs(grants) do
+ local objects = { }
+ for object, _ in pairs(_) do
+ for _, func in ipairs(_) do
+ table.insert(objects, { object, func })
+ end
+ end
+
+ util.ubus("session", "grant", {
+ ubus_rpc_session = session,
+ scope = scope, objects = objects
+ })
+ end
+ end
+
+ apply_acls("/usr/share/rpcd/acl.d/attendedsysupgrade.json", luci.dispatcher.context.authsession)
+ apply_acls("/usr/share/rpcd/acl.d/packagelist.json", luci.dispatcher.context.authsession)
+%>
<%+header%>
<h2 name="content"><%:Attended Sysupgrade%></h2>
<div class="container">