From ed7ff431c46637c8a26fa4c0bbd5a2942ff9d33d Mon Sep 17 00:00:00 2001 From: Marcin Haba Date: Tue, 26 Sep 2023 11:33:21 +0200 Subject: [PATCH] baculum: Add os and version parameters to clients endpoint --- .../protected/API/Pages/API/Clients.php | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gui/baculum/protected/API/Pages/API/Clients.php b/gui/baculum/protected/API/Pages/API/Clients.php index 2681bc5c7..784847527 100644 --- a/gui/baculum/protected/API/Pages/API/Clients.php +++ b/gui/baculum/protected/API/Pages/API/Clients.php @@ -22,6 +22,7 @@ use Baculum\API\Modules\BaculumAPIServer; use Baculum\API\Modules\ClientManager; +use Baculum\API\Modules\Database; use Baculum\Common\Modules\Errors\ClientError; /** @@ -39,6 +40,8 @@ class Clients extends BaculumAPIServer { $limit = $this->Request->contains('limit') ? intval($this->Request['limit']) : 0; $offset = $this->Request->contains('offset') && $misc->isValidInteger($this->Request['offset']) ? (int)$this->Request['offset'] : 0; $plugin = $this->Request->contains('plugin') && $misc->isValidAlphaNumeric($this->Request['plugin']) ? $this->Request['plugin'] : ''; + $os = $this->Request->contains('os') && $misc->isValidNameExt($this->Request['os']) ? $this->Request['os'] : ''; + $version = $this->Request->contains('version') && $misc->isValidColumn($this->Request['version']) ? $this->Request['version'] : ''; $mode = $this->Request->contains('overview') && $misc->isValidBooleanTrue($this->Request['overview']) ? ClientManager::CLIENT_RESULT_MODE_OVERVIEW : ClientManager::CLIENT_RESULT_MODE_NORMAL; $result = $this->getModule('bconsole')->bconsoleCommand($this->director, array('.client')); if ($result->exitcode === 0) { @@ -77,6 +80,24 @@ class Clients extends BaculumAPIServer { 'vals' => "%{$plugin}%" ]; } + + $db_params = $this->getModule('api_config')->getConfig('db'); + $regex_op = $db_params['type'] == Database::PGSQL_TYPE ? '~*' : 'REGEXP'; + if (!empty($os) || !empty($version)) { + $params['Client.Uname'] = []; + if (!empty($os)) { + $params['Client.Uname'][] = [ + 'operator' => $regex_op, + 'vals' => '^[[:alnum:]]+\\.[[:alnum:]]+\\.[[:alnum:]]+ +\\([[:alnum:]]+\\) +.*' . $os . '.*$' + ]; + } + if (!empty($version)) { + $params['Client.Uname'][] = [ + 'operator' => $regex_op, + 'vals' => '^.*' . $version . '.* +\\([[:alnum:]]+\\) *.*$' + ]; + } + } $clients = $this->getModule('client')->getClients( $limit, $offset, -- 2.47.3