luci-mod-network: wireless: RADIUS Access/Accounting-Request attrs
authorPaul Donald <newtwen@gmail.com>
Fri, 16 Feb 2024 00:49:29 +0000 (01:49 +0100)
committerPaul Donald <newtwen@gmail.com>
Sat, 17 Feb 2024 16:30:31 +0000 (17:30 +0100)
See following for more detail:

https://w1.fi/cgit/hostap/commit/?id=af35e7af7f8bb1ca9f0905b4074fb56a264aa12b

Signed-off-by: Paul Donald <newtwen@gmail.com>
(cherry picked from commit d9e7be1b435c9dc98829b10d153e5ff83ee4c213)

modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js

index 294fec7957b6460607bf24ddd90fd263fbe93f87..de080318770e86e3c53d3d1710ae5fbd66f22a3e 100644 (file)
@@ -1434,6 +1434,34 @@ return view.extend({
                                o.password = true;
 
                                /* extra RADIUS settings start */
+                               var attr_validate = function(section_id, value) {
+                                       if (!value)
+                                               return true;
+
+                                       if (!/^[0-9]+(:s:.+|:d:[0-9]+|:x:([0-9a-zA-Z]{2})+)?$/.test(value) )
+                                               return _('Must be in %s format.').format('<attr_id>[:<syntax:value>]');
+
+                                       return true;
+                               };
+
+                               var req_attr_syntax = _('Format:') + '<code>&lt;attr_id&gt;[:&lt;syntax:value&gt;]</code>' + '<br />' +
+                                       '<code>syntax: s = %s; '.format(_('string (UTF-8)')) + 'd = %s; '.format(_('integer')) + 'x = %s</code>'.format(_('octet string'))
+
+                               /* https://w1.fi/cgit/hostap/commit/?id=af35e7af7f8bb1ca9f0905b4074fb56a264aa12b */
+                               o = ss.taboption('encryption', form.DynamicList, 'radius_auth_req_attr', _('RADIUS Access-Request attributes'),
+                                       _('Attributes to add/replace in each request.') + '<br />' + req_attr_syntax );
+                               add_dependency_permutations(o, { mode: ['ap', 'ap-wds'], encryption: ['wpa', 'wpa2', 'wpa3', 'wpa3-mixed'] });
+                               o.rmempty = true;
+                               o.validate = attr_validate;
+                               o.placeholder = '126:s:Operator';
+
+                               o = ss.taboption('encryption', form.DynamicList, 'radius_acct_req_attr', _('RADIUS Accounting-Request attributes'),
+                                       _('Attributes to add/replace in each request.') + '<br />' + req_attr_syntax );
+                               add_dependency_permutations(o, { mode: ['ap', 'ap-wds'], encryption: ['wpa', 'wpa2', 'wpa3', 'wpa3-mixed'] });
+                               o.rmempty = true;
+                               o.validate = attr_validate;
+                               o.placeholder = '77:x:74657374696e67';
+
                                o = ss.taboption('encryption', form.ListValue, 'dynamic_vlan', _('RADIUS Dynamic VLAN Assignment'), _('Required: Rejects auth if RADIUS server does not provide appropriate VLAN attributes.'));
                                add_dependency_permutations(o, { mode: ['ap', 'ap-wds'], encryption: ['wpa', 'wpa2', 'wpa3', 'wpa3-mixed'] });
                                o.value('0', _('Disabled'));
@@ -1462,6 +1490,7 @@ return view.extend({
                                o = ss.taboption('encryption', form.Value, 'vlan_bridge', _('RADIUS VLAN Bridge Naming Scheme'), _('E.g. <code>br-vlan</code> or <code>brvlan</code>.'));
                                add_dependency_permutations(o, { mode: ['ap', 'ap-wds'], encryption: ['wpa', 'wpa2', 'wpa3', 'wpa3-mixed'] });
                                o.rmempty = true;
+
                                /* extra RADIUS settings end */
 
                                o = ss.taboption('encryption', form.Value, 'dae_client', _('DAE-Client'), _('Dynamic Authorization Extension client.'));