Skip to content

Commit

Permalink
luci-app-dcwapd: Convert to JS
Browse files Browse the repository at this point in the history
Signed-off-by: Paul Donald <[email protected]>
  • Loading branch information
systemcrash committed Oct 18, 2024
1 parent 5c6b08c commit 82e5c88
Show file tree
Hide file tree
Showing 43 changed files with 1,661 additions and 1,503 deletions.
5 changes: 3 additions & 2 deletions applications/luci-app-dcwapd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
include $(TOPDIR)/rules.mk

LUCI_TITLE:=Dual Channel Wi-Fi AP Daemon configuration module
LUCI_DEPENDS:=+luci-base +luci-compat +dcwapd
LUCI_DEPENDS:=+luci-base +dcwapd

PKG_LICENSE:=Apache-2.0
PKG_MAINTAINER:=Carey Sonsino <[email protected]>
PKG_MAINTAINER:=Carey Sonsino <[email protected]>, \
Paul Donald <[email protected]>

include ../../luci.mk

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
'use strict';

'require form';
'require rpc';
'require uci';
'require tools.widgets as widgets';
'require view';

return view.extend({

callLuciWirelessDevices: rpc.declare({
object: 'luci-rpc',
method: 'getWirelessDevices',
expect: { '': {} }
}),

load: function() {
return Promise.all([
L.resolveDefault(L.uci.load('dcwapd'), {}),
this.callLuciWirelessDevices(),
]);
},

render: function(data) {
var wireless_devices = data[1];

var m = new form.Map('dcwapd', _('Dual Channel Wi-Fi AP Daemon'),
_('With %s you can use two simultaneous Wi-Fi connections to decrease wireless traffic congestion and increase throughput.').format('<abbr title="%s">%s</abbr>').format(_('Dual Channel Wi-Fi AP Daemon'), _('Dual Channel WiFi')));

// General section
var s = m.section(form.NamedSection, 'general', _('General'), _('General Settings'));
s.addremove = false;
s.dynamic = false;
s.optional = false;
s.anonymous = true;

// Enabled state option
var enable = s.option(form.Flag, 'enabled', _('Enable'));
enable.default = false;
enable.optional = false;
enable.rmempty = false;

// Temp dir option
var tmpdir = s.option(form.Value, 'tmpdir', _('Temp Directory'), _('Specify the temporary directory for dcwapd file storage.'));
tmpdir.optional = false;
tmpdir.rmempty = false;

// Data channels section
s = m.section(form.TypedSection, 'datachannel', _('Data Channels'), _('Define data channels over which outbound filtered packets will flow.'));
s.anonymous = false;
s.addremove = true;

// SSID option
var dat_ssid = s.option(form.Value, 'ssid', _('SSID'));
dat_ssid.optional = false;
dat_ssid.rmempty = false;
if (wireless_devices.length > 0) {
Object.values(wireless_devices).forEach(function (radio) {
radio?.interfaces?.forEach(function(_if) {
dat_ssid.value(_if?.config?.ssid ?? 'unknown_ssid');
});
});
} else {
dat_ssid.value('-');
}

// Data bridge option
var dat_bridge = s.option(widgets.DeviceSelect, 'bridge', _('Bridge'));
dat_bridge.optional = false;
dat_bridge.rmempty = false;
dat_bridge.nocreate = false;
dat_bridge.noaliases = true;
dat_bridge.filter = function(section, value) {
if(value.startsWith('br-'))
return true;
}

// Data interfaces list
var ifaces = s.option(form.MultiValue, 'interfaces', _('Interfaces'));
ifaces.optional = true;
ifaces.rmempty = false;
if (wireless_devices.length > 0) {
Object.values(wireless_devices).forEach(function (radio) {
radio?.interfaces?.forEach(function(_if) {
ifaces.value(_if?.ifname ?? 'unknown_if_name');
});
});
} else {
ifaces.value('lo');
}

// Channel sets section
s = m.section(form.TypedSection, 'channel-set', _('Channel Sets'), _('Define primary channels and their corresponding data channels.'));
s.addremove = true;
s.dynamic = false;
s.optional = false;
s.anonymous = false;

// Enabled state option
var enable = s.option(form.Flag, 'enabled', _('Enable'));
enable.default = false;
enable.optional = false;
enable.rmempty = false;

// SSID option
var pri_ssid = s.option(form.Value, 'ssid', _('SSID'));
pri_ssid.optional = false;
pri_ssid.rmempty = false;
if (wireless_devices.length > 0) {
Object.values(wireless_devices).forEach(function (radio) {
radio?.interfaces?.forEach(function(_if) {
pri_ssid.value(_if?.config?.ssid ?? 'unknown_ssid');
});
});
} else {
pri_ssid.value('-');
}

// Primary bridge option
var pri_bridge = s.option(widgets.DeviceSelect, 'bridge', _('Bridge'));
pri_bridge.optional = false;
pri_bridge.rmempty = false;
pri_bridge.nocreate = true;
pri_bridge.noaliases = true;
pri_bridge.filter = function(section, value) {
if (value.startsWith('br-'))
return true;
}

// Data channels list
var data_channels = s.option(form.MultiValue, 'data_channels', _('Data Channels'));
data_channels.optional = false;
data_channels.rmempty = false;
const dataChannels = L.uci.sections('dcwapd', 'datachannel');
if (dataChannels.length > 0) {
Object.values(dataChannels).forEach(function (dc) {
if(dc['.name'])
data_channels.value(dc['.name']);
});
} else {
data_channels.value('err: no data_channels');
}

// Filters section
s = m.section(form.TableSection, 'filter', _('Filters'), _('Define filter rules to apply to outbound packets. Matching packets will flow over the data channel.'));
s.anonymous = false;
s.addremove = true;
s.sortable = true;

// Packet Size
var packetsize = s.option(form.Value, 'packet_size', _('Packet size'));
packetsize.rmempty = false;
packetsize.value('*');
packetsize.default = '*';

// Source IP
var srcip = s.option(form.Value, 'source_ip', _('Source IP'));
srcip.rmempty = false;
srcip.value('*');
srcip.default = '*';

// Source Port
var srcport = s.option(form.Value, 'source_port', _('Source port'));
srcport.rmempty = false;
srcport.value('*');
srcport.default = '*';

// Protocol
var proto = s.option(form.Value, 'protocol', _('Protocol'));
proto.value('*');
proto.value('tcp', 'TCP');
proto.value('udp', 'UDP');
proto.value('icmp', 'ICMP');
proto.rmempty = false;
proto.default = '*';

// Destination Port
var dstport = s.option(form.Value, 'dest_port', _('Destination port'));
dstport.rmempty = false;
dstport.value('*');
dstport.default = '*';

// Filter sets section
s = m.section(form.TypedSection, 'filter-set', _('Filter Sets'), _('Select filters to apply to matching MAC addresses.'));
s.addremove = true;
s.dynamic = false;
s.anonymous = false;
s.optional = false;

// MAC address option
var mac = s.option(form.Value, 'mac', _('MAC Address'));
mac.optional = false;
mac.rmempty = false;
mac.datatype = 'or(macaddr,"*")';

// Filters list
var filters = s.option(form.MultiValue, 'filters', _('Filters'));
filters.optional = false;
filters.rmempty = false;
const filterSections = L.uci.sections('dcwapd', 'filter');
if (filterSections.length > 0) {
Object.values(filterSections).forEach(function (element) {
if(element['.name'])
filters.value(element['.name']);
});
} else {
filters.value('err: no filters');
}

return m.render();
},
});
Loading

0 comments on commit 82e5c88

Please sign in to comment.