diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/AvpairController.php b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/AvpairController.php new file mode 100644 index 000000000..1f321ea17 --- /dev/null +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/AvpairController.php @@ -0,0 +1,64 @@ + + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +namespace OPNsense\Freeradius\Api; + +use \OPNsense\Base\ApiMutableModelControllerBase; + +class AvpairController extends ApiMutableModelControllerBase +{ + protected static $internalModelName = 'avpair'; + protected static $internalModelClass = '\OPNsense\Freeradius\Avpair'; + public function searchAvpairAction() + { + return $this->searchBase('avpairs.avpair', array("enabled", "name", "operator", "value")); + } + public function getAvpairAction($uuid = null) + { + $this->sessionClose(); + return $this->getBase('avpair', 'avpairs.avpair', $uuid); + } + public function addAvpairAction() + { + return $this->addBase('avpair', 'avpairs.avpair'); + } + public function delAvpairAction($uuid) + { + return $this->delBase('avpairs.avpair', $uuid); + } + public function setAvpairAction($uuid) + { + return $this->setBase('avpair', 'avpairs.avpair', $uuid); + } + public function toggleAvpairAction($uuid) + { + return $this->toggleBase('avpairs.avpair', $uuid); + } +} diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/UserController.php b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/UserController.php index a32d44806..e0273a0b2 100644 --- a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/UserController.php +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/UserController.php @@ -33,6 +33,7 @@ class UserController extends \OPNsense\Base\IndexController public function indexAction() { $this->view->formDialogEditFreeRADIUSUser = $this->getForm("dialogEditFreeRADIUSUser"); + $this->view->formDialogEditFreeRADIUSAvpair = $this->getForm("dialogEditFreeRADIUSAvpair"); $this->view->pick('OPNsense/Freeradius/user'); } } diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/dialogEditFreeRADIUSAvpair.xml b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/dialogEditFreeRADIUSAvpair.xml new file mode 100644 index 000000000..b893b9b1a --- /dev/null +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/dialogEditFreeRADIUSAvpair.xml @@ -0,0 +1,26 @@ +
+ + avpair.enabled + + checkbox + This will enable or disable the AVPair. + + + avpair.name + + text + Set the name for this AVPair + + + avpair.operator + + text + Usual operators here are = or += + + + avpair.value + + text + Set the value for this AVPair. + +
diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/dialogEditFreeRADIUSUser.xml b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/dialogEditFreeRADIUSUser.xml index 8e068d7e8..1f1cc7ec8 100644 --- a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/dialogEditFreeRADIUSUser.xml +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/dialogEditFreeRADIUSUser.xml @@ -130,4 +130,11 @@ true Set the Service-Type attributes for this user. + + user.linkedAVPair + + select_multiple + true + Select the configured AVPairs for this user. + diff --git a/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Avpair.php b/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Avpair.php new file mode 100644 index 000000000..1c640244a --- /dev/null +++ b/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Avpair.php @@ -0,0 +1,31 @@ + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ + +namespace OPNsense\Freeradius; + +use OPNsense\Base\BaseModel; + +class Avpair extends BaseModel +{ +} diff --git a/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Avpair.xml b/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Avpair.xml new file mode 100644 index 000000000..706f84cfc --- /dev/null +++ b/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Avpair.xml @@ -0,0 +1,25 @@ + + //OPNsense/freeradius/avpair + FreeRADIUS AVPair configuration + 1.0.0 + + + + + 1 + Y + + + Y + + + Y + /^([\-\+\~\=]){1,2}$/ + + + Y + + + + + diff --git a/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/User.xml b/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/User.xml index bc98583c0..c98c2e315 100644 --- a/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/User.xml +++ b/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/User.xml @@ -101,6 +101,17 @@ 19 + + + + + Y + N + diff --git a/net/freeradius/src/opnsense/mvc/app/views/OPNsense/Freeradius/user.volt b/net/freeradius/src/opnsense/mvc/app/views/OPNsense/Freeradius/user.volt index 932a635b2..65b527826 100644 --- a/net/freeradius/src/opnsense/mvc/app/views/OPNsense/Freeradius/user.volt +++ b/net/freeradius/src/opnsense/mvc/app/views/OPNsense/Freeradius/user.volt @@ -1,7 +1,7 @@ {# OPNsense® is Copyright © 2014 – 2017 by Deciso B.V. -Copyright (C) 2017 Michael Muenz +Copyright (C) 2017 - 2019 Michael Muenz All rights reserved. Redistribution and use in source and binary forms, with or without modification, @@ -32,10 +32,6 @@ POSSIBILITY OF SUCH DAMAGE. $( document ).ready(function() { updateServiceControlUI('freeradius'); - /************************************************************************************************************* - * link grid actions - *************************************************************************************************************/ - $("#grid-users").UIBootgrid( { 'search':'/api/freeradius/user/searchUser', 'get':'/api/freeradius/user/getUser/', @@ -46,6 +42,16 @@ POSSIBILITY OF SUCH DAMAGE. } ); + $("#grid-avpairs").UIBootgrid( + { 'search':'/api/freeradius/avpair/searchAvpair', + 'get':'/api/freeradius/avpair/getAvpair/', + 'set':'/api/freeradius/avpair/setAvpair/', + 'add':'/api/freeradius/avpair/addAvpair/', + 'del':'/api/freeradius/avpair/delAvpair/', + 'toggle':'/api/freeradius/avpair/toggleAvpair/' + } + ); + /************************************************************************************************************* * Commands *************************************************************************************************************/ @@ -103,10 +109,10 @@ POSSIBILITY OF SUCH DAMAGE.
- @@ -133,6 +139,31 @@ POSSIBILITY OF SUCH DAMAGE.
+
+ + + + + + + + + + + + + + + + + + + +
{{ lang._('Enabled') }}{{ lang._('Name') }}{{ lang._('Operator') }}{{ lang._('Value') }}{{ lang._('ID') }}{{ lang._('Commands') }}
+ + +
+

@@ -141,3 +172,4 @@ POSSIBILITY OF SUCH DAMAGE.
{{ partial("layout_partials/base_dialog",['fields':formDialogEditFreeRADIUSUser,'id':'dialogEditFreeRADIUSUser','label':lang._('Edit User')])}} +{{ partial("layout_partials/base_dialog",['fields':formDialogEditFreeRADIUSAvpair,'id':'dialogEditFreeRADIUSAvpair','label':lang._('Edit AVPair')])}} diff --git a/net/freeradius/src/opnsense/service/templates/OPNsense/Freeradius/users b/net/freeradius/src/opnsense/service/templates/OPNsense/Freeradius/users index e239570a0..b865ed447 100644 --- a/net/freeradius/src/opnsense/service/templates/OPNsense/Freeradius/users +++ b/net/freeradius/src/opnsense/service/templates/OPNsense/Freeradius/users @@ -60,6 +60,14 @@ {% if user_list.mikrotik_vlan_id_type is defined %} Mikrotik-Wireless-VLANID-Type = {{ user_list.mikrotik_vlan_id_type }}, {% endif %} +{% endif %} +{% if user_list.linkedAVPair|default("") != "" %} +{% for avlist in user_list.linkedAVPair.split(",") %} +{% set avlistdetail = helpers.getUUID(avlist) %} +{% if avlistdetail != {} and avlistdetail.enabled == '1' %} + {{ avlistdetail.name }} {{ avlistdetail.operator }} {{ avlistdetail.value }}, +{% endif %} +{% endfor %} {% endif %} Framed-Protocol = PPP