From 02a0291d141e3ac8e345a08ab010e05198c895f9 Mon Sep 17 00:00:00 2001 From: Richard Yu Date: Fri, 11 Oct 2019 01:05:08 +0800 Subject: [PATCH] luci-base: widgets.js: add user and group select Signed-off-by: Richard Yu --- .../luci-static/resources/tools/widgets.js | 51 +++++++++++++++++++ .../root/usr/share/rpcd/acl.d/luci-base.json | 2 + 2 files changed, 53 insertions(+) diff --git a/modules/luci-base/htdocs/luci-static/resources/tools/widgets.js b/modules/luci-base/htdocs/luci-static/resources/tools/widgets.js index 1667fa670..9cc3e26ed 100644 --- a/modules/luci-base/htdocs/luci-static/resources/tools/widgets.js +++ b/modules/luci-base/htdocs/luci-static/resources/tools/widgets.js @@ -3,6 +3,19 @@ 'require form'; 'require network'; 'require firewall'; +'require fs'; + +function getUsers() { + return fs.lines('/etc/passwd').then(function(lines) { + return lines.map(function(line) { return line.split(/:/)[0] }); + }); +} + +function getGroups() { + return fs.lines('/etc/group').then(function(lines) { + return lines.map(function(line) { return line.split(/:/)[0] }); + }); +} var CBIZoneSelect = form.ListValue.extend({ __name__: 'CBI.ZoneSelect', @@ -559,10 +572,48 @@ var CBIDeviceSelect = form.ListValue.extend({ }, }); +var CBIUserSelect = form.ListValue.extend({ + __name__: 'CBI.UserSelect', + + load: function(section_id) { + return getUsers().then(L.bind(function(users) { + for (var i = 0; i < users.length; i++) { + this.value(users[i]); + } + + return this.super('load', section_id); + }, this)); + }, + + filter: function(section_id, value) { + return true; + }, +}); + +var CBIGroupSelect = form.ListValue.extend({ + __name__: 'CBI.GroupSelect', + + load: function(section_id) { + return getGroups().then(L.bind(function(groups) { + for (var i = 0; i < groups.length; i++) { + this.value(groups[i]); + } + + return this.super('load', section_id); + }, this)); + }, + + filter: function(section_id, value) { + return true; + }, +}); + return L.Class.extend({ ZoneSelect: CBIZoneSelect, ZoneForwards: CBIZoneForwards, NetworkSelect: CBINetworkSelect, DeviceSelect: CBIDeviceSelect, + UserSelect: CBIUserSelect, + GroupSelect: CBIGroupSelect, }); diff --git a/modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json b/modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json index 001e6deec..f811fb99e 100644 --- a/modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json +++ b/modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json @@ -30,6 +30,8 @@ "/etc/filesystems": [ "read" ], "/etc/rc.local": [ "read" ], "/etc/sysupgrade.conf": [ "read" ], + "/etc/passwd": [ "read" ], + "/etc/group": [ "read" ], "/proc/filesystems": [ "read" ], "/proc/mtd": [ "read" ], "/proc/partitions": [ "read" ], -- 2.25.1