]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
baculum: Add os and version parameters to clients endpoint
authorMarcin Haba <marcin.haba@bacula.pl>
Tue, 26 Sep 2023 09:33:21 +0000 (11:33 +0200)
committerEric Bollengier <eric@baculasystems.com>
Tue, 31 Oct 2023 15:00:30 +0000 (16:00 +0100)
gui/baculum/protected/API/Pages/API/Clients.php

index 2681bc5c78c917a0e5f89084a8a88cd62f59d832..784847527f9ef7fc5a9adca7bc5aeeaa23a4a232 100644 (file)
@@ -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,