mirror of
https://github.com/opnsense/plugins.git
synced 2026-05-28 04:34:15 -04:00
net/haproxy: extensive model enhancements
This commit is contained in:
parent
47aa039454
commit
0d26dd4a16
1 changed files with 307 additions and 31 deletions
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (C) 2016 Frank Wall
|
||||
* Copyright (C) 2016-2017 Frank Wall
|
||||
* Copyright (C) 2015 Deciso B.V.
|
||||
*
|
||||
* All rights reserved.
|
||||
|
|
@ -37,36 +37,6 @@ use OPNsense\Base\BaseModel;
|
|||
*/
|
||||
class HAProxy extends BaseModel
|
||||
{
|
||||
/**
|
||||
* retrieve frontend by number
|
||||
* @param $frontendid frontend number
|
||||
* @return null|BaseField frontend details
|
||||
*/
|
||||
public function getByFrontendID($frontendid)
|
||||
{
|
||||
foreach ($this->frontends->frontend->__items as $frontend) {
|
||||
if ((string)$frontendid === (string)$frontend->frontendid) {
|
||||
return $frontend;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* retrieve backend by number
|
||||
* @param $backendid frontend number
|
||||
* @return null|BaseField backend details
|
||||
*/
|
||||
public function getByBackendID($backendid)
|
||||
{
|
||||
foreach ($this->backends->backend->__items as $backend) {
|
||||
if ((string)$backendid === (string)$backend->backendid) {
|
||||
return $backend;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* check if module is enabled
|
||||
* @return bool is the HAProxy enabled (1 or more active frontends)
|
||||
|
|
@ -80,4 +50,310 @@ class HAProxy extends BaseModel
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* retrieve frontend by number
|
||||
* @param $uuid frontend number
|
||||
* @return null|BaseField frontend details
|
||||
*/
|
||||
public function getByFrontendID($uuid)
|
||||
{
|
||||
foreach ($this->frontends->frontend->__items as $frontend) {
|
||||
if ((string)$uuid === (string)$frontend->getAttributes()["uuid"]) {
|
||||
return $frontend;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* retrieve backend by number
|
||||
* @param $uuid backend number
|
||||
* @return null|BaseField backend details
|
||||
*/
|
||||
public function getByBackendID($uuid)
|
||||
{
|
||||
foreach ($this->backends->backend->__items as $backend) {
|
||||
if ((string)$uuid === (string)$backend->getAttributes()["uuid"]) {
|
||||
return $backend;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* retrieve server by number
|
||||
* @param $uuid server number
|
||||
* @return null|BaseField server details
|
||||
*/
|
||||
public function getByServerID($uuid)
|
||||
{
|
||||
foreach ($this->servers->server->__items as $server) {
|
||||
if ((string)$uuid === (string)$server->getAttributes()["uuid"]) {
|
||||
return $server;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* retrieve action by number
|
||||
* @param $uuid action number
|
||||
* @return null|BaseField action details
|
||||
*/
|
||||
public function getByActionID($uuid)
|
||||
{
|
||||
foreach ($this->actions->action->__items as $action) {
|
||||
if ((string)$uuid === (string)$action->getAttributes()["uuid"]) {
|
||||
return $action;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* retrieve ACL by number
|
||||
* @param $uuid ACL number
|
||||
* @return null|BaseField ACL details
|
||||
*/
|
||||
public function getByAclID($uuid)
|
||||
{
|
||||
foreach ($this->acls->acl->__items as $acl) {
|
||||
if ((string)$uuid === (string)$acl->getAttributes()["uuid"]) {
|
||||
return $acl;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* create a new ACL
|
||||
* @param string $name
|
||||
* @param string $description
|
||||
* @param string $expression
|
||||
* @param string $negate
|
||||
* @param string $value
|
||||
* @param string $urlparam
|
||||
* @param string $querybackend
|
||||
* @return string
|
||||
*/
|
||||
public function newAcl($name, $description = "", $expression, $negate = "0", $value, $urlparam = "", $queryBackend = "")
|
||||
{
|
||||
$acl = $this->acls->acl->Add();
|
||||
$uuid = $acl->getAttributes()['uuid'];
|
||||
$acl->name = $name;
|
||||
$acl->description = $description;
|
||||
$acl->expression = $expression;
|
||||
$acl->negate = $negate;
|
||||
$acl->value = $value;
|
||||
$acl->urlparam = $urlparam;
|
||||
$acl->queryBackend = $queryBackend;
|
||||
return $uuid;
|
||||
}
|
||||
|
||||
/**
|
||||
* create a new action
|
||||
* @param string $name
|
||||
* @param string $description
|
||||
* @param string $testType
|
||||
* @param string $linkedAcls
|
||||
* @param string $operator
|
||||
* @param string $type
|
||||
* @param string $useBackend
|
||||
* @param string $useServer
|
||||
* @param string $actionName
|
||||
* @param string $actionFind
|
||||
* @param string $actionValue
|
||||
* @return string
|
||||
*/
|
||||
public function newAction($name, $description = "", $testType, $linkedAcls = "", $operator = "and", $type, $useBackend = "", $useServer = "", $actionName, $actionFind, $actionValue)
|
||||
{
|
||||
$action = $this->actions->action->Add();
|
||||
$uuid = $action->getAttributes()['uuid'];
|
||||
$action->name = $name;
|
||||
$action->description = $description;
|
||||
$action->testType = $testType;
|
||||
$action->linkedAcls = $linkedAcls;
|
||||
$action->operator = $operator;
|
||||
$action->type = $type;
|
||||
$action->useBackend = $useBackend;
|
||||
$action->useServer = $useServer;
|
||||
$action->actionName = $actionName;
|
||||
$action->actionFind = $actionFind;
|
||||
$action->actionValue = $actionValue;
|
||||
return $uuid;
|
||||
}
|
||||
|
||||
/**
|
||||
* create a new server
|
||||
* @param string $name
|
||||
* @param string $description
|
||||
* @param string $address
|
||||
* @param string $port
|
||||
* @param string $mode
|
||||
* @param string $ssl
|
||||
* @param string $sslVerify
|
||||
* @param string $weight
|
||||
* @return string
|
||||
*/
|
||||
public function newServer($name, $description = "", $address, $port, $mode, $ssl = "0", $sslVerify = "1", $weight = "")
|
||||
{
|
||||
$srv = $this->servers->server->Add();
|
||||
$uuid = $srv->getAttributes()['uuid'];
|
||||
$srv->name = $name;
|
||||
$srv->description = $description;
|
||||
$srv->address = $address;
|
||||
$srv->port = $port;
|
||||
$srv->mode = $mode;
|
||||
$srv->ssl = $ssl;
|
||||
$srv->sslVerify = $sslVerify;
|
||||
$srv->weight = $weight;
|
||||
return $uuid;
|
||||
}
|
||||
|
||||
/**
|
||||
* create a new backend
|
||||
* @param string $enabled
|
||||
* @param string $name
|
||||
* @param string $description
|
||||
* @param string $mode
|
||||
* @param string $algorithm
|
||||
* @param string $linkedServers
|
||||
* @param string $linkedActions
|
||||
* @return string
|
||||
*/
|
||||
public function newBackend($enabled = "0", $name, $description = "", $mode, $algorithm, $linkedServers = "", $linkedActions = "")
|
||||
{
|
||||
$backend = $this->backends->backend->Add();
|
||||
$uuid = $backend->getAttributes()['uuid'];
|
||||
$backend->enabled = $enabled;
|
||||
$backend->name = $name;
|
||||
$backend->description = $description;
|
||||
$backend->mode = $mode;
|
||||
$backend->algorithm = $algorithm;
|
||||
$backend->linkedServers = $linkedServers;
|
||||
$backend->linkedActions = $linkedActions;
|
||||
return $uuid;
|
||||
}
|
||||
|
||||
/**
|
||||
* link an ACL to an action
|
||||
* @param string $acl_uuid
|
||||
* @param string $action_uuid
|
||||
* @return string
|
||||
*/
|
||||
public function linkAclToAction($acl_uuid, $action_uuid, $replace = false)
|
||||
{
|
||||
//$mdl = new HAProxy();
|
||||
// ACL must exist
|
||||
$acl = $this->getByAclID($acl_uuid);
|
||||
if ((string)$acl === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Action must exist
|
||||
$action = $this->getByActionID($action_uuid);
|
||||
if ((string)$action === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if the ACL is already linked to the Action.
|
||||
$linkedAcls = (string)$action->linkedAcls;
|
||||
if (!empty($linkedAcls) and !($replace)) {
|
||||
if (strpos($linkedAcls,$acl_uuid) !== false) {
|
||||
// Match! Nothing to do.
|
||||
return $acl_uuid;
|
||||
} else {
|
||||
// Extend existing string.
|
||||
$linkedAcls .= ",${acl_uuid}";
|
||||
}
|
||||
} else {
|
||||
$linkedAcls = $acl_uuid;
|
||||
}
|
||||
|
||||
// Add ACL
|
||||
$action->linkedAcls = $linkedAcls;
|
||||
|
||||
return $acl_uuid;
|
||||
}
|
||||
|
||||
/**
|
||||
* link a server to a backend
|
||||
* @param string $server_uuid
|
||||
* @param string $backend_uuid
|
||||
* @return string
|
||||
*/
|
||||
public function linkServerToBackend($server_uuid, $backend_uuid, $replace = false)
|
||||
{
|
||||
// Server must exist
|
||||
$server = $this->getByServerID($server_uuid);
|
||||
if ((string)$server === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Backend must exist
|
||||
$backend = $this->getByBackendID($backend_uuid);
|
||||
if ((string)$backend === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if the server is already linked to the backend.
|
||||
$linkedServers = (string)$backend->linkedServers;
|
||||
if (!empty($linkedServers) and !($replace)) {
|
||||
if (strpos($linkedServers,$server_uuid) !== false) {
|
||||
// Match! Nothing to do.
|
||||
return $server_uuid;
|
||||
} else {
|
||||
// Extend existing string.
|
||||
$linkedServers .= ",${server_uuid}";
|
||||
}
|
||||
} else {
|
||||
$linkedServers = $server_uuid;
|
||||
}
|
||||
|
||||
// Add server
|
||||
$backend->linkedServers = $linkedServers;
|
||||
|
||||
return $server_uuid;
|
||||
}
|
||||
|
||||
/**
|
||||
* link a action to a frontend
|
||||
* @param string $action_uuid
|
||||
* @param string $frontend_uuid
|
||||
* @return string
|
||||
*/
|
||||
public function linkActionToFrontend($action_uuid, $frontend_uuid, $replace = false)
|
||||
{
|
||||
// Action must exist
|
||||
$action = $this->getByActionID($action_uuid);
|
||||
if ((string)$action === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Frontend must exist
|
||||
$frontend = $this->getByFrontendID($frontend_uuid);
|
||||
if ((string)$frontend === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if the action is already linked to the frontend.
|
||||
$linkedActions = (string)$frontend->linkedActions;
|
||||
if (!empty($linkedActions) and !($replace)) {
|
||||
if (strpos($linkedActions,$action_uuid) !== false) {
|
||||
// Match! Nothing to do.
|
||||
return $action_uuid;
|
||||
} else {
|
||||
// Extend existing string.
|
||||
$linkedActions .= ",${action_uuid}";
|
||||
}
|
||||
} else {
|
||||
$linkedActions = $action_uuid;
|
||||
}
|
||||
|
||||
// Add action
|
||||
$frontend->linkedActions = $linkedActions;
|
||||
|
||||
return $action_uuid;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue