luci-mod-status: hide DHCP and assoclist on insufficient ACLs
[project/luci.git] / modules / luci-mod-status / htdocs / luci-static / resources / view / status / include / 40_dhcp.js
1 'use strict';
2 'require baseclass';
3 'require rpc';
4 'require network';
5
6 var callLuciDHCPLeases = rpc.declare({
7 object: 'luci-rpc',
8 method: 'getDHCPLeases',
9 expect: { '': {} }
10 });
11
12 return baseclass.extend({
13 title: '',
14
15 load: function() {
16 return Promise.all([
17 callLuciDHCPLeases(),
18 network.getHostHints()
19 ]);
20 },
21
22 renderLeases: function(data) {
23 var leases = Array.isArray(data[0].dhcp_leases) ? data[0].dhcp_leases : [],
24 leases6 = Array.isArray(data[0].dhcp6_leases) ? data[0].dhcp6_leases : [],
25 machints = data[1].getMACHints(false);
26
27 var table = E('div', { 'class': 'table lases' }, [
28 E('div', { 'class': 'tr table-titles' }, [
29 E('div', { 'class': 'th' }, _('Hostname')),
30 E('div', { 'class': 'th' }, _('IPv4-Address')),
31 E('div', { 'class': 'th' }, _('MAC-Address')),
32 E('div', { 'class': 'th' }, _('Lease time remaining'))
33 ])
34 ]);
35
36 cbi_update_table(table, leases.map(function(lease) {
37 var exp;
38
39 if (lease.expires === false)
40 exp = E('em', _('unlimited'));
41 else if (lease.expires <= 0)
42 exp = E('em', _('expired'));
43 else
44 exp = '%t'.format(lease.expires);
45
46 return [
47 lease.hostname || '-',
48 lease.ipaddr,
49 lease.macaddr,
50 exp
51 ];
52 }), E('em', _('There are no active leases')));
53
54 var table6 = E('div', { 'class': 'table leases6' }, [
55 E('div', { 'class': 'tr table-titles' }, [
56 E('div', { 'class': 'th' }, _('Host')),
57 E('div', { 'class': 'th' }, _('IPv6-Address')),
58 E('div', { 'class': 'th' }, _('DUID')),
59 E('div', { 'class': 'th' }, _('Lease time remaining'))
60 ])
61 ]);
62
63 cbi_update_table(table6, leases6.map(function(lease) {
64 var exp;
65
66 if (lease.expires === false)
67 exp = E('em', _('unlimited'));
68 else if (lease.expires <= 0)
69 exp = E('em', _('expired'));
70 else
71 exp = '%t'.format(lease.expires);
72
73 var hint = lease.macaddr ? machints.filter(function(h) { return h[0] == lease.macaddr })[0] : null,
74 host = null;
75
76 if (hint && lease.hostname && lease.hostname != hint[1] && lease.ip6addr != hint[1])
77 host = '%s (%s)'.format(lease.hostname, hint[1]);
78 else if (lease.hostname)
79 host = lease.hostname;
80 else if (hint)
81 host = hint[1];
82
83 return [
84 host || '-',
85 lease.ip6addrs ? lease.ip6addrs.join(' ') : lease.ip6addr,
86 lease.duid,
87 exp
88 ];
89 }), E('em', _('There are no active leases')));
90
91 return E([
92 E('h3', _('Active DHCP Leases')),
93 table,
94 E('h3', _('Active DHCPv6 Leases')),
95 table6
96 ]);
97 },
98
99 render: function(data) {
100 if (L.hasSystemFeature('dnsmasq') || L.hasSystemFeature('odhcpd'))
101 return this.renderLeases(data);
102
103 return E([]);
104 }
105 });