%PDF- %PDF-
Direktori : /backups/router/usr/local/opnsense/mvc/app/controllers/OPNsense/Kea/Api/ |
Current File : //backups/router/usr/local/opnsense/mvc/app/controllers/OPNsense/Kea/Api/Dhcpv4Controller.php |
<?php /* * Copyright (C) 2023 Deciso B.V. * 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\Kea\Api; use OPNsense\Base\ApiMutableModelControllerBase; use OPNsense\Core\Config; use OPNsense\Firewall\Util; class Dhcpv4Controller extends ApiMutableModelControllerBase { protected static $internalModelName = 'dhcpv4'; protected static $internalModelClass = 'OPNsense\Kea\KeaDhcpv4'; /** * @inheritdoc */ public function getAction() { $data = parent::getAction(); return [ self::$internalModelName => [ 'general' => $data[self::$internalModelName]['general'], 'ha' => $data[self::$internalModelName]['ha'], 'this_hostname' => (string)Config::getInstance()->object()->system->hostname ] ]; } public function searchSubnetAction() { return $this->searchBase("subnets.subnet4", null, "subnet"); } public function setSubnetAction($uuid) { return $this->setBase("subnet4", "subnets.subnet4", $uuid); } public function addSubnetAction() { return $this->addBase("subnet4", "subnets.subnet4"); } public function getSubnetAction($uuid = null) { return $this->getBase("subnet4", "subnets.subnet4", $uuid); } public function delSubnetAction($uuid) { return $this->delBase("subnets.subnet4", $uuid); } public function searchReservationAction() { return $this->searchBase("reservations.reservation", null, "hw_address"); } public function setReservationAction($uuid) { return $this->setBase("reservation", "reservations.reservation", $uuid); } public function addReservationAction() { return $this->addBase("reservation", "reservations.reservation"); } public function getReservationAction($uuid = null) { return $this->getBase("reservation", "reservations.reservation", $uuid); } public function delReservationAction($uuid) { return $this->delBase("reservations.reservation", $uuid); } public function downloadReservationsAction() { if ($this->request->isGet()) { $this->exportCsv($this->getModel()->reservations->reservation->asRecordSet(false, ['subnet'])); } } public function uploadReservationsAction() { if ($this->request->isPost() && $this->request->hasPost('payload')) { $subnets = []; foreach ($this->getModel()->subnets->subnet4->iterateItems() as $key => $node) { $subnets[(string)$node->subnet] = $key; } return $this->importCsv( 'reservations.reservation', $this->request->getPost('payload'), ['hw_address', 'subnet'], function (&$record) use ($subnets) { /* seek matching subnet */ if (!empty($record['ip_address'])) { foreach ($subnets as $subnet => $uuid) { if (Util::isIPInCIDR($record['ip_address'], $subnet)) { $record['subnet'] = $uuid; } } } } ); } else { return ['status' => 'failed']; } } public function searchPeerAction() { return $this->searchBase("ha_peers.peer", null, "name"); } public function setPeerAction($uuid) { return $this->setBase("peer", "ha_peers.peer", $uuid); } public function addPeerAction() { return $this->addBase("peer", "ha_peers.peer"); } public function getPeerAction($uuid = null) { return $this->getBase("peer", "ha_peers.peer", $uuid); } public function delPeerAction($uuid) { return $this->delBase("ha_peers.peer", $uuid); } }