diff --git a/README.md b/README.md index 9077c7dbc3..4d00713cd4 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Pandora FMS gives you the agility to find and solve problems quickly, scaling th ### Support -For community support you can visit our forums at https://pandorafms.com/community/ +For community support you can visit our forums at https://pandorafms.com/community/ Pandora FMS has a "commercial" solution, with different features, oriented to companies that do not want to spend time using open source solutions, but closed packaged products, with periodic updates and professional support. Its name is Pandora FMS Enterprise, and you can find more information about it at https://pandorafms.com. @@ -18,11 +18,11 @@ Installing Pandora FMS from sources is a complex task. Please visit our wiki and ### What is Pandora FMS? -Pandora FMS is an open source monitoring application whose origin dates back to 2004. It integrates in the same application the monitoring of different infrastructure elements: networks, applications, servers, web, and other specific data sources such as logs, WMI, Netflow or SNMP traps. +Pandora FMS is an open source monitoring application whose origin dates back to 2004. It integrates in the same application the monitoring of different infrastructure elements: networks, applications, servers, web, and other specific data sources such as logs, WMI, Netflow or SNMP traps. -It allows you to supervise systems and applications of all types, through remote monitoring or with software agents installed on the equipment to be monitored. +It allows you to supervise systems and applications of all types, through remote monitoring or with software agents installed on the equipment to be monitored. -Pandora FMS monitors your hardware, software, your multilayer system and, of course, your operating system. Pandora FMS can detect if a network interface is down or the movement of the market value of any new NASDAQ technology. If desired, Pandora FMS can send an SMS message when your system or application fails or when the value of Tesla's stock drops below $180. Pandora FMS will adapt to your systems and requirements, because it has been designed to be open, modular, multiplatform and easy to customize. +Pandora FMS monitors your hardware, software, your multilayer system and, of course, your operating system. Pandora FMS can detect if a network interface is down or the movement of the market value of any new NASDAQ technology. If desired, Pandora FMS can send an SMS message when your system or application fails or when the value of Tesla's stock drops below \$180. Pandora FMS will adapt to your systems and requirements, because it has been designed to be open, modular, multiplatform and easy to customize. Pandora FMS can be deployed over any OS, with specific agents for each platform. There are agents for Windows (2000, XP, 2003), GNU/Linux, Solaris, HP-UX, BSD, AIX, IPSO and OpenWRT. Pandora FMS not only gathers information through its agents, but it can also monitor any hardware system with TCP/IP connectivity, such as load balancing systems, routers, switches or printers, through SNMP and TCP/ICMP checks. diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index e6c89e7280..122d43ed05 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.776-240429 +Version: 7.0NG.776-240503 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index 1231a61256..03461beb0f 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.776-240429" +pandora_version="7.0NG.776-240503" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 63a453d09c..05d49335cb 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -1039,7 +1039,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.776'; -use constant AGENT_BUILD => '240429'; +use constant AGENT_BUILD => '240503'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 19c9b23cf6..037ebbe6bb 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -4,7 +4,7 @@ %global __os_install_post %{nil} %define name pandorafms_agent_linux %define version 7.0NG.776 -%define release 240429 +%define release 240503 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.redhat_bin.el8.spec b/pandora_agents/unix/pandora_agent.redhat_bin.el8.spec index bc1eb2a014..d3558b0026 100644 --- a/pandora_agents/unix/pandora_agent.redhat_bin.el8.spec +++ b/pandora_agents/unix/pandora_agent.redhat_bin.el8.spec @@ -5,7 +5,7 @@ %define name pandorafms_agent_linux_bin %define source_name pandorafms_agent_linux %define version 7.0NG.776 -%define release 240429 +%define release 240503 %define debug_package %{nil} Summary: Pandora FMS Linux agent, binary version diff --git a/pandora_agents/unix/pandora_agent.redhat_bin.el9.spec b/pandora_agents/unix/pandora_agent.redhat_bin.el9.spec index 3061c38b65..a7d6c6a620 100644 --- a/pandora_agents/unix/pandora_agent.redhat_bin.el9.spec +++ b/pandora_agents/unix/pandora_agent.redhat_bin.el9.spec @@ -5,7 +5,7 @@ %define name pandorafms_agent_linux_bin %define source_name pandorafms_agent_linux %define version 7.0NG.776 -%define release 240429 +%define release 240503 %define debug_package %{nil} Summary: Pandora FMS Linux agent, binary version diff --git a/pandora_agents/unix/pandora_agent.redhat_bin.spec b/pandora_agents/unix/pandora_agent.redhat_bin.spec index 747512944c..db99b6fbf2 100644 --- a/pandora_agents/unix/pandora_agent.redhat_bin.spec +++ b/pandora_agents/unix/pandora_agent.redhat_bin.spec @@ -5,7 +5,7 @@ %define name pandorafms_agent_linux_bin %define source_name pandorafms_agent_linux %define version 7.0NG.776 -%define release 240429 +%define release 240503 Summary: Pandora FMS Linux agent, binary version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 85a2f2ef51..250f327421 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -4,7 +4,7 @@ %global __os_install_post %{nil} %define name pandorafms_agent_linux %define version 7.0NG.776 -%define release 240429 +%define release 240503 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 4275066d29..aae9e94d1a 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.776" -PI_BUILD="240429" +PI_BUILD="240503" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 317b22feb6..37d4289b18 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{240429} +{240503} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index b24daf8831..85da7bbecd 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.776 Build 240429") +#define PANDORA_VERSION ("7.0NG.776 Build 240503") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index dfc1f21d6d..44c1b8d6a1 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Pandora FMS" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.776(Build 240429))" + VALUE "ProductVersion", "(7.0NG.776(Build 240503))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 238ebd0bc6..e947bc0573 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.776-240429 +Version: 7.0NG.776-240503 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index c22c59c057..c6b8402407 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.776-240429" +pandora_version="7.0NG.776-240503" package_pear=0 package_pandora=1 diff --git a/pandora_console/ajax.php b/pandora_console/ajax.php index a5dcf2cb0d..db90fe2fe4 100644 --- a/pandora_console/ajax.php +++ b/pandora_console/ajax.php @@ -75,23 +75,19 @@ if (empty($_REQUEST) === true) { } // Hash login process. -if (isset($_GET['loginhash']) === true) { - $loginhash_data = get_parameter('loginhash_data', ''); - $loginhash_user = str_rot13(get_parameter('loginhash_user', '')); - - if ($config['loginhash_pwd'] != '' - && $loginhash_data == md5( - $loginhash_user.io_output_password($config['loginhash_pwd']) - ) - ) { - db_logon($loginhash_user, $_SERVER['REMOTE_ADDR']); - $_SESSION['id_usuario'] = $loginhash_user; - $config['id_user'] = $loginhash_user; +if (isset($_POST['auth_token']) === true && (bool) $config['JWT_signature'] !== false) { + include_once $config['homedir'].'/include/class/JWTRepository.class.php'; + $jwt = new JWTRepository($config['JWT_signature']); + if ($jwt->setToken($_POST['auth_token']) && $jwt->validate()) { + $id_user = $jwt->payload()->get('id_user'); + db_logon($id_user, $_SERVER['REMOTE_ADDR']); + $_SESSION['id_usuario'] = $id_user; + $config['id_user'] = $id_user; } else { include_once 'general/login_page.php'; db_pandora_audit( AUDIT_LOG_USER_REGISTRATION, - 'Loginhash failed', + 'Login token failed', 'system' ); while (ob_get_length() > 0) { diff --git a/pandora_console/composer.json b/pandora_console/composer.json index 3b05d0f000..8514865f2d 100644 --- a/pandora_console/composer.json +++ b/pandora_console/composer.json @@ -28,7 +28,9 @@ "php-di/php-di": "^7.0", "zircote/swagger-php": "^4.8", "doctrine/annotations": "^2.0", - "ramsey/uuid": "^4.7" + "ramsey/uuid": "^4.7", + "lcobucci/jwt": "^5.2", + "lcobucci/clock": "^3.2" }, "repositories": { "phpchartjs": { diff --git a/pandora_console/composer.lock b/pandora_console/composer.lock index 171c94a267..3ec4ac1312 100644 --- a/pandora_console/composer.lock +++ b/pandora_console/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0d777bd9c0ca68c9ec0fe911e71b1b2a", + "content-hash": "c7549451bb31a635714731144a995123", "packages": [ { "name": "amphp/amp", @@ -1553,6 +1553,143 @@ }, "time": "2023-11-08T14:08:06+00:00" }, + { + "name": "lcobucci/clock", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/clock.git", + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715", + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715", + "shasum": "" + }, + "require": { + "php": "~8.2.0 || ~8.3.0", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "infection/infection": "^0.27", + "lcobucci/coding-standard": "^11.0.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.25", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.13", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^10.2.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com" + } + ], + "description": "Yet another clock abstraction", + "support": { + "issues": "https://github.com/lcobucci/clock/issues", + "source": "https://github.com/lcobucci/clock/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2023-11-17T17:00:27+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "5.2.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "0ba88aed12c04bd2ed9924f500673f32b67a6211" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/0ba88aed12c04bd2ed9924f500673f32b67a6211", + "reference": "0ba88aed12c04bd2ed9924f500673f32b67a6211", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-sodium": "*", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "psr/clock": "^1.0" + }, + "require-dev": { + "infection/infection": "^0.27.0", + "lcobucci/clock": "^3.0", + "lcobucci/coding-standard": "^11.0", + "phpbench/phpbench": "^1.2.9", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10.7", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.10", + "phpstan/phpstan-strict-rules": "^1.5.0", + "phpunit/phpunit": "^10.2.6" + }, + "suggest": { + "lcobucci/clock": ">= 3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/5.2.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2023-11-20T21:17:42+00:00" + }, { "name": "monolog/monolog", "version": "3.5.0", @@ -2307,6 +2444,54 @@ }, "time": "2021-02-03T23:26:27+00:00" }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, { "name": "psr/container", "version": "2.0.2", @@ -4338,5 +4523,5 @@ "platform-overrides": { "php": "8.2" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.2.0" } diff --git a/pandora_console/extensions/db_status.php b/pandora_console/extensions/db_status.php index d62ea49561..6fc5085e5b 100755 --- a/pandora_console/extensions/db_status.php +++ b/pandora_console/extensions/db_status.php @@ -50,14 +50,7 @@ function extension_db_status() } ui_print_info_message( - " - " . - __('This extension checks the DB is correct. Because sometimes the old DB from a migration has not some fields in the tables or the data is changed.') . - "
" . - " - " . - __('At the moment the checks is for MySQL/MariaDB.') . - "
" . - " - " . - __('User must have Select, Drop, Create and References privileges.') + ' - '.__('This extension checks the DB is correct. Because sometimes the old DB from a migration has not some fields in the tables or the data is changed.').'
'.' - '.__('At the moment the checks is for MySQL/MariaDB.').'
'.' - '.__('User must have Select, Drop, Create and References privileges.') ); echo "
"; @@ -195,7 +188,7 @@ function extension_db_status_execute_checks($db_user, $db_password, $db_host, $d try { $query = "SELECT IF(EXISTS(SELECT 1 FROM information_schema.SCHEMATA WHERE schema_name = '$db_name'), 'true', 'false') AS result"; - if ($config['mysqli']) { + if ($config['mysqli']) { $exist_db = mysqli_fetch_assoc(mysqli_query($connection_test, $query))['result']; } else { $exist_db = mysql_fetch_assoc(mysqli_query($connection_test, $query))['result']; @@ -204,7 +197,7 @@ function extension_db_status_execute_checks($db_user, $db_password, $db_host, $d ui_print_error_message(__("There was a problem during verification of the existence of the `$db_name` table")); return; } - + if ($exist_db == 'true') { ui_print_error_message(__("The testing DB `$db_name` already exists")); return; @@ -231,13 +224,13 @@ function extension_db_status_execute_checks($db_user, $db_password, $db_host, $d if (check_ref_privileges($connection_test) == 0) { drop_database($connection_test, $db_name); - ui_print_error_message(__("Unable to create references with the provided user please check its privileges")); + ui_print_error_message(__('Unable to create references with the provided user please check its privileges')); return; } if (check_explain_privileges($connection_test) == 0) { drop_database($connection_test, $db_name); - ui_print_error_message(__("Unable to explain with the provided user please check its privileges")); + ui_print_error_message(__('Unable to explain with the provided user please check its privileges')); return; } @@ -261,7 +254,7 @@ function extension_db_status_execute_checks($db_user, $db_password, $db_host, $d if (!$install_tables) { ui_print_error_message(__('Unsuccessful installed tables into the testing DB')); return; - } + } extension_db_check_tables_differences( $connection_test, @@ -269,7 +262,7 @@ function extension_db_status_execute_checks($db_user, $db_password, $db_host, $d $db_name, $config['dbname'] ); - + drop_database($connection_test, $db_name); } @@ -348,7 +341,7 @@ function extension_db_check_tables_differences( if ($config['mysqli'] === true) { mysqli_select_db($connection_test, $db_name_test); $result = mysqli_query($connection_test, 'SHOW CREATE TABLE '.$table); - $create_query = mysqli_fetch_assoc($result)["Create Table"]; + $create_query = mysqli_fetch_assoc($result)['Create Table']; mysqli_free_result($result); ui_print_info_message( __('You can execute this SQL query for to fix.').'
'.'
'.$create_query.'
' @@ -356,7 +349,7 @@ function extension_db_check_tables_differences( } else { mysql_select_db($db_name_test, $connection_test); $result = mysql_query('SHOW CREATE TABLE '.$table, $connection_test); - $create_query = mysqli_fetch_assoc($result)["Create Table"]; + $create_query = mysqli_fetch_assoc($result)['Create Table']; mysql_free_result($result); ui_print_info_message( __('You can execute this SQL query for to fix.').'
'.'
'.$create_query.'
' @@ -539,6 +532,7 @@ function extension_db_status_execute_sql_file($url, $connection) } else { $result = mysql_query($query, $connection); } + if (!$result) { echo mysqli_error($connection); // Uncomment for debug @@ -563,19 +557,19 @@ function check_explain_privileges($connection) global $config; $has_privileges = 1; - $explain_check= "EXPLAIN tb1"; + $explain_check = 'EXPLAIN tb1'; - $create_tb1= "CREATE TABLE tb1 ( + $create_tb1 = 'CREATE TABLE tb1 ( id INT AUTO_INCREMENT PRIMARY KEY - )"; + )'; drop_database($connection, 'pandora_tmp_privilege_check'); try { if ($config['mysqli']) { - mysqli_query($connection, "CREATE DATABASE `pandora_tmp_privilege_check`"); + mysqli_query($connection, 'CREATE DATABASE `pandora_tmp_privilege_check`'); } else { - mysql_query("CREATE DATABASE `pandora_tmp_privilege_check`", $connection); + mysql_query('CREATE DATABASE `pandora_tmp_privilege_check`', $connection); } } catch (Exception $e) { ui_print_error_message(__('There was an error creating the DB during reference check')); @@ -584,9 +578,9 @@ function check_explain_privileges($connection) try { if ($config['mysqli'] === true) { - mysqli_select_db($connection, "pandora_tmp_privilege_check"); + mysqli_select_db($connection, 'pandora_tmp_privilege_check'); } else { - mysql_select_db("reference_check", $connection); + mysql_select_db('reference_check', $connection); } } catch (Exception $e) { ui_print_error_message(__('There was an error selecting the DB during reference check')); @@ -600,8 +594,8 @@ function check_explain_privileges($connection) $result = mysql_query($create_tb1, $connection); } - if(!$result){ - throw new Exception("Error on explain check: " . $connection->error); + if (!$result) { + throw new Exception('Error on explain check: '.$connection->error); } if ($config['mysqli'] === true) { @@ -610,10 +604,9 @@ function check_explain_privileges($connection) $result = mysql_query($explain_check, $connection); } - if(!$result){ - throw new Exception("Error on explain check: " . $connection->error); + if (!$result) { + throw new Exception('Error on explain check: '.$connection->error); } - } catch (Exception $e) { $has_privileges = 0; } finally { @@ -630,31 +623,31 @@ function check_drop_privileges($connection) try { if ($config['mysqli']) { - $create_db = mysqli_query($connection, "CREATE DATABASE IF NOT EXISTS`pandora_tmp_privilege_check`"); + $create_db = mysqli_query($connection, 'CREATE DATABASE IF NOT EXISTS`pandora_tmp_privilege_check`'); } else { - $create_db = mysql_query("CREATE DATABASE IF NOT EXISTS `pandora_tmp_privilege_check`", $connection); + $create_db = mysql_query('CREATE DATABASE IF NOT EXISTS `pandora_tmp_privilege_check`', $connection); } } catch (Exception $e) { $error_message = $e->getMessage(); } if (!$create_db) { - if (stripos($error_message, "access denied for user") !== false) { + if (stripos($error_message, 'access denied for user') !== false) { preg_match("/'.+?'\@'.+?'/", $error_message, $error_user); $error_user = $error_user[0]; - ui_print_error_message(__("Unable to create databases with the provided user please check its privileges")); + ui_print_error_message(__('Unable to create databases with the provided user please check its privileges')); return 0; } - + ui_print_error_message(__('There was an error creating the DB during drop check')); return 0; } - + try { if ($config['mysqli'] === true) { - mysqli_select_db($connection, "pandora_tmp_privilege_check"); + mysqli_select_db($connection, 'pandora_tmp_privilege_check'); } else { - mysql_select_db("reference_check", $connection); + mysql_select_db('reference_check', $connection); } } catch (Exception $e) { ui_print_error_message(__('There was an error selecting the DB during drop check')); @@ -666,9 +659,7 @@ function check_drop_privileges($connection) } catch (Exception $e) { $has_privileges = 0; ui_print_error_message( - __("Unable to drop databases with the provided user please check its privileges.") . - "
" . - __("Test databases may have been left over due to lack of drop privileges.") + __('Unable to drop databases with the provided user please check its privileges.').'
'.__('Test databases may have been left over due to lack of drop privileges.') ); } finally { return $has_privileges; @@ -683,21 +674,21 @@ function check_ref_privileges($connection) drop_database($connection, 'pandora_tmp_privilege_check'); - $create_tb1= "CREATE TABLE tb1 ( + $create_tb1 = 'CREATE TABLE tb1 ( id INT AUTO_INCREMENT PRIMARY KEY - )"; + )'; - $create_tb2 = "CREATE TABLE tb2 ( + $create_tb2 = 'CREATE TABLE tb2 ( id INT AUTO_INCREMENT PRIMARY KEY, id_tb1 INT, FOREIGN KEY (id_tb1) REFERENCES tb2(id) - )"; - + )'; + try { if ($config['mysqli']) { - mysqli_query($connection, "CREATE DATABASE `pandora_tmp_privilege_check`"); + mysqli_query($connection, 'CREATE DATABASE `pandora_tmp_privilege_check`'); } else { - mysql_query("CREATE DATABASE `pandora_tmp_privilege_check`", $connection); + mysql_query('CREATE DATABASE `pandora_tmp_privilege_check`', $connection); } } catch (Exception $e) { ui_print_error_message(__('There was an error creating the DB during reference check')); @@ -706,9 +697,9 @@ function check_ref_privileges($connection) try { if ($config['mysqli'] === true) { - mysqli_select_db($connection, "pandora_tmp_privilege_check"); + mysqli_select_db($connection, 'pandora_tmp_privilege_check'); } else { - mysql_select_db("reference_check", $connection); + mysql_select_db('reference_check', $connection); } } catch (Exception $e) { ui_print_error_message(__('There was an error selecting the DB during reference check')); @@ -722,8 +713,8 @@ function check_ref_privileges($connection) $result = mysql_query($create_tb1, $connection); } - if(!$result){ - throw new Exception("Error on reference check: " . $connection->error); + if (!$result) { + throw new Exception('Error on reference check: '.$connection->error); } if ($config['mysqli'] === true) { @@ -732,10 +723,9 @@ function check_ref_privileges($connection) $result = mysql_query($create_tb2, $connection); } - if(!$result){ - throw new Exception("Error on reference check: " . $connection->error); + if (!$result) { + throw new Exception('Error on reference check: '.$connection->error); } - } catch (Exception $e) { $has_privileges = 0; } finally { diff --git a/pandora_console/extensions/realtime_graphs/ajax.php b/pandora_console/extensions/realtime_graphs/ajax.php index f6dcfc508d..4d1d2e816f 100644 --- a/pandora_console/extensions/realtime_graphs/ajax.php +++ b/pandora_console/extensions/realtime_graphs/ajax.php @@ -55,7 +55,7 @@ switch ($graph) { if ($os == 'windows') { $data = exec('(FOR /F "skip=2 tokens=2 delims=\," %P IN (\'typeperf "\\Process(httpd)\\% processor time" -sc 1\') DO @echo %P)|find /V /I "..."'); } else { - $apache = exec("ps aux | grep apache2 | grep -v safe | grep -v grep && echo 1 || echo 0") == 1 ? "apache2" : "apache"; + $apache = exec('ps aux | grep apache2 | grep -v safe | grep -v grep && echo 1 || echo 0') == 1 ? 'apache2' : 'apache'; $data = exec("ps aux | grep $apache | grep -v safe | grep -v grep | awk '{ sum+=$3 } END { print sum }'"); } break; diff --git a/pandora_console/extras/discovery/DiscoveryApplicationsMigrateCodes.ini b/pandora_console/extras/discovery/DiscoveryApplicationsMigrateCodes.ini index c4b4591ce2..5cbd75d0de 100644 --- a/pandora_console/extras/discovery/DiscoveryApplicationsMigrateCodes.ini +++ b/pandora_console/extras/discovery/DiscoveryApplicationsMigrateCodes.ini @@ -1,4 +1,4 @@ -pandorafms.vmware=3d1785e1baa07db0a40b9e47bb30472c +pandorafms.vmware=999bbda7bbcc313aee81d6816f8a5c0e pandorafms.mysql=33d470c7492214d4b384ed307e81adf4 pandorafms.vmware=1deafce1d55d3574645d8b136104e9ad pandorafms.mysql=ca7dd8b80a1a03a25eb0fb077818ad63 diff --git a/pandora_console/extras/mr/69.sql b/pandora_console/extras/mr/69.sql index 45047f9149..534cef73ef 100644 --- a/pandora_console/extras/mr/69.sql +++ b/pandora_console/extras/mr/69.sql @@ -7759,4 +7759,9 @@ SET @short_name = 'pandorafms.proxmox'; SELECT @id_app := `id_app` FROM `tdiscovery_apps` WHERE `short_name` = @short_name; UPDATE `tdiscovery_apps_executions` SET `execution` = ''_exec1_' --conf '_tempfileProxmox_'' WHERE `id_app` = @id_app; +INSERT INTO `tconfig` (`token`, `value`) VALUES ('JWT_signature', 1); +DELETE FROM tconfig WHERE `token` = 'loginhash_pwd'; + +UPDATE `tdiscovery_apps` SET `version` = '1.5' WHERE `short_name` = 'pandorafms.vmware'; + COMMIT; \ No newline at end of file diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php index cdbe26d89d..01688effaa 100644 --- a/pandora_console/godmode/agentes/configurar_agente.php +++ b/pandora_console/godmode/agentes/configurar_agente.php @@ -1065,6 +1065,7 @@ if ($update_agent) { } $field_values = []; + $update_custom_result = false; foreach ($fields as $field) { $field_value = get_parameter_post('customvalue_'.$field['id_field'], ''); @@ -1115,7 +1116,7 @@ if ($update_agent) { ); if ($update_custom == 1) { - $update_custom_result = 1; + $update_custom_result = true; } } } @@ -1157,6 +1158,7 @@ if ($update_agent) { } } + $agent_data = agents_get_agent($id_agente); $values = [ 'disabled' => $disabled, 'id_parent' => $id_parent, @@ -1184,6 +1186,14 @@ if ($update_agent) { 'vul_scan_enabled' => $vul_scan_enabled, 'ignore_unknown' => $ignore_unknown, ]; + // Update change fix on ticket 13501 to no show errors when press button update with out change anything. + $update_change = false; + foreach ($values as $key => $value) { + if (isset($agent_data[$key]) === true && $agent_data[$key] !== $value) { + $update_agent = true; + break; + } + } if (empty($repeated_name) === true) { $values['nombre'] = $nombre_agente; @@ -1195,7 +1205,7 @@ if ($update_agent) { } $result = (bool) db_process_sql_update('tagente', $values, ['id_agente' => $id_agente]); - if ($result === false && $update_custom_result == false) { + if ($result === false && $update_custom_result === false && $update_change === true) { ui_print_error_message( __('There was a problem updating the agent') ); diff --git a/pandora_console/godmode/agentes/modificar_agente.php b/pandora_console/godmode/agentes/modificar_agente.php index 2718a52efd..662bdd6e72 100644 --- a/pandora_console/godmode/agentes/modificar_agente.php +++ b/pandora_console/godmode/agentes/modificar_agente.php @@ -763,7 +763,7 @@ if ($agents !== false) { $agent['id_agente'] ); $agentViewUrl = sprintf( - 'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=%s', + 'index.php?sec=estado&sec2=godmode/agentes/configurar_agente&id_agente=%s', $agent['id_agente'] ); $agentAlertUrl = sprintf( diff --git a/pandora_console/godmode/reporting/graph_builder.graph_editor.php b/pandora_console/godmode/reporting/graph_builder.graph_editor.php index 705e7a8fe4..1938c25465 100644 --- a/pandora_console/godmode/reporting/graph_builder.graph_editor.php +++ b/pandora_console/godmode/reporting/graph_builder.graph_editor.php @@ -154,14 +154,16 @@ $table->data[0][1] = html_print_label_input_block( echo ''; echo ""; -echo ""; +echo "
"; echo ''; echo ''; diff --git a/pandora_console/godmode/reporting/reporting_builder.item_editor.php b/pandora_console/godmode/reporting/reporting_builder.item_editor.php index 5af45c53c4..8d26c83443 100755 --- a/pandora_console/godmode/reporting/reporting_builder.item_editor.php +++ b/pandora_console/godmode/reporting/reporting_builder.item_editor.php @@ -1459,7 +1459,7 @@ $class = 'databox filters'; '; + $legend .= '
'.html_print_input( [ 'type' => 'select_multiple_modules_filtered', 'uniqId' => 'modules', 'class' => 'flex flex-row', - 'searchBar' => false, + 'searchBar' => true, + 'searchBarAgents' => false, + 'searchBarModules' => true, 'placeholderAgents' => __('Search agent name'), ] ).' @@ -2318,7 +2318,9 @@ if (is_metaconsole() === true) { $params['add_none_module'] = true; $params['use_hidden_input_idagent'] = true; $params['hidden_input_idagent_id'] = 'hidden-id_agent'; + $params['size'] = 40; if ($meta) { + $params['size'] = 44; $params['use_input_id_server'] = true; $params['input_id_server_id'] = 'hidden-server_id'; $params['metaconsole_enabled'] = true; @@ -6645,26 +6647,6 @@ function create_custom_graph() { $("#meta_target_servers").css('display', 'inline'); } else { - var hash_data; - var params1 = []; - params1.push("get_metaconsole_hash_data=1"); - params1.push("server_name=" + target_server); - params1.push("page=include/ajax/reporting.ajax"); - jQuery.ajax ({ - data: params1.join ("&"), - type: 'POST', - url: action= - - + "/ajax.php", - async: false, - timeout: 10000, - success: function (data) { - hash_data = data; - } - }); - var server_url; var params1 = []; params1.push("get_metaconsole_server_url=1"); @@ -6690,7 +6672,7 @@ function create_custom_graph() { } }); - window.location.href = server_url + "/index.php?sec=reporting&sec2=godmode/reporting/graph_builder&create=Create graph" + hash_data; + redirectNode(server_url + "/index.php?sec=reporting&sec2=godmode/reporting/graph_builder&create=Create graph", "_self"); } - + "/ajax.php", - async: false, - timeout: 10000, - success: function (data) { - hash_data = data; - } - }); - var server_url; var params1 = []; params1.push("get_metaconsole_server_url=1"); @@ -6769,7 +6726,7 @@ function edit_custom_graph() { } }); - window.location.href = server_url + "index.php?sec=reporting&sec2=godmode/reporting/graph_builder&edit_graph=1&id=" + id_element_graph + hash_data; + redirectNode(server_url + "index.php?sec=reporting&sec2=godmode/reporting/graph_builder&edit_graph=1&id=" + id_element_graph, "_self"); diff --git a/pandora_console/godmode/reporting/visual_console_builder.data.php b/pandora_console/godmode/reporting/visual_console_builder.data.php index a1e49d7206..58e20f2874 100644 --- a/pandora_console/godmode/reporting/visual_console_builder.data.php +++ b/pandora_console/godmode/reporting/visual_console_builder.data.php @@ -260,9 +260,8 @@ $layoutSizeElements[] = html_print_button( false, '', [ - 'icon' => 'cog', - 'mode' => 'link', 'value' => 'modsize', + 'class' => 'buttonButton mini', ], true ); @@ -275,9 +274,8 @@ $layoutSizeElements[] = html_print_button( false, '', [ - 'icon' => 'cog', - 'mode' => 'link', 'value' => 'modsize', + 'class' => 'buttonButton mini', ], true ); @@ -287,7 +285,7 @@ $table->data[4][] = html_print_label_input_block( __('Layout size'), html_print_div( [ - 'class' => 'flex flex-items-center', + 'class' => 'flex flex-space-around w600px', 'content' => implode('', $layoutSizeElements), ], true diff --git a/pandora_console/godmode/setup/file_manager.php b/pandora_console/godmode/setup/file_manager.php index 8ccddde606..93b83200c9 100644 --- a/pandora_console/godmode/setup/file_manager.php +++ b/pandora_console/godmode/setup/file_manager.php @@ -121,6 +121,7 @@ if ($upload_file === true) { MIME_TYPES['jpg'], MIME_TYPES['png'], MIME_TYPES['gif'], + MIME_TYPES['svg'], ] ); } diff --git a/pandora_console/godmode/setup/os.list.php b/pandora_console/godmode/setup/os.list.php index 2c722aade0..5ec791baca 100644 --- a/pandora_console/godmode/setup/os.list.php +++ b/pandora_console/godmode/setup/os.list.php @@ -219,7 +219,9 @@ echo ''; $('#aux').text(''); } else { $('#aux').dialog('close'); - location.reload(); + let url = new URL(window.location.href); + url.searchParams.set('message', r.url_message) + window.location.href = url.href; } }, error: function(e) { diff --git a/pandora_console/godmode/setup/setup_auth.php b/pandora_console/godmode/setup/setup_auth.php index df4d75d6aa..e17d13806f 100644 --- a/pandora_console/godmode/setup/setup_auth.php +++ b/pandora_console/godmode/setup/setup_auth.php @@ -196,14 +196,20 @@ if (is_ajax() === true) { $row['name'] = __('Admin LDAP password'); $row['control'] = html_print_input_password( 'ldap_admin_pass', - io_output_password($config['ldap_admin_pass']), + (empty(io_output_password($config['ldap_admin_pass'])) === false) ? '*****' : '', $alt = '', 60, 100, true, false, false, - 'w400px-important' + 'w400px-important', + 'on', + false, + '', + true, + false, + true ); $table->data['ldap_admin_pass'] = $row; diff --git a/pandora_console/godmode/setup/setup_general.php b/pandora_console/godmode/setup/setup_general.php index b77ffabbee..e6bf3e4a2c 100644 --- a/pandora_console/godmode/setup/setup_general.php +++ b/pandora_console/godmode/setup/setup_general.php @@ -267,18 +267,6 @@ $table->data[$i][] = html_print_label_input_block( ); $table->data[$i++][] = html_print_label_input_block( - __('Auto login (hash) password'), - html_print_input_password( - 'loginhash_pwd', - io_output_password($config['loginhash_pwd']), - '', - 15, - 15, - true - ) -); - -$table->data[$i][] = html_print_label_input_block( __('Time source'), html_print_select( $sources, diff --git a/pandora_console/include/ajax/custom_fields.php b/pandora_console/include/ajax/custom_fields.php index fa01ef7f59..8e4f7d5dbb 100644 --- a/pandora_console/include/ajax/custom_fields.php +++ b/pandora_console/include/ajax/custom_fields.php @@ -328,23 +328,6 @@ if (check_login()) { if (isset($array_nodes) && is_array($array_nodes)) { $hash_array_nodes = []; foreach ($array_nodes as $key => $server) { - $pwd = $server['auth_token']; - $auth_serialized = json_decode($pwd, true); - - if (is_array($auth_serialized)) { - $pwd = $auth_serialized['auth_token']; - $api_password = $auth_serialized['api_password']; - $console_user = $auth_serialized['console_user']; - $console_password = $auth_serialized['console_password']; - } - - $user = $config['id_user']; - $user_rot13 = str_rot13($config['id_user']); - $hashdata = $user.$pwd; - $hashdata = md5($hashdata); - $url_hash = '&loginhash=auto&loginhash_data='.$hashdata.'&loginhash_user='.$user_rot13; - - $hash_array_nodes[$server['id']]['hashurl'] = $url_hash; $hash_array_nodes[$server['id']]['server_url'] = $server['server_url']; } } @@ -355,7 +338,7 @@ if (check_login()) { $image_status = agents_get_image_status($values['status']); // Link nodes. if (is_metaconsole() === true) { - $agent_link = ''; + $agent_link = ''; $agent_alias = ui_print_truncate_text( $values['alias'], 'agent_small', diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index a063ef5c8b..b053d304b6 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -2541,7 +2541,7 @@ if ($drawConsoleSound === true) { true, [ 'title' => __('No alerts discovered'), - 'class' => 'invert_filter', + 'class' => '', ] ); $output .= ''; diff --git a/pandora_console/include/ajax/module.php b/pandora_console/include/ajax/module.php index 37fac4ccac..86ea0cb301 100755 --- a/pandora_console/include/ajax/module.php +++ b/pandora_console/include/ajax/module.php @@ -55,6 +55,7 @@ if (check_login()) { $get_id_tag = (bool) get_parameter('get_id_tag', 0); $get_type = (bool) get_parameter('get_type', 0); $list_modules = (bool) get_parameter('list_modules', 0); + $list_snmp_modules = (bool) get_parameter('list_snmp_modules', 0); $get_agent_modules_json_by_name = (bool) get_parameter( 'get_agent_modules_json_by_name', 0 @@ -1538,6 +1539,133 @@ if (check_login()) { unset($table_data); } + if ($list_snmp_modules) { + include_once $config['homedir'].'/include/functions_graph.php'; + $agent = get_parameter('agent'); + $id_agente = $agent; + $paginate_module = false; + if (isset($config['paginate_module']) === true) { + $paginate_module = (bool) $config['paginate_module']; + } + + $network_interfaces_by_agents = agents_get_network_interfaces([$agent], false, $paginate_module, get_parameter('offset', 0)); + $count_network_incerfaces = agents_get_network_interfaces([$agent], false, false, 0, true); + $network_interfaces = []; + if (empty($network_interfaces_by_agents) === false && empty($network_interfaces_by_agents[$id_agente]) === false) { + $network_interfaces = $network_interfaces_by_agents[$id_agente]['interfaces']; + } + + if (empty($network_interfaces) === false) { + $table_interface = new stdClass(); + $table_interface->id = 'agent_interface_info'; + $table_interface->class = 'info_table'; + $table_interface->width = '100%'; + $table_interface->style = []; + $table_interface->style['interface_event_graph'] = 'width: 35%;'; + + $table_interface->head = []; + $options = [ + 'class' => 'closed', + 'style' => 'cursor:pointer;', + ]; + $table_interface->data = []; + $event_text_cont = 0; + + foreach ($network_interfaces as $interface_name => $interface) { + if (empty($interface['traffic']) === false) { + $permission = check_acl_one_of_groups($config['id_user'], $all_groups, 'RR'); + + if ($permission) { + $params = [ + 'interface_name' => $interface_name, + 'agent_id' => $id_agente, + 'traffic_module_in' => $interface['traffic']['in'], + 'traffic_module_out' => $interface['traffic']['out'], + ]; + $params_json = json_encode($params); + $params_encoded = base64_encode($params_json); + $win_handle = dechex(crc32($interface['status_module_id'].$interface_name)); + $graph_link = ""; + $graph_link .= html_print_image( + 'images/chart.png', + true, + [ + 'title' => __('Interface traffic'), + 'class' => 'invert_filter', + ] + ).''; + } else { + $graph_link = ''; + } + } else { + $graph_link = ''; + } + + $content = [ + 'id_agent_module' => $interface['status_module_id'], + 'id_group' => $id_group, + 'period' => SECONDS_1DAY, + 'time_from' => '00:00:00', + 'time_to' => '00:00:00', + 'sizeForTicks' => 250, + 'height_graph' => 40, + [ + ['id_agent_module' => $interface['status_module_id']], + ] + ]; + + $e_graph = \reporting_module_histogram_graph( + ['datetime' => time()], + $content + ); + + $sqlLast_contact = sprintf( + ' + SELECT timestamp + FROM tagente_estado + WHERE id_agente_modulo = '.$interface['status_module_id'] + ); + + $last_contact = db_get_all_rows_sql($sqlLast_contact); + $last_contact = array_shift($last_contact); + $last_contact = array_shift($last_contact); + + $data = []; + $data['interface_name'] = ''.$interface_name.''; + $data['interface_status'] = $interface['status_image']; + $data['interface_graph'] = $graph_link; + $data['interface_ip'] = $interface['ip']; + $data['interface_mac'] = $interface['mac']; + $data['last_contact'] = __('Last contact: ').$last_contact; + $data['interface_event_graph'] = $e_graph['chart']; + + $table_interface->data[] = $data; + } + + if ($paginate_module === true) { + ui_pagination( + $count_network_incerfaces, + false, + 0, + 0, + false, + 'offset', + true, + '', + 'change_page_snmp(offset_param)', + [ + 'count' => '', + 'offset' => 'offset_param', + ] + ); + } + + html_print_table($table_interface); + } + } + if ($get_type === true) { $id_module = (int) get_parameter('id_module'); $module = modules_get_agentmodule($id_module); diff --git a/pandora_console/include/ajax/os.php b/pandora_console/include/ajax/os.php index 058fe75578..5879a00158 100644 --- a/pandora_console/include/ajax/os.php +++ b/pandora_console/include/ajax/os.php @@ -60,7 +60,12 @@ if ($method === 'deleteOS') { ) { echo json_encode(['deleted' => false]); } else { - echo json_encode(['deleted' => true]); + echo json_encode( + [ + 'deleted' => true, + 'url_message' => 6, + ] + ); } } diff --git a/pandora_console/include/ajax/reporting.ajax.php b/pandora_console/include/ajax/reporting.ajax.php index 5f83d79b88..e5b42c67cf 100755 --- a/pandora_console/include/ajax/reporting.ajax.php +++ b/pandora_console/include/ajax/reporting.ajax.php @@ -37,7 +37,6 @@ $add_sla = get_parameter('add_sla', 0); $add_general = get_parameter('add_general', 0); $id = get_parameter('id', 0); $truncate_text = get_parameter('truncate_text', 0); -$get_metaconsole_hash_data = get_parameter('get_metaconsole_hash_data', 0); $get_metaconsole_server_url = get_parameter('get_metaconsole_server_url', 0); $change_custom_fields_macros_report = (bool) get_parameter( 'change_custom_fields_macros_report', @@ -186,37 +185,6 @@ if ($truncate_text) { return ui_print_truncate_text($text, GENERIC_SIZE_TEXT, true, false); } -if ($get_metaconsole_hash_data) { - $server_name = get_parameter('server_name'); - - enterprise_include_once('include/functions_metaconsole.php'); - - $server = enterprise_hook('metaconsole_get_connection', [$server_name]); - - // Bad data - if (empty($server)) { - echo ''; - return; - } - - // Deserialization of auth_token - $auth_serialized = json_decode($server['auth_token'], true); - - $auth_token = ''; - - if (is_array($auth_serialized)) { - $auth_token = $auth_serialized['auth_token']; - $api_password = $auth_serialized['api_password']; - $console_user = $auth_serialized['console_user']; - $console_password = $auth_serialized['console_password']; - } - - $url_hash = metaconsole_get_servers_url_hash($server); - - echo $url_hash; - return; -} - if ($get_metaconsole_server_url) { $server_name = get_parameter('server_name'); diff --git a/pandora_console/include/ajax/token.php b/pandora_console/include/ajax/token.php index 37914cb417..6d2dd30d6f 100644 --- a/pandora_console/include/ajax/token.php +++ b/pandora_console/include/ajax/token.php @@ -26,11 +26,14 @@ * ============================================================================ */ +global $config; +require_once $config['homedir'].'/include/class/JWTRepository.class.php'; + $list_user_tokens = (bool) get_parameter('list_user_tokens'); +$get_jwt_for_login = (bool) get_parameter('get_jwt_for_login', false); +// Tokens for api 2.0. if ($list_user_tokens === true) { - global $config; - // Datatables offset, limit and order. $filter = get_parameter('filter', []); $page = (int) get_parameter('start', 0); @@ -162,3 +165,20 @@ if ($list_user_tokens === true) { return; } + + +// Token for JWT auth in metaconsole. +if ($get_jwt_for_login === true) { + if (is_metaconsole() === true + && ((bool) users_is_admin($config['id_user']) === true || (bool) can_user_access_node() === true) + && empty($config['JWT_signature']) === false + ) { + $jwtRepository = new JWTRepository($config['JWT_signature']); + $token = $jwtRepository->create(); + echo json_encode(['success' => true, 'data' => $token]); + } else { + echo json_encode(['success' => false, 'error' => 'User does not have permission or is not a metaconsole.']); + } + + return; +} diff --git a/pandora_console/include/class/JWTRepository.class.php b/pandora_console/include/class/JWTRepository.class.php new file mode 100644 index 0000000000..f5e9811b62 --- /dev/null +++ b/pandora_console/include/class/JWTRepository.class.php @@ -0,0 +1,225 @@ +signature = $_signature; + } + + + /** + * Checks if target method is available to be called using AJAX. + * + * @param string $method Target method. + * + * @return boolean True allowed, false not. + */ + public function ajaxMethod($method) + { + // Check access. + check_login(); + + return in_array($method, $this->AJAXMethods); + } + + + /** + * Create token + * + * @return string + */ + public function create(): string + { + global $config; + try { + $sha = new Sha256(); + $configJWT = Configuration::forSymmetricSigner( + $sha, + InMemory::plainText($this->signature) + ); + + $now = new DateTimeImmutable(); + $token = $configJWT->builder()->issuedAt($now)->canOnlyBeUsedAfter($now)->expiresAt($now->modify('+1 minute'))->withClaim('id_user', $config['id_user'])->getToken($configJWT->signer(), $configJWT->signingKey()); + + return $token->toString(); + } catch (Exception $e) { + return ''; + } + } + + + /** + * Validate a JWT, USE FIRST setToken(). + * + * @return boolean + */ + public function validate():bool + { + try { + $sha = new Sha256(); + $configJWT = Configuration::forSymmetricSigner( + $sha, + InMemory::plainText($this->signature) + ); + $signed = new SignedWith($sha, InMemory::plainText($this->signature)); + $now = new DateTimeZone('UTC'); + $strictValid = new StrictValidAt(SystemClock::fromUTC()); + $constraints = [ + $signed, + $strictValid, + ]; + return $configJWT->validator()->validate($this->token, ...$constraints); + } catch (Exception $e) { + return false; + } + } + + + /** + * Get payload of token. + * + * @return object + */ + public function payload():object + { + return $this->token->claims(); + } + + + /** + * Setting token. + * + * @param string $tokenString String token to setting. + * + * @return boolean + */ + public function setToken(string $tokenString):bool + { + try { + $encoder = new JoseEncoder(); + $parser = new Parser($encoder); + $this->token = $parser->parse($tokenString); + return true; + } catch (Exception $e) { + return false; + } + } + + + /** + * Generate random signature. + * + * @return string + */ + public static function generateSignature(): string + { + return bin2hex(random_bytes(32)); + } + + + /** + * Sync the signature with nodes for jwt. + * + * @param string|null $signature Signature to send nodes. + * + * @return void + */ + public static function syncSignatureWithNodes(?string $signature):void + { + if (function_exists('metaconsole_get_servers') === true + && function_exists('metaconsole_push_conf_to_node') === true + ) { + $sync_server = 0; + $servers = metaconsole_get_servers(); + foreach ($servers as $server) { + $ok_sync = metaconsole_push_conf_to_node( + $server, + [ 'JWT_signature' => $signature], + true + ); + + if ($ok_sync === true) { + $sync_server++; + } + } + + if (is_array($servers) === true + && count($servers) === $sync_server + && count($servers) > 0 + ) { + config_update_value('JWT_signature', $signature, true); + } + } + } + + +} diff --git a/pandora_console/include/class/SnmpConsole.class.php b/pandora_console/include/class/SnmpConsole.class.php index f564b6599d..fefce2e54f 100644 --- a/pandora_console/include/class/SnmpConsole.class.php +++ b/pandora_console/include/class/SnmpConsole.class.php @@ -521,7 +521,7 @@ class SnmpConsole extends HTML $legend .= '
'; $legend .= html_print_image('images/delete.svg', true, ['class' => 'main_menu_icon invert_filter']).' - '.__('Delete'); $legend .= '
'; - $legend .= '
'; echo '
'; @@ -778,11 +778,11 @@ class SnmpConsole extends HTML // SNMP Agent. $agent = agents_get_agent_with_ip($tmp->source); if ($agent === false) { - $tmp->snmp_agent .= 'source.'" title="'.__('Create agent').'">'.$tmp->source.''; + $tmp->snmp_agent .= ''.$tmp->source.''; } else { $tmp->snmp_agent .= '
'; - $tmp->snmp_agent .= ''.$agent['alias'].ui_print_help_tip($tmp->source, true); - '
'; + $tmp->snmp_agent .= ''.$agent['alias'].''.ui_print_help_tip($tmp->source, true); + ''; } // Enterprise string. diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 41d6592ca7..9af4949d06 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -22,7 +22,7 @@ use DI\ContainerBuilder; /* * Pandora build version and version */ -$build_version = 'PC240429'; +$build_version = 'PC240503'; $pandora_version = 'v7.0NG.776'; // Do not overwrite default timezone set if defined. @@ -185,6 +185,7 @@ if (session_status() === PHP_SESSION_NONE) { config_process_config(); config_prepare_session(); +config_prepare_jwt_signature(); if ((bool) $config['console_log_enabled'] === true) { error_reporting(E_ALL ^ E_NOTICE); diff --git a/pandora_console/include/functions_agents.php b/pandora_console/include/functions_agents.php index 12f79aa680..42e864afb9 100644 --- a/pandora_console/include/functions_agents.php +++ b/pandora_console/include/functions_agents.php @@ -1544,7 +1544,9 @@ function agents_get_modules( $indexed=true, $get_not_init_modules=true, $force_tags=false, - $filter_include_sql=true + $filter_include_sql=true, + $pagination=false, + $offset=0, ) { global $config; @@ -1717,7 +1719,17 @@ function agents_get_modules( $sql_tags_join, $where ); - $result = db_get_all_rows_sql($sql); + + $limit = ''; + if ($pagination === true && isset($config['paginate_module']) === true) { + if ($offset === 0) { + $limit = ' LIMIT '.$config['block_size'].' OFFSET 0'; + } else { + $limit = ' LIMIT '.$config['block_size'].' OFFSET '.$offset; + } + } + + $result = db_get_all_rows_sql($sql.$limit); if (empty($result)) { return []; @@ -3333,7 +3345,7 @@ function agents_update_gis( * * @return array A list of network interfaces information by agents. */ -function agents_get_network_interfaces($agents=false, $agents_filter=false) +function agents_get_network_interfaces($agents=false, $agents_filter=false, $pagination=false, $offset=0, $count=false) { global $config; @@ -3432,8 +3444,17 @@ function agents_get_network_interfaces($agents=false, $agents_filter=false) $columns, $filter, true, - false + false, + false, + true, + $pagination, + $offset ); + + if ($count === true) { + return (count($modules) ?? 0); + } + if (!empty($modules)) { $interfaces = []; @@ -4755,7 +4776,10 @@ function get_resume_agent_concat($id_agente, $all_groups, $agent) 'force_checks', false, 'window.location.assign("'.$url.'&flag_agent=1")', - [ 'mode' => 'link' ], + [ + 'mode' => 'link', + 'class' => 'mrgn_lft_20px ', + ], true ); } @@ -4934,7 +4958,7 @@ function get_resume_agent_concat($id_agente, $all_groups, $agent) $module_score = modules_get_agentmodule_id(io_safe_input('Hardening - Score'), $agent['id_agente']); $hardening = ''; if (is_array($module_score) === true && key_exists('id_agente_modulo', $module_score) == true) { - $raw_data_score = modules_get_raw_data($module_score['id_agente_modulo'], 0, time()); + $raw_data_score = modules_get_raw_data($module_score['id_agente_modulo'], 0, time(), false); $hardening = format_numeric($raw_data_score[0]['datos'], 2); $data = []; $data[0] = ''.__('Hardening').''; diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php index b80fe726c8..7026165089 100644 --- a/pandora_console/include/functions_config.php +++ b/pandora_console/include/functions_config.php @@ -30,6 +30,7 @@ // Config functions. require_once __DIR__.'/../vendor/autoload.php'; require_once __DIR__.'/functions.php'; +require_once __DIR__.'/class/JWTRepository.class.php'; enterprise_include_once('include/functions_config.php'); use PandoraFMS\Core\DBMaintainer; @@ -207,10 +208,6 @@ function config_update_config() $error_update[] = __('Chromium config directory'); } - if (config_update_value('loginhash_pwd', (string) get_parameter('loginhash_pwd'), true, true) === false) { - $error_update[] = __('Auto login (hash) password'); - } - if (config_update_value('timesource', (string) get_parameter('timesource'), true) === false) { $error_update[] = __('Time source'); } @@ -706,8 +703,10 @@ function config_update_config() $error_update[] = __('Admin LDAP login'); } - if (config_update_value('ldap_admin_pass', get_parameter('ldap_admin_pass'), true, true) === false) { - $error_update[] = __('Admin LDAP password'); + if ((bool) get_parameter('ldap_admin_pass_password_changed', false) === true) { + if (config_update_value('ldap_admin_pass', get_parameter('ldap_admin_pass'), true, true) === false) { + $error_update[] = __('Admin LDAP password'); + } } if (config_update_value('ldap_search_timeout', (int) get_parameter('ldap_search_timeout', 5), true) === false) { @@ -2224,10 +2223,6 @@ function config_process_config() config_update_value('events_per_query', 5000); } - if (!isset($config['loginhash_pwd'])) { - config_update_value('loginhash_pwd', (rand(0, 1000) * rand(0, 1000)).'pandorahash', false, true); - } - if (!isset($config['trap2agent'])) { config_update_value('trap2agent', 0); } @@ -2491,6 +2486,10 @@ function config_process_config() config_update_value('number_modules_queue', 500); } + if (!isset($config['JWT_signature'])) { + config_update_value('JWT_signature', 1); + } + if (!isset($config['eastern_eggs_disabled'])) { config_update_value('eastern_eggs_disabled', 1); } @@ -4224,3 +4223,13 @@ function config_prepare_session() ini_set('post_max_size', $config['max_file_size']); ini_set('upload_max_filesize', $config['max_file_size']); } + + +function config_prepare_jwt_signature() +{ + global $config; + if (is_metaconsole() === true && $config['JWT_signature'] == 1) { + $signature = JWTRepository::generateSignature(); + JWTRepository::syncSignatureWithNodes($signature); + } +} diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php index e46ce44588..bf10fc8eb6 100644 --- a/pandora_console/include/functions_events.php +++ b/pandora_console/include/functions_events.php @@ -4393,12 +4393,9 @@ function events_page_details($event, $server_id=0) global $config; // If metaconsole switch to node to get details and custom fields. - $hashstring = ''; $serverstring = ''; if (is_metaconsole() === true && empty($server_id) === false) { $server = metaconsole_get_connection_by_id($server_id); - $hashdata = metaconsole_get_server_hashdata($server); - $hashstring = '&loginhash=auto&loginhash_data='.$hashdata.'&loginhash_user='.str_rot13($config['id_user']); $serverstring = $server['server_url'].'/'; if (metaconsole_connect($server) !== NOERR) { @@ -4439,28 +4436,7 @@ function events_page_details($event, $server_id=0) true ).ui_print_help_tip(__('This agent belongs to metaconsole, is not possible display it'), true); } else if (can_user_access_node() && is_metaconsole()) { - // Workaround to pass login hash data in POST body instead of directly in the URL. - parse_str($hashstring, $url_hash_array); - $redirection_form = ""; - $redirection_form .= html_print_input_hidden( - 'loginhash', - $url_hash_array['loginhash'], - true - ); - $redirection_form .= html_print_input_hidden( - 'loginhash_data', - $url_hash_array['loginhash_data'], - true - ); - $redirection_form .= html_print_input_hidden( - 'loginhash_user', - $url_hash_array['loginhash_user'], - true - ); - $redirection_form .= '
'; - - $data[1] = $redirection_form; - $data[1] .= ""; + $data[1] = ''; $data[1] .= ''.$agent['alias'].''; $data[1] .= ''; } else if (can_user_access_node()) { @@ -4471,7 +4447,7 @@ function events_page_details($event, $server_id=0) '', false, $serverstring, - $hashstring, + '', $agent['alias'] ); } else { @@ -4604,7 +4580,7 @@ function events_page_details($event, $server_id=0) 'id_mg', $id_module_group ); - $data[1] = ''; + $data[1] = ''; $data[1] .= $module_group; $data[1] .= ''; } @@ -4670,7 +4646,7 @@ function events_page_details($event, $server_id=0) if ($event['id_alert_am'] != 0) { $data = []; $data[0] = '
'.__('Source').'
'; - $data[1] = ''; + $data[1] = ''; $standby = db_get_value('standby', 'talert_template_modules', 'id', $event['id_alert_am']); if (!$standby) { $data[1] .= html_print_image( diff --git a/pandora_console/include/functions_filemanager.php b/pandora_console/include/functions_filemanager.php index 7e3d566cdc..51e2932f31 100644 --- a/pandora_console/include/functions_filemanager.php +++ b/pandora_console/include/functions_filemanager.php @@ -1032,7 +1032,7 @@ function filemanager_file_explorer( false, 'show_form_create_folder()', [ - 'class' => 'margin-right-2 invert_filter secondary', + 'class' => 'margin-right-2 primary buttonButton', 'icon' => 'create_directory', ], true, @@ -1047,7 +1047,7 @@ function filemanager_file_explorer( false, 'show_create_text_file()', [ - 'class' => 'margin-right-2 invert_filter secondary', + 'class' => 'margin-right-2 primary buttonButton', 'icon' => 'create_file', ], true, @@ -1061,7 +1061,7 @@ function filemanager_file_explorer( false, 'show_upload_file()', [ - 'class' => 'margin-right-2 invert_filter secondary', + 'class' => 'margin-right-2 primary buttonButton', 'icon' => 'upload_file', ], true, diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index f9f21aaec5..6de4467d83 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -1686,34 +1686,56 @@ function html_print_select_multiple_modules_filtered(array $data):string ); $output .= ''; + $agent_class = ''; if (empty($data['searchBar']) === false && $data['searchBar'] === true) { - $output .= '
'; + $output .= ''; } @@ -1770,6 +1792,7 @@ function html_print_select_multiple_modules_filtered(array $data):string 'style' => 'min-width: 200px;max-width:200px;', 'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')', 'placeholder' => (isset($data['placeholderAgents']) === true) ? $data['placeholderAgents'] : '', + 'input_class' => $agent_class, ] ); } else { @@ -1786,6 +1809,7 @@ function html_print_select_multiple_modules_filtered(array $data):string 'style' => 'min-width: 200px;max-width:200px;', 'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')', 'placeholder' => (isset($data['placeholderAgents']) === true) ? $data['placeholderAgents'] : '', + 'input_class' => $agent_class, ] ); } @@ -1929,7 +1953,7 @@ function html_print_select_multiple_modules_filtered_formated(array $data):strin 'return' => true, 'nothing' => __('All'), 'nothing_value' => 0, - 'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')', + 'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().', true)', ] ); $output .= '
'; @@ -1965,7 +1989,7 @@ function html_print_select_multiple_modules_filtered_formated(array $data):strin 'name' => 'filtered-module-show-common-modules-'.$uniqId, 'id' => 'filtered-module-show-common-modules-'.$uniqId, 'return' => true, - 'onchange' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')', + 'onchange' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().', true)', ] ); @@ -2053,7 +2077,7 @@ function html_print_select_multiple_modules_filtered_formated(array $data):strin 'return' => true, 'multiple' => true, 'style' => 'min-width: 200px;max-width:200px;', - 'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')', + 'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().', true)', 'placeholder' => (isset($data['placeholderAgents']) === true) ? $data['placeholderAgents'] : '', 'truncate_size' => 300, ] @@ -2070,7 +2094,7 @@ function html_print_select_multiple_modules_filtered_formated(array $data):strin 'return' => true, 'multiple' => true, 'style' => 'min-width: 200px;max-width:200px;', - 'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')', + 'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().', true)', 'placeholder' => (isset($data['placeholderAgents']) === true) ? $data['placeholderAgents'] : '', 'truncate_size' => 300, ] @@ -3466,13 +3490,19 @@ function html_print_anchor( * * The element will have an id like: "password-$name" * - * @param string $name Input name. - * @param string $value Input value. - * @param string $alt Alternative HTML string (optional). - * @param integer $size Size of the input (optional). - * @param integer $maxlength Maximum length allowed (optional). - * @param boolean $return Whether to return an output string or echo now (optional, echo by default). - * @param boolean $disabled Disable the button (optional, button enabled by default). + * @param string $name Input name. + * @param string $value Input value. + * @param string $alt Alternative HTML string (optional). + * @param integer $size Size of the input (optional). + * @param integer $maxlength Maximum length allowed (optional). + * @param boolean $return Whether to return an output string or echo now (optional, echo by default). + * @param boolean $disabled Disable the button (optional, button enabled by default). + * @param boolean $required Whether the input is required (optional, not required by default). + * @param string $class Additional CSS classes for the input (optional). + * @param string $autocomplete Autocomplete attribute value (optional, off by default). + * @param boolean $hide_div_eye Whether to hide the div with the eye icon (optional, false by default). + * @param string $div_class Additional CSS classes for the div (optional). + * @param boolean $not_show_value Whether to not show the value in the input (optional, false by default), FOR USE THIS VALUE YOU NEED CONTROL THE INPUT 'password_changed'. * * @return string HTML code if return parameter is true. */ @@ -3488,7 +3518,8 @@ function html_print_input_password( $class='', $autocomplete='off', $hide_div_eye=false, - $div_class='' + $div_class='', + $not_show_value=false, ) { if ($maxlength == 0) { $maxlength = 255; @@ -3519,7 +3550,40 @@ function html_print_input_password( } } - return '
'.html_print_input_text_extended($name, $value, 'password-'.$name, $alt, $size, $maxlength, $disabled, '', $attr, $return, true, '', $autocomplete, false, $hide_div_eye).'
'; + $extra_output = ''; + if ($not_show_value === true) { + $unique_id = 'flag_password_'.uniqid(); + $extra_output = html_print_input_hidden($name.'_password_changed', 0, true, false, false, $unique_id); + $attr['class'] .= ' bg-image-none'; + $extra_output .= ''; + } + + return '
'.html_print_input_text_extended($name, $value, 'password-'.$name, $alt, $size, $maxlength, $disabled, '', $attr, $return, true, '', $autocomplete, false, $hide_div_eye).'
'.$extra_output; } diff --git a/pandora_console/include/functions_inventory.php b/pandora_console/include/functions_inventory.php index e710039e85..5e5726d96f 100644 --- a/pandora_console/include/functions_inventory.php +++ b/pandora_console/include/functions_inventory.php @@ -418,12 +418,10 @@ function inventory_get_data( // Setting for link the agent with the proper server. if (is_metaconsole() === true && empty($node) === false) { - $loginHash = metaconsole_get_servers_url_hash($node); $urlToAgent = sprintf( - '%sindex.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=%s%s', + '%sindex.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=%s', $node['server_url'], - $row['id_agente'], - $loginHash + $row['id_agente'] ); } else { $urlToAgent = sprintf( @@ -440,8 +438,9 @@ function inventory_get_data( $table->data[$rowTable][0] = html_print_anchor( [ - 'href' => $urlToAgent, + 'href' => (is_metaconsole() === true) ? '#' : $urlToAgent, 'content' => ''.$agent_name.'', + 'onClick' => (is_metaconsole() === true) ? 'redirectNode(\''.$urlToAgent.'\')' : '', ], true ); @@ -1196,7 +1195,7 @@ function get_inventory_basic_info_sql($params, $count=false) $result = 0; } } - + return $result; } diff --git a/pandora_console/include/functions_menu.php b/pandora_console/include/functions_menu.php index 3439dd790a..dc417c191b 100644 --- a/pandora_console/include/functions_menu.php +++ b/pandora_console/include/functions_menu.php @@ -171,7 +171,7 @@ function menu_print_menu(&$menu) $sec2 = 'godmode/users/token_list'; } else if ($sec2 === 'godmode/servers/modificar_server' && check_acl($config['id_user'], 0, 'AW') && (bool) check_acl($config['id_user'], 0, 'PM') === false) { $sec2 = 'enterprise/godmode/servers/list_satellite'; - }else if ($sec2 === 'enterprise/godmode/snmpconsole/snmp_trap_editor_form') { + } else if ($sec2 === 'enterprise/godmode/snmpconsole/snmp_trap_editor_form') { $sec2 = 'enterprise/godmode/snmpconsole/snmp_trap_editor'; } else { $sec2 = (string) get_parameter('sec2'); diff --git a/pandora_console/include/functions_modules.php b/pandora_console/include/functions_modules.php index 6c9efb999b..3c00cf12b6 100755 --- a/pandora_console/include/functions_modules.php +++ b/pandora_console/include/functions_modules.php @@ -1148,12 +1148,12 @@ function modules_get_table_data(?int $id_agent_module, ?int $id_type) } -function modules_get_raw_data($id_agent_module, $date_init, $date_end) +function modules_get_raw_data($id_agent_module, $date_init, $date_end, $search_in_history_db=true) { $table = modules_get_table_data($id_agent_module, null); $datelimit = ($date_init - $date_end); - $search_in_history_db = db_search_in_history_db($datelimit); + $search_in_history_db = (($search_in_history_db === true) ? db_search_in_history_db($datelimit) : false); $data = db_get_all_rows_sql( ' diff --git a/pandora_console/include/functions_netflow.php b/pandora_console/include/functions_netflow.php index 9f016ac88a..247b81a816 100644 --- a/pandora_console/include/functions_netflow.php +++ b/pandora_console/include/functions_netflow.php @@ -1570,8 +1570,12 @@ function netflow_draw_item( ); // Theme. - $theme = $config['style']; - $text_color = ($theme !== 'pandora_black') ? '#333' : '#fff'; + $user_info = get_user_info($config['id_user']); + if (isset($user_info['id_skin']) === true && (int) $user_info['id_skin'] === 2) { + $text_color = '#ffffff'; + } else { + $text_color = '#333333'; + } $graph_output = pie_graph( $pie_data, diff --git a/pandora_console/include/functions_networkmap.php b/pandora_console/include/functions_networkmap.php index f5115a73e9..23a09feabb 100644 --- a/pandora_console/include/functions_networkmap.php +++ b/pandora_console/include/functions_networkmap.php @@ -773,13 +773,11 @@ function networkmap_create_agent_node( if (empty($server_data) === true) { $server_name = ''; $server_id = ''; - $url_hash = ''; $console_url = ''; } else { $server_name = $server_data['server_name']; $server_id = $server_data['id']; $console_url = $server_data['server_url'].'/'; - $url_hash = metaconsole_get_servers_url_hash($server_data); } // Set node status. @@ -870,7 +868,7 @@ function networkmap_create_agent_node( } if (can_user_access_node()) { - $url_node_link = ', URL="'.$console_url.'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$agent['id_agente'].$url_hash.'"'; + $url_node_link = ', URL="'.$console_url.'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$agent['id_agente'].'"'; } else { $url_node_link = ''; } diff --git a/pandora_console/include/functions_planned_downtimes.php b/pandora_console/include/functions_planned_downtimes.php index 772611fa29..a7d5015aba 100644 --- a/pandora_console/include/functions_planned_downtimes.php +++ b/pandora_console/include/functions_planned_downtimes.php @@ -961,7 +961,7 @@ function planned_downtimes_items($filter) function delete_planned_downtimes($filter) { - $downtime_execute = db_get_row_filter('tplanned_downtime', ['id' => $filter['id_downtime']], 'execute'); + $downtime_execute = db_get_row_filter('tplanned_downtime', ['id' => $filter['id_downtime']], 'executed'); if ($downtime_execute) { $return = __("This scheduled downtime are executed now. Can't delete in this moment."); diff --git a/pandora_console/include/functions_reporting_html.php b/pandora_console/include/functions_reporting_html.php index e240c8d047..c3fceb7644 100644 --- a/pandora_console/include/functions_reporting_html.php +++ b/pandora_console/include/functions_reporting_html.php @@ -4107,7 +4107,7 @@ function reporting_html_historical_data($table, $item, $pdf=0) // Center every row foreach ($table1->data[0] as $k => $v) { - for ($i = 0; $i < count($table1->data); $i++){ + for ($i = 0; $i < count($table1->data); $i++) { $table1->cellstyle[$i][$k] = 'text-align: center;'; } } @@ -4190,7 +4190,7 @@ function reporting_html_database_serialized($table, $item, $pdf=0) // Center every row foreach ($table1->data[0] as $k => $v) { - for ($i = 0; $i < count($table1->data); $i++){ + for ($i = 0; $i < count($table1->data); $i++) { $table1->cellstyle[$i][$k] = 'text-align: center;'; } } @@ -6435,7 +6435,7 @@ function reporting_html_sql($table, $item, $pdf=0) // Center every row foreach ($table2->data[0] as $k => $v) { - for ($i = 0; $i < count($table2->data); $i++){ + for ($i = 0; $i < count($table2->data); $i++) { $table2->cellstyle[$i][$k] = 'text-align: center;'; } } @@ -7886,6 +7886,12 @@ function reporting_html_ncm_list($table, $item, $pdf=0) */ function reporting_html_ncm_backups($table, $item, $pdf=0) { + global $config; + + if ($config['style'] === 'pandora_black') { + ui_require_css_file('pandora_black'); + } + ui_require_css_file('diff2html.min'); ui_require_css_file('highlight.min'); ui_require_css_file('highlight/vs.min'); diff --git a/pandora_console/include/functions_snmp_browser.php b/pandora_console/include/functions_snmp_browser.php index d545ff102b..8328307d24 100644 --- a/pandora_console/include/functions_snmp_browser.php +++ b/pandora_console/include/functions_snmp_browser.php @@ -1588,7 +1588,12 @@ function snmp_browser_create_modules_snmp( enterprise_include_once('include/functions_policies.php'); foreach ($id_target as $policy) { - $ids[] = policies_create_module($oid['oid'], $policy, 2, $values); + $exist = db_get_row_filter('tpolicy_modules', ['name' => $oid['oid'], 'id_policy' => $policy], '*'); + if ($exist !== false) { + $ids[] = false; + } else { + $ids[] = policies_create_module($oid['oid'], $policy, 2, $values); + } } } } diff --git a/pandora_console/include/functions_treeview.php b/pandora_console/include/functions_treeview.php index ada7841ab7..c240c527e8 100755 --- a/pandora_console/include/functions_treeview.php +++ b/pandora_console/include/functions_treeview.php @@ -18,13 +18,11 @@ function treeview_printModuleTable($id_module, $server_data=false, $no_head=fals if (empty($server_data)) { $server_name = ''; $server_id = ''; - $url_hash = ''; $console_url = ui_get_full_url('/'); } else { $server_name = $server_data['server_name']; $server_id = $server_data['id']; $console_url = $server_data['server_url'].'/'; - $url_hash = metaconsole_get_servers_url_hash($server_data); } include_once $config['homedir'].'/include/functions_agents.php'; @@ -69,10 +67,11 @@ function treeview_printModuleTable($id_module, $server_data=false, $no_head=fals $row['title'] = __('Name'); $row['data'] = html_print_anchor( [ - 'href' => $console_url.'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$module['id_agente'].'&tab=module&edit_module=1&id_agent_module='.$module['id_agente_modulo'].$url_hash, + 'href' => '#', 'title' => __('Click here for view this module'), 'class' => 'font_11', 'content' => $cellName, + 'onClick' => 'redirectNode(\''.$console_url.'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$module['id_agente'].'&tab=module&edit_module=1&id_agent_module='.$module['id_agente_modulo'].'\');', ], true ); @@ -325,45 +324,9 @@ function treeview_printModuleTable($id_module, $server_data=false, $no_head=fals echo '
'; if (is_metaconsole() === true) { - echo "
"; - - parse_str($url_hash, $url_hash_array); - - html_print_input_hidden( - 'id_agente', - $module['id_agente'], - false - ); - html_print_input_hidden( - 'edit_module', - 1, - false - ); - html_print_input_hidden( - 'id_agent_module', - $module['id_agente_modulo'], - false - ); - html_print_input_hidden( - 'loginhash', - $url_hash_array['loginhash'], - false - ); - html_print_input_hidden( - 'loginhash_data', - $url_hash_array['loginhash_data'], - false - ); - html_print_input_hidden( - 'loginhash_user', - $url_hash_array['loginhash_user'], - false - ); - - echo '
'; - echo "
"; + echo ''; } else { - echo ''; + echo ''; } html_print_submit_button( @@ -399,13 +362,11 @@ function treeview_printAlertsTable($id_module, $server_data=[], $no_head=false) if (empty($server_data)) { $server_name = ''; $server_id = ''; - $url_hash = ''; $console_url = ''; } else { $server_name = $server_data['server_name']; $server_id = $server_data['id']; $console_url = $server_data['server_url'].'/'; - $url_hash = metaconsole_get_servers_url_hash($server_data); } $user_access_node = can_user_access_node(); @@ -512,7 +473,7 @@ function treeview_printAlertsTable($id_module, $server_data=[], $no_head=false) __('Go to alerts edition'), 'upd_button', false, - 'window.location.assign("'.$console_url.'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=alert&search=1&module_name='.$module_name.'&id_agente='.$agent_id.$url_hash.'")', + 'redirectNode("'.$console_url.'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=alert&search=1&module_name='.$module_name.'&id_agente='.$agent_id.'")', ['icon' => 'alert'], true ), @@ -533,15 +494,11 @@ function treeview_printTable($id_agente, $server_data=[], $no_head=false) global $config; if (empty($server_data)) { - $server_name = ''; $server_id = ''; - $url_hash = ''; $console_url = ui_get_full_url('/'); } else { - $server_name = $server_data['server_name']; $server_id = $server_data['id']; $console_url = $server_data['server_url'].'/'; - $url_hash = metaconsole_get_servers_url_hash($server_data); } include_once $config['homedir'].'/include/functions_agents.php'; @@ -623,15 +580,6 @@ function treeview_printTable($id_agente, $server_data=[], $no_head=false) $cellName = ((bool) $agent['disabled'] === true) ? '' : ''; if (is_metaconsole() === true) { - $pwd = $server_data['auth_token']; - // Create HASH login info. - $user = $config['id_user']; - - // Extract auth token from serialized field. - $pwd_deserialiced = json_decode($pwd, true); - $hashdata = $user.$pwd_deserialiced['auth_token']; - - $hashdata = md5($hashdata); if ((bool) $grants_on_node === true && (bool) $user_access_node !== false) { $urlAgent = $server_data['server_url'].'/index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$agent['id_agente']; } else { @@ -657,7 +605,7 @@ function treeview_printTable($id_agente, $server_data=[], $no_head=false) 'title' => __('Click here for view this agent'), 'class' => 'font_11', 'content' => $cellName, - 'onClick' => "sendHash('".$urlAgent."')", + 'onClick' => "redirectNode('".$urlAgent."')", ], true ); @@ -998,7 +946,7 @@ function treeview_printTable($id_agente, $server_data=[], $no_head=false) $cluster = PandoraFMS\Cluster::loadFromAgentId( $agent['id_agente'] ); - $buttons_act .= ''; + $buttons_act .= ''; $buttons_act .= html_print_submit_button( __('Go to cluster edition'), 'upd_button', @@ -1007,7 +955,7 @@ function treeview_printTable($id_agente, $server_data=[], $no_head=false) true ); } else { - $buttons_act .= ''; + $buttons_act .= ''; $buttons_act .= html_print_submit_button( __('Go to module creation'), 'upd_button', @@ -1016,7 +964,7 @@ function treeview_printTable($id_agente, $server_data=[], $no_head=false) true ); - $buttons_act .= ''; + $buttons_act .= ''; $buttons_act .= html_print_submit_button( __('Go to agent edition'), 'upd_button', @@ -1038,11 +986,6 @@ function treeview_printTable($id_agente, $server_data=[], $no_head=false) echo " diff --git a/pandora_console/operation/agentes/status_monitor.php b/pandora_console/operation/agentes/status_monitor.php index 2a5ffd5b7a..0724725b6a 100644 --- a/pandora_console/operation/agentes/status_monitor.php +++ b/pandora_console/operation/agentes/status_monitor.php @@ -1721,26 +1721,8 @@ if (empty($result) === false) { if (in_array('agent', $show_fields) || is_metaconsole()) { $agent_alias = !empty($row['agent_alias']) ? $row['agent_alias'] : $row['agent_name']; - // TODO: Calculate hash access before to use it more simply like other sections. I.E. Events view if (is_metaconsole() === true) { - echo "
"; - html_print_input_hidden( - 'loginhash', - 'auto', - false - ); - html_print_input_hidden( - 'loginhash_data', - $row['hashdata'], - false - ); - html_print_input_hidden( - 'loginhash_user', - str_rot13($row['user']), - false - ); - echo '
'; - $agent_link = "
"; + $agent_link = ''; $agent_alias = ui_print_truncate_text( $agent_alias, @@ -1773,18 +1755,20 @@ if (empty($result) === false) { $show_edit_icon = false; } - $url_edit_module = $row['server_url'].'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$row['id_agent'].'&'.'tab=module&'.'id_agent_module='.$row['id_agente_modulo'].'&'.'edit_module=1'.'&loginhash=auto&loginhash_data='.$row['hashdata'].'&loginhash_user='.str_rot13($row['user']); + $url_edit_module = $row['server_url'].'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$row['id_agent'].'&'.'tab=module&'.'id_agent_module='.$row['id_agente_modulo'].'&'.'edit_module=1'; } else { $url_edit_module = 'index.php?'.'sec=gagente&'.'sec2=godmode/agentes/configurar_agente&'.'id_agente='.$row['id_agent'].'&'.'tab=module&'.'id_agent_module='.$row['id_agente_modulo'].'&'.'edit_module=1'; } } } + $url_edit_module = ($url_edit_module ?? '#'); if (in_array('module_name', $show_fields) === true || is_metaconsole() === true) { $data[3] = html_print_anchor( [ 'target' => '_blank', - 'href' => ($url_edit_module ?? '#'), + 'href' => '#', + 'onClick' => ((is_metaconsole() === true) ? 'redirectNode(\''.$url_edit_module.'\',\'_self\')' : ''), 'content' => ui_print_truncate_text($row['module_name'], 'module_small', false, true, true), ], true @@ -2273,43 +2257,12 @@ if (empty($result) === false) { $table->cellclass[][12] = 'table_action_buttons'; if (is_metaconsole() === true) { - echo "
"; - html_print_input_hidden( - 'id_agente', - $row['id_agent'], - false - ); - html_print_input_hidden( - 'id_agent_module', - $row['id_agente_modulo'], - false - ); - html_print_input_hidden( - 'loginhash', - 'auto', - false - ); - html_print_input_hidden( - 'loginhash_data', - $row['hashdata'], - false - ); - html_print_input_hidden( - 'loginhash_user', - str_rot13($row['user']), - false - ); - - echo '
'; - $url_edit_module = $row['server_url']; $url_edit_module .= 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&'; $url_edit_module .= '&id_agente='.$row['id_agent']; $url_edit_module .= '&tab=module&id_agent_module='.$row['id_agente_modulo'].'&edit_module=1'; - $url_edit_module .= '&loginhash=auto&loginhash_data='.$row['hashdata']; - $url_edit_module .= '&loginhash_user='.str_rot13($row['user']); - $agent_link = "
"; + $agent_link = ''; $agent_alias = ui_print_truncate_text( $agent_alias, @@ -2387,7 +2340,11 @@ if (empty($result) === false) { $tablePagination = ui_pagination($count_modules, false, $offset, 0, true, 'offset', $show_count); } } else { - ui_print_info_message(['no_close' => true, 'message' => __('Please apply a filter to display the data')]); + if (get_parameter('ag_group', false) !== false) { + ui_print_info_message(['no_close' => true, 'message' => __('There are no monitors with these features or status')]); + } else { + ui_print_info_message(['no_close' => true, 'message' => __('Please apply a filter to display the data')]); + } } if (isset($tablePagination) === false) { diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index ee2f7fa1a5..563472ce31 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -483,7 +483,6 @@ if (is_ajax() === true) { } if (empty($events) === false) { - $redirection_form_id = 0; if ((int) $filter['group_rep'] > 0) { $events_comments = []; } else { @@ -492,7 +491,7 @@ if (is_ajax() === true) { $data = array_reduce( $events, - function ($carry, $item) use ($table_id, &$redirection_form_id, $filter, $compact_date, $external_url, $compact_name_event, $regex, $events_comments) { + function ($carry, $item) use ($table_id, $filter, $compact_date, $external_url, $compact_name_event, $regex, $events_comments) { global $config; $tmp = (object) $item; @@ -500,7 +499,6 @@ if (is_ajax() === true) { // phpcs:disable Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps $server_url = ''; - $hashdata = ''; if ($tmp->meta === true) { if ($tmp->server_name !== null) { $data_server = metaconsole_get_servers( @@ -512,9 +510,6 @@ if (is_ajax() === true) { && $data_server !== false ) { $server_url = $data_server['server_url']; - $hashdata = metaconsole_get_servers_url_hash( - $data_server - ); } } } @@ -1166,40 +1161,18 @@ if (is_ajax() === true) { $url_link = ui_get_full_url( 'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=' ); - $url_link_hash = ''; + if ($tmp->meta === true) { $url_link = $server_url; $url_link .= '/index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='; - $url_link_hash = $hashdata; - - parse_str($url_link_hash, $url_hash_array); - - $redirection_form = "'; } // Agent name link. if ($tmp->id_agente > 0) { if ($tmp->meta === true) { - $draw_agent_name = $redirection_form; - $draw_agent_name .= ""; + $draw_agent_name = ''; } else { - $draw_agent_name = ''; + $draw_agent_name = ''; } $draw_agent_name .= $tmp->agent_name; @@ -1212,10 +1185,9 @@ if (is_ajax() === true) { // Agent ID link. if ($tmp->id_agente > 0) { if ($tmp->meta === true) { - $draw_agent_id = ""; - $redirection_form_id++; + $draw_agent_id = ''; } else { - $draw_agent_id = ''; + $draw_agent_id = ''; } $draw_agent_id .= $tmp->id_agente; diff --git a/pandora_console/operation/events/sound_events.php b/pandora_console/operation/events/sound_events.php index 42ff6af0cb..50dae7b9af 100644 --- a/pandora_console/operation/events/sound_events.php +++ b/pandora_console/operation/events/sound_events.php @@ -96,7 +96,7 @@ if ($config['style'] === 'pandora_black' && !is_metaconsole()) { echo ''; echo ''; -$output = '
'; +$output = '
'; // Header tabs. $output .= '
    '; $output .= '
  • '; @@ -264,7 +264,7 @@ $output = '
    '; true, [ 'title' => __('No alerts discovered'), - 'class' => 'invert_filter', + 'class' => '', ] ); $output .= ''; diff --git a/pandora_console/operation/inventory/inventory.php b/pandora_console/operation/inventory/inventory.php index 4d86c63558..bb4236da25 100755 --- a/pandora_console/operation/inventory/inventory.php +++ b/pandora_console/operation/inventory/inventory.php @@ -200,7 +200,8 @@ if (is_ajax() === true) { 'status' => $status_agent, ]; - $data = get_inventory_basic_info_sql($params); // Aca se retorna + $data = get_inventory_basic_info_sql($params); + // Aca se retorna $count = get_inventory_basic_info_sql($params, true); try { diff --git a/pandora_console/operation/network/network_report.php b/pandora_console/operation/network/network_report.php index bc72602fd0..069b8f99f3 100644 --- a/pandora_console/operation/network/network_report.php +++ b/pandora_console/operation/network/network_report.php @@ -483,6 +483,9 @@ $table->data = []; $chart_data = []; $labels = []; $hide_filter = !empty($main_value) && ($action === 'udp' || $action === 'tcp'); +$row_icon_color_filters = ($config['style'] === 'pandora') ? '' : 'filter: invert(100%) !important;'; +$row_icon_color_eye = ($config['style'] === 'pandora') ? '' : 'filter: invert(100%) !important; background-color: transparent !important;'; + foreach ($data as $item) { $row = []; $row['main'] = '
    '; @@ -491,9 +494,17 @@ foreach ($data as $item) { $row['main'] .= html_print_link_with_params( 'images/filters@svg.svg', array_merge($hidden_main_link, ['main_value' => $item['host']]), - 'image' + 'image', + $row_icon_color_filters, + ); + $row['main'] .= html_print_input_image( + 'whois', + 'images/eye.png', + 'whois', + $row_icon_color_eye, + true, + ['onclick' => 'whois(\''.$item['host'].'\')'], ); - $row['main'] .= html_print_input_image('whois', 'images/eye.png', 'whois', '', true, ['onclick' => 'whois(\''.$item['host'].'\')']); } $row['main'] .= '
    '; diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 06e0a68014..542063a115 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -6,7 +6,7 @@ %define debug_package %{nil} %define name pandorafms_console %define version 7.0NG.776 -%define release 240429 +%define release 240503 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 8a44765a48..adde143f1b 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -6,7 +6,7 @@ %define debug_package %{nil} %define name pandorafms_console %define version 7.0NG.776 -%define release 240429 +%define release 240503 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index ce0ae2ccf1..95b39754c8 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.776 -%define release 240429 +%define release 240503 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_console/pandoradb_data.sql b/pandora_console/pandoradb_data.sql index 8ba8cf8ade..83f017d531 100644 --- a/pandora_console/pandoradb_data.sql +++ b/pandora_console/pandoradb_data.sql @@ -71,7 +71,7 @@ INSERT INTO `tconfig` (`token`, `value`) VALUES ('trap2agent', '0'), ('date_format', 'F j, Y, g:i a'), ('event_view_hr', 8), -('loginhash_pwd', ''), +('JWT_signature', 1), ('trap2agent', 0), ('prominent_time', 'comparation'), ('timesource', 'system'), @@ -2863,7 +2863,7 @@ SET @short_name = 'pandorafms.vmware'; SET @name = 'VMware'; SET @section = 'app'; SET @description = 'Monitor ESXi hosts, datastores and VMs from a specific datacenter'; -SET @version = '1.4'; +SET @version = '1.5'; INSERT IGNORE INTO `tdiscovery_apps` (`id_app`, `short_name`, `name`, `section`, `description`, `version`) VALUES ('', @short_name, @name, @section, @description, @version); SELECT @id_app := `id_app` FROM `tdiscovery_apps` WHERE `short_name` = @short_name; diff --git a/pandora_console/vendor/artica/phpchartjs/src/Renderer/JavaScript.php b/pandora_console/vendor/artica/phpchartjs/src/Renderer/JavaScript.php index 6b4848cb00..9462f5c803 100644 --- a/pandora_console/vendor/artica/phpchartjs/src/Renderer/JavaScript.php +++ b/pandora_console/vendor/artica/phpchartjs/src/Renderer/JavaScript.php @@ -128,6 +128,13 @@ class JavaScript extends Renderer } } };'; + + if ($this->chart->options()->getTheme() !== null) { + if ((int) $this->chart->options()->getTheme() === 2) { + $script[] = 'Chart.defaults.color = "#ffffff";'; + } + } + $script[] = 'Chart.register(chart_watermark_'.$this->chart->getId().');'; } @@ -163,6 +170,10 @@ class JavaScript extends Renderer if (chart.config.options.title !== undefined ) { chart.config.options.title.fontColor = "#ffffff"; } + + if (chart.config.options.plugins.legend.labels.font !== undefined ) { + chart.config.options.plugins.legend.labels.font.color = "#ffffff"; + } '; } } diff --git a/pandora_console/vendor/autoload.php b/pandora_console/vendor/autoload.php index cac482501f..11b193c3ab 100644 --- a/pandora_console/vendor/autoload.php +++ b/pandora_console/vendor/autoload.php @@ -2,24 +2,6 @@ // autoload.php @generated by Composer -if (PHP_VERSION_ID < 50600) { - if (!headers_sent()) { - header('HTTP/1.1 500 Internal Server Error'); - } - $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; - if (!ini_get('display_errors')) { - if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { - fwrite(STDERR, $err); - } elseif (!headers_sent()) { - echo $err; - } - } - trigger_error( - $err, - E_USER_ERROR - ); -} - require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInit94a17e624d873685991e8ae888e00eb9::getLoader(); diff --git a/pandora_console/vendor/composer/ClassLoader.php b/pandora_console/vendor/composer/ClassLoader.php index a72151c77c..afef3fa2ad 100644 --- a/pandora_console/vendor/composer/ClassLoader.php +++ b/pandora_console/vendor/composer/ClassLoader.php @@ -42,9 +42,6 @@ namespace Composer\Autoload; */ class ClassLoader { - /** @var \Closure(string):void */ - private static $includeFile; - /** @var ?string */ private $vendorDir; @@ -109,7 +106,6 @@ class ClassLoader public function __construct($vendorDir = null) { $this->vendorDir = $vendorDir; - self::initializeIncludeClosure(); } /** @@ -429,8 +425,7 @@ class ClassLoader public function loadClass($class) { if ($file = $this->findFile($class)) { - $includeFile = self::$includeFile; - $includeFile($file); + includeFile($file); return true; } @@ -560,26 +555,18 @@ class ClassLoader return false; } - - /** - * @return void - */ - private static function initializeIncludeClosure() - { - if (self::$includeFile !== null) { - return; - } - - /** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - */ - self::$includeFile = \Closure::bind(static function($file) { - include $file; - }, null, null); - } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + * @private + */ +function includeFile($file) +{ + include $file; } diff --git a/pandora_console/vendor/composer/InstalledVersions.php b/pandora_console/vendor/composer/InstalledVersions.php index 39e55eab59..d50e0c9fcc 100644 --- a/pandora_console/vendor/composer/InstalledVersions.php +++ b/pandora_console/vendor/composer/InstalledVersions.php @@ -21,14 +21,12 @@ use Composer\Semver\VersionParser; * See also https://getcomposer.org/doc/07-runtime.md#installed-versions * * To require its presence, you can require `composer-runtime-api ^2.0` - * - * @final */ class InstalledVersions { /** * @var mixed[]|null - * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null */ private static $installed; @@ -39,7 +37,7 @@ class InstalledVersions /** * @var array[] - * @psalm-var array}> + * @psalm-var array}> */ private static $installedByVendor = array(); @@ -98,7 +96,7 @@ class InstalledVersions { foreach (self::getInstalled() as $installed) { if (isset($installed['versions'][$packageName])) { - return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; + return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); } } @@ -119,7 +117,7 @@ class InstalledVersions */ public static function satisfies(VersionParser $parser, $packageName, $constraint) { - $constraint = $parser->parseConstraints((string) $constraint); + $constraint = $parser->parseConstraints($constraint); $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); return $provided->matches($constraint); @@ -243,7 +241,7 @@ class InstalledVersions /** * @return array - * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} */ public static function getRootPackage() { @@ -257,7 +255,7 @@ class InstalledVersions * * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. * @return array[] - * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} */ public static function getRawData() { @@ -266,7 +264,7 @@ class InstalledVersions if (null === self::$installed) { // only require the installed.php file if this file is loaded from its dumped location, // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C' && is_file(__DIR__ . '/installed.php')) { + if (substr(__DIR__, -8, 1) !== 'C') { self::$installed = include __DIR__ . '/installed.php'; } else { self::$installed = array(); @@ -280,7 +278,7 @@ class InstalledVersions * Returns the raw data of all installed.php which are currently loaded for custom implementations * * @return array[] - * @psalm-return list}> + * @psalm-return list}> */ public static function getAllRawData() { @@ -303,7 +301,7 @@ class InstalledVersions * @param array[] $data A vendor/composer/installed.php data set * @return void * - * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data */ public static function reload($data) { @@ -313,7 +311,7 @@ class InstalledVersions /** * @return array[] - * @psalm-return list}> + * @psalm-return list}> */ private static function getInstalled() { @@ -328,9 +326,7 @@ class InstalledVersions if (isset(self::$installedByVendor[$vendorDir])) { $installed[] = self::$installedByVendor[$vendorDir]; } elseif (is_file($vendorDir.'/composer/installed.php')) { - /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ - $required = require $vendorDir.'/composer/installed.php'; - $installed[] = self::$installedByVendor[$vendorDir] = $required; + $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { self::$installed = $installed[count($installed) - 1]; } @@ -341,18 +337,13 @@ class InstalledVersions if (null === self::$installed) { // only require the installed.php file if this file is loaded from its dumped location, // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C' && is_file(__DIR__ . '/installed.php')) { - /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ - $required = require __DIR__ . '/installed.php'; - self::$installed = $required; + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = require __DIR__ . '/installed.php'; } else { self::$installed = array(); } } - - if (self::$installed !== array()) { - $installed[] = self::$installed; - } + $installed[] = self::$installed; return $installed; } diff --git a/pandora_console/vendor/composer/autoload_classmap.php b/pandora_console/vendor/composer/autoload_classmap.php index cae0fc2f27..53268f2a43 100644 --- a/pandora_console/vendor/composer/autoload_classmap.php +++ b/pandora_console/vendor/composer/autoload_classmap.php @@ -2,7 +2,7 @@ // autoload_classmap.php @generated by Composer -$vendorDir = dirname(__DIR__); +$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( diff --git a/pandora_console/vendor/composer/autoload_files.php b/pandora_console/vendor/composer/autoload_files.php index 6d15dcb42d..ebde7fd0d4 100644 --- a/pandora_console/vendor/composer/autoload_files.php +++ b/pandora_console/vendor/composer/autoload_files.php @@ -2,33 +2,28 @@ // autoload_files.php @generated by Composer -$vendorDir = dirname(__DIR__); +$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( 'e8aa6e4b5a1db2f56ae794f1505391a8' => $vendorDir . '/amphp/amp/lib/functions.php', '76cd0796156622033397994f25b0d8fc' => $vendorDir . '/amphp/amp/lib/Internal/functions.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', - '6cd5651c4fef5ed6b63e8d8b8ffbf3cc' => $vendorDir . '/amphp/byte-stream/lib/functions.php', + '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', + '6cd5651c4fef5ed6b63e8d8b8ffbf3cc' => $vendorDir . '/amphp/byte-stream/lib/functions.php', + '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php', + 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', '3da389f428d8ee50333e4391c3f45046' => $vendorDir . '/amphp/serialization/src/functions.php', 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', - 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', '8dc56fe697ca93c4b40d876df1c94584' => $vendorDir . '/amphp/process/lib/functions.php', 'bcb7d4fc55f4b1a7e10f5806723e9892' => $vendorDir . '/amphp/sync/src/functions.php', 'e187e371b30897d6dc51cac6a8c94ff6' => $vendorDir . '/amphp/sync/src/ConcurrentIterator/functions.php', - '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', '430de19db8b7ee88fdbe5c545d82d33d' => $vendorDir . '/amphp/parallel/lib/Context/functions.php', '888e1afeed2e8d13ef5a662692091e6e' => $vendorDir . '/amphp/parallel/lib/Sync/functions.php', '384cf4f2eb4d2f896db72315a76066ad' => $vendorDir . '/amphp/parallel/lib/Worker/functions.php', - '6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', - '253c157292f75eb38082b5acb06f3f01' => $vendorDir . '/nikic/fast-route/src/functions.php', - '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', - 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php', - '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', - '861372841bb4b8ba9fdd215894666f40' => $vendorDir . '/amphp/parallel-functions/src/functions.php', '07d7f1a47144818725fd8d91a907ac57' => $vendorDir . '/laminas/laminas-diactoros/src/functions/create_uploaded_file.php', 'da94ac5d3ca7d2dbab84ce561ce72bfd' => $vendorDir . '/laminas/laminas-diactoros/src/functions/marshal_headers_from_sapi.php', '3d97c8dcdfba8cb85d3b34f116bb248b' => $vendorDir . '/laminas/laminas-diactoros/src/functions/marshal_method_from_sapi.php', @@ -36,6 +31,11 @@ return array( 'de95e0ac670b27c84ef8c5ac41fc1b34' => $vendorDir . '/laminas/laminas-diactoros/src/functions/normalize_server.php', 'b6c2870932b0250c10334a86dcb33c7f' => $vendorDir . '/laminas/laminas-diactoros/src/functions/normalize_uploaded_files.php', 'd02cf21124526632320d6f20b1bbf905' => $vendorDir . '/laminas/laminas-diactoros/src/functions/parse_cookie_header.php', + '6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', + '253c157292f75eb38082b5acb06f3f01' => $vendorDir . '/nikic/fast-route/src/functions.php', + '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', + 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php', + '861372841bb4b8ba9fdd215894666f40' => $vendorDir . '/amphp/parallel-functions/src/functions.php', 'db356362850385d08a5381de2638b5fd' => $vendorDir . '/mpdf/mpdf/src/functions.php', 'b33e3d135e5d9e47d845c576147bda89' => $vendorDir . '/php-di/php-di/src/functions.php', 'e39a8b23c42d4e1452234d762b03835a' => $vendorDir . '/ramsey/uuid/src/functions.php', diff --git a/pandora_console/vendor/composer/autoload_namespaces.php b/pandora_console/vendor/composer/autoload_namespaces.php index 15a2ff3ad6..b7fc0125db 100644 --- a/pandora_console/vendor/composer/autoload_namespaces.php +++ b/pandora_console/vendor/composer/autoload_namespaces.php @@ -2,7 +2,7 @@ // autoload_namespaces.php @generated by Composer -$vendorDir = dirname(__DIR__); +$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( diff --git a/pandora_console/vendor/composer/autoload_psr4.php b/pandora_console/vendor/composer/autoload_psr4.php index 2b2cd523ee..e841d7bd8d 100644 --- a/pandora_console/vendor/composer/autoload_psr4.php +++ b/pandora_console/vendor/composer/autoload_psr4.php @@ -2,7 +2,7 @@ // autoload_psr4.php @generated by Composer -$vendorDir = dirname(__DIR__); +$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( @@ -31,6 +31,7 @@ return array( 'Psr\\Http\\Server\\' => array($vendorDir . '/psr/http-server-handler/src', $vendorDir . '/psr/http-server-middleware/src'), 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), + 'Psr\\Clock\\' => array($vendorDir . '/psr/clock/src'), 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), 'PandoraFMS\\Enterprise\\' => array($baseDir . '/enterprise/include/lib'), 'PandoraFMS\\' => array($baseDir . '/include/lib'), @@ -42,6 +43,8 @@ return array( 'Mpdf\\' => array($vendorDir . '/mpdf/mpdf/src'), 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), 'Models\\' => array($baseDir . '/include/rest-api/models'), + 'Lcobucci\\JWT\\' => array($vendorDir . '/lcobucci/jwt/src'), + 'Lcobucci\\Clock\\' => array($vendorDir . '/lcobucci/clock/src'), 'Laravel\\SerializableClosure\\' => array($vendorDir . '/laravel/serializable-closure/src'), 'Laminas\\Json\\' => array($vendorDir . '/laminas/laminas-json/src'), 'Laminas\\Diactoros\\' => array($vendorDir . '/laminas/laminas-diactoros/src'), diff --git a/pandora_console/vendor/composer/autoload_real.php b/pandora_console/vendor/composer/autoload_real.php index 12944ee0da..5a1c32f8a7 100644 --- a/pandora_console/vendor/composer/autoload_real.php +++ b/pandora_console/vendor/composer/autoload_real.php @@ -25,26 +25,56 @@ class ComposerAutoloaderInit94a17e624d873685991e8ae888e00eb9 require __DIR__ . '/platform_check.php'; spl_autoload_register(array('ComposerAutoloaderInit94a17e624d873685991e8ae888e00eb9', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); spl_autoload_unregister(array('ComposerAutoloaderInit94a17e624d873685991e8ae888e00eb9', 'loadClassLoader')); - require __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit94a17e624d873685991e8ae888e00eb9::getInitializer($loader)); + $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInit94a17e624d873685991e8ae888e00eb9::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } $loader->register(true); - $filesToLoad = \Composer\Autoload\ComposerStaticInit94a17e624d873685991e8ae888e00eb9::$files; - $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - - require $file; - } - }, null, null); - foreach ($filesToLoad as $fileIdentifier => $file) { - $requireFile($fileIdentifier, $file); + if ($useStaticLoader) { + $includeFiles = Composer\Autoload\ComposerStaticInit94a17e624d873685991e8ae888e00eb9::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequire94a17e624d873685991e8ae888e00eb9($fileIdentifier, $file); } return $loader; } } + +/** + * @param string $fileIdentifier + * @param string $file + * @return void + */ +function composerRequire94a17e624d873685991e8ae888e00eb9($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } +} diff --git a/pandora_console/vendor/composer/autoload_static.php b/pandora_console/vendor/composer/autoload_static.php index 7338ae1edc..711deb2b69 100644 --- a/pandora_console/vendor/composer/autoload_static.php +++ b/pandora_console/vendor/composer/autoload_static.php @@ -10,26 +10,21 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9 'e8aa6e4b5a1db2f56ae794f1505391a8' => __DIR__ . '/..' . '/amphp/amp/lib/functions.php', '76cd0796156622033397994f25b0d8fc' => __DIR__ . '/..' . '/amphp/amp/lib/Internal/functions.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', - '6cd5651c4fef5ed6b63e8d8b8ffbf3cc' => __DIR__ . '/..' . '/amphp/byte-stream/lib/functions.php', + '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + '6cd5651c4fef5ed6b63e8d8b8ffbf3cc' => __DIR__ . '/..' . '/amphp/byte-stream/lib/functions.php', + '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', + 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', '3da389f428d8ee50333e4391c3f45046' => __DIR__ . '/..' . '/amphp/serialization/src/functions.php', 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', - 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', '8dc56fe697ca93c4b40d876df1c94584' => __DIR__ . '/..' . '/amphp/process/lib/functions.php', 'bcb7d4fc55f4b1a7e10f5806723e9892' => __DIR__ . '/..' . '/amphp/sync/src/functions.php', 'e187e371b30897d6dc51cac6a8c94ff6' => __DIR__ . '/..' . '/amphp/sync/src/ConcurrentIterator/functions.php', - '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', '430de19db8b7ee88fdbe5c545d82d33d' => __DIR__ . '/..' . '/amphp/parallel/lib/Context/functions.php', '888e1afeed2e8d13ef5a662692091e6e' => __DIR__ . '/..' . '/amphp/parallel/lib/Sync/functions.php', '384cf4f2eb4d2f896db72315a76066ad' => __DIR__ . '/..' . '/amphp/parallel/lib/Worker/functions.php', - '6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', - '253c157292f75eb38082b5acb06f3f01' => __DIR__ . '/..' . '/nikic/fast-route/src/functions.php', - '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', - 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php', - '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', - '861372841bb4b8ba9fdd215894666f40' => __DIR__ . '/..' . '/amphp/parallel-functions/src/functions.php', '07d7f1a47144818725fd8d91a907ac57' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/functions/create_uploaded_file.php', 'da94ac5d3ca7d2dbab84ce561ce72bfd' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/functions/marshal_headers_from_sapi.php', '3d97c8dcdfba8cb85d3b34f116bb248b' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/functions/marshal_method_from_sapi.php', @@ -37,6 +32,11 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9 'de95e0ac670b27c84ef8c5ac41fc1b34' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/functions/normalize_server.php', 'b6c2870932b0250c10334a86dcb33c7f' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/functions/normalize_uploaded_files.php', 'd02cf21124526632320d6f20b1bbf905' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/functions/parse_cookie_header.php', + '6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', + '253c157292f75eb38082b5acb06f3f01' => __DIR__ . '/..' . '/nikic/fast-route/src/functions.php', + '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', + 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php', + '861372841bb4b8ba9fdd215894666f40' => __DIR__ . '/..' . '/amphp/parallel-functions/src/functions.php', 'db356362850385d08a5381de2638b5fd' => __DIR__ . '/..' . '/mpdf/mpdf/src/functions.php', 'b33e3d135e5d9e47d845c576147bda89' => __DIR__ . '/..' . '/php-di/php-di/src/functions.php', 'e39a8b23c42d4e1452234d762b03835a' => __DIR__ . '/..' . '/ramsey/uuid/src/functions.php', @@ -90,6 +90,7 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9 'Psr\\Http\\Server\\' => 16, 'Psr\\Http\\Message\\' => 17, 'Psr\\Container\\' => 14, + 'Psr\\Clock\\' => 10, 'Psr\\Cache\\' => 10, 'PandoraFMS\\Enterprise\\' => 22, 'PandoraFMS\\' => 11, @@ -113,6 +114,8 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9 ), 'L' => array ( + 'Lcobucci\\JWT\\' => 13, + 'Lcobucci\\Clock\\' => 15, 'Laravel\\SerializableClosure\\' => 28, 'Laminas\\Json\\' => 13, 'Laminas\\Diactoros\\' => 18, @@ -271,6 +274,10 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9 array ( 0 => __DIR__ . '/..' . '/psr/container/src', ), + 'Psr\\Clock\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/clock/src', + ), 'Psr\\Cache\\' => array ( 0 => __DIR__ . '/..' . '/psr/cache/src', @@ -315,6 +322,14 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9 array ( 0 => __DIR__ . '/../..' . '/include/rest-api/models', ), + 'Lcobucci\\JWT\\' => + array ( + 0 => __DIR__ . '/..' . '/lcobucci/jwt/src', + ), + 'Lcobucci\\Clock\\' => + array ( + 0 => __DIR__ . '/..' . '/lcobucci/clock/src', + ), 'Laravel\\SerializableClosure\\' => array ( 0 => __DIR__ . '/..' . '/laravel/serializable-closure/src', diff --git a/pandora_console/vendor/composer/installed.json b/pandora_console/vendor/composer/installed.json index 3ba9ef68d3..ae3230b939 100644 --- a/pandora_console/vendor/composer/installed.json +++ b/pandora_console/vendor/composer/installed.json @@ -1616,6 +1616,149 @@ }, "install-path": "../laravel/serializable-closure" }, + { + "name": "lcobucci/clock", + "version": "3.2.0", + "version_normalized": "3.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/clock.git", + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715", + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715", + "shasum": "" + }, + "require": { + "php": "~8.2.0 || ~8.3.0", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "infection/infection": "^0.27", + "lcobucci/coding-standard": "^11.0.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.25", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.13", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^10.2.3" + }, + "time": "2023-11-17T17:00:27+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Lcobucci\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com" + } + ], + "description": "Yet another clock abstraction", + "support": { + "issues": "https://github.com/lcobucci/clock/issues", + "source": "https://github.com/lcobucci/clock/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "install-path": "../lcobucci/clock" + }, + { + "name": "lcobucci/jwt", + "version": "5.2.0", + "version_normalized": "5.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "0ba88aed12c04bd2ed9924f500673f32b67a6211" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/0ba88aed12c04bd2ed9924f500673f32b67a6211", + "reference": "0ba88aed12c04bd2ed9924f500673f32b67a6211", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-sodium": "*", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "psr/clock": "^1.0" + }, + "require-dev": { + "infection/infection": "^0.27.0", + "lcobucci/clock": "^3.0", + "lcobucci/coding-standard": "^11.0", + "phpbench/phpbench": "^1.2.9", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10.7", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.10", + "phpstan/phpstan-strict-rules": "^1.5.0", + "phpunit/phpunit": "^10.2.6" + }, + "suggest": { + "lcobucci/clock": ">= 3.0" + }, + "time": "2023-11-20T21:17:42+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/5.2.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "install-path": "../lcobucci/jwt" + }, { "name": "monolog/monolog", "version": "3.5.0", @@ -2406,6 +2549,57 @@ }, "install-path": "../psr/cache" }, + { + "name": "psr/clock", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "time": "2022-11-25T14:36:26+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "install-path": "../psr/clock" + }, { "name": "psr/container", "version": "2.0.2", diff --git a/pandora_console/vendor/composer/installed.php b/pandora_console/vendor/composer/installed.php index 132d3269a2..852e3921ad 100644 --- a/pandora_console/vendor/composer/installed.php +++ b/pandora_console/vendor/composer/installed.php @@ -1,328 +1,346 @@ array( - 'name' => 'pandorafms/console', 'pretty_version' => 'dev-develop', 'version' => 'dev-develop', - 'reference' => '8bf414b51f3333555f84df8b23614ca4b68c7fd4', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), + 'reference' => '670829fa5833a6f666ebf4c78669ca6fdac476c9', + 'name' => 'pandorafms/console', 'dev' => true, ), 'versions' => array( 'amphp/amp' => array( 'pretty_version' => 'v2.6.2', 'version' => '2.6.2.0', - 'reference' => '9d5100cebffa729aaffecd3ad25dc5aeea4f13bb', 'type' => 'library', 'install_path' => __DIR__ . '/../amphp/amp', 'aliases' => array(), + 'reference' => '9d5100cebffa729aaffecd3ad25dc5aeea4f13bb', 'dev_requirement' => false, ), 'amphp/byte-stream' => array( 'pretty_version' => 'v1.8.1', 'version' => '1.8.1.0', - 'reference' => 'acbd8002b3536485c997c4e019206b3f10ca15bd', 'type' => 'library', 'install_path' => __DIR__ . '/../amphp/byte-stream', 'aliases' => array(), + 'reference' => 'acbd8002b3536485c997c4e019206b3f10ca15bd', 'dev_requirement' => false, ), 'amphp/parallel' => array( 'pretty_version' => 'v1.4.3', 'version' => '1.4.3.0', - 'reference' => '3aac213ba7858566fd83d38ccb85b91b2d652cb0', 'type' => 'library', 'install_path' => __DIR__ . '/../amphp/parallel', 'aliases' => array(), + 'reference' => '3aac213ba7858566fd83d38ccb85b91b2d652cb0', 'dev_requirement' => false, ), 'amphp/parallel-functions' => array( 'pretty_version' => 'v1.1.0', 'version' => '1.1.0.0', - 'reference' => '04e92fcacfc921a56dfe12c23b3265e62593a7cb', 'type' => 'library', 'install_path' => __DIR__ . '/../amphp/parallel-functions', 'aliases' => array(), + 'reference' => '04e92fcacfc921a56dfe12c23b3265e62593a7cb', 'dev_requirement' => false, ), 'amphp/parser' => array( 'pretty_version' => 'v1.1.0', 'version' => '1.1.0.0', - 'reference' => 'ff1de4144726c5dad5fab97f66692ebe8de3e151', 'type' => 'library', 'install_path' => __DIR__ . '/../amphp/parser', 'aliases' => array(), + 'reference' => 'ff1de4144726c5dad5fab97f66692ebe8de3e151', 'dev_requirement' => false, ), 'amphp/process' => array( 'pretty_version' => 'v1.1.4', 'version' => '1.1.4.0', - 'reference' => '76e9495fd6818b43a20167cb11d8a67f7744ee0f', 'type' => 'library', 'install_path' => __DIR__ . '/../amphp/process', 'aliases' => array(), + 'reference' => '76e9495fd6818b43a20167cb11d8a67f7744ee0f', 'dev_requirement' => false, ), 'amphp/serialization' => array( 'pretty_version' => 'v1.0.0', 'version' => '1.0.0.0', - 'reference' => '693e77b2fb0b266c3c7d622317f881de44ae94a1', 'type' => 'library', 'install_path' => __DIR__ . '/../amphp/serialization', 'aliases' => array(), + 'reference' => '693e77b2fb0b266c3c7d622317f881de44ae94a1', 'dev_requirement' => false, ), 'amphp/sync' => array( 'pretty_version' => 'v1.4.2', 'version' => '1.4.2.0', - 'reference' => '85ab06764f4f36d63b1356b466df6111cf4b89cf', 'type' => 'library', 'install_path' => __DIR__ . '/../amphp/sync', 'aliases' => array(), + 'reference' => '85ab06764f4f36d63b1356b466df6111cf4b89cf', 'dev_requirement' => false, ), 'artica/phpchartjs' => array( 'pretty_version' => 'v1.0.2', 'version' => '1.0.2.0', - 'reference' => '681980c084ad505f9dc811d3d1f02ffc9442ccee', 'type' => 'package', 'install_path' => __DIR__ . '/../artica/phpchartjs', 'aliases' => array(), + 'reference' => '681980c084ad505f9dc811d3d1f02ffc9442ccee', 'dev_requirement' => false, ), 'brick/math' => array( 'pretty_version' => '0.11.0', 'version' => '0.11.0.0', - 'reference' => '0ad82ce168c82ba30d1c01ec86116ab52f589478', 'type' => 'library', 'install_path' => __DIR__ . '/../brick/math', 'aliases' => array(), + 'reference' => '0ad82ce168c82ba30d1c01ec86116ab52f589478', 'dev_requirement' => false, ), 'chrome-php/chrome' => array( 'pretty_version' => 'v1.10.0', 'version' => '1.10.0.0', - 'reference' => '2b7cb13e618602d13bdede20b6b7ae478f3f6eaa', 'type' => 'library', 'install_path' => __DIR__ . '/../chrome-php/chrome', 'aliases' => array(), + 'reference' => '2b7cb13e618602d13bdede20b6b7ae478f3f6eaa', 'dev_requirement' => false, ), 'chrome-php/wrench' => array( 'pretty_version' => 'v1.5.0', 'version' => '1.5.0.0', - 'reference' => '725246324339e5fd5d798361b561e81004324f96', 'type' => 'library', 'install_path' => __DIR__ . '/../chrome-php/wrench', 'aliases' => array(), + 'reference' => '725246324339e5fd5d798361b561e81004324f96', 'dev_requirement' => false, ), 'doctrine/annotations' => array( 'pretty_version' => '2.0.1', 'version' => '2.0.1.0', - 'reference' => 'e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/annotations', 'aliases' => array(), + 'reference' => 'e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f', 'dev_requirement' => false, ), 'doctrine/deprecations' => array( 'pretty_version' => '1.1.3', 'version' => '1.1.3.0', - 'reference' => 'dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/deprecations', 'aliases' => array(), + 'reference' => 'dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab', 'dev_requirement' => false, ), 'doctrine/lexer' => array( 'pretty_version' => '2.1.0', 'version' => '2.1.0.0', - 'reference' => '39ab8fcf5a51ce4b85ca97c7a7d033eb12831124', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/lexer', 'aliases' => array(), + 'reference' => '39ab8fcf5a51ce4b85ca97c7a7d033eb12831124', 'dev_requirement' => false, ), 'egulias/email-validator' => array( 'pretty_version' => '3.2.6', 'version' => '3.2.6.0', - 'reference' => 'e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7', 'type' => 'library', 'install_path' => __DIR__ . '/../egulias/email-validator', 'aliases' => array(), + 'reference' => 'e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7', 'dev_requirement' => false, ), 'evenement/evenement' => array( 'pretty_version' => 'v3.0.2', 'version' => '3.0.2.0', - 'reference' => '0a16b0d71ab13284339abb99d9d2bd813640efbc', 'type' => 'library', 'install_path' => __DIR__ . '/../evenement/evenement', 'aliases' => array(), + 'reference' => '0a16b0d71ab13284339abb99d9d2bd813640efbc', 'dev_requirement' => false, ), 'fig/http-message-util' => array( 'pretty_version' => '1.1.5', 'version' => '1.1.5.0', - 'reference' => '9d94dc0154230ac39e5bf89398b324a86f63f765', 'type' => 'library', 'install_path' => __DIR__ . '/../fig/http-message-util', 'aliases' => array(), + 'reference' => '9d94dc0154230ac39e5bf89398b324a86f63f765', 'dev_requirement' => false, ), 'guzzlehttp/psr7' => array( 'pretty_version' => '2.6.2', 'version' => '2.6.2.0', - 'reference' => '45b30f99ac27b5ca93cb4831afe16285f57b8221', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/psr7', 'aliases' => array(), + 'reference' => '45b30f99ac27b5ca93cb4831afe16285f57b8221', 'dev_requirement' => false, ), 'halfpastfouram/collection' => array( 'pretty_version' => 'v1.0.0', 'version' => '1.0.0.0', - 'reference' => '0862d0b431fef9dc2245518dc06b86ff00dcd102', 'type' => 'package', 'install_path' => __DIR__ . '/../halfpastfouram/collection', 'aliases' => array(), + 'reference' => '0862d0b431fef9dc2245518dc06b86ff00dcd102', 'dev_requirement' => false, ), 'laminas/laminas-diactoros' => array( 'pretty_version' => '3.3.0', 'version' => '3.3.0.0', - 'reference' => '4db52734837c60259c9b2d7caf08eef8f7f9b9ac', 'type' => 'library', 'install_path' => __DIR__ . '/../laminas/laminas-diactoros', 'aliases' => array(), + 'reference' => '4db52734837c60259c9b2d7caf08eef8f7f9b9ac', 'dev_requirement' => false, ), 'laminas/laminas-json' => array( 'pretty_version' => '3.6.0', 'version' => '3.6.0.0', - 'reference' => '53ff787b20b77197f38680c737e8dfffa846b85b', 'type' => 'library', 'install_path' => __DIR__ . '/../laminas/laminas-json', 'aliases' => array(), + 'reference' => '53ff787b20b77197f38680c737e8dfffa846b85b', 'dev_requirement' => false, ), 'laravel/serializable-closure' => array( 'pretty_version' => 'v1.3.3', 'version' => '1.3.3.0', - 'reference' => '3dbf8a8e914634c48d389c1234552666b3d43754', 'type' => 'library', 'install_path' => __DIR__ . '/../laravel/serializable-closure', 'aliases' => array(), + 'reference' => '3dbf8a8e914634c48d389c1234552666b3d43754', + 'dev_requirement' => false, + ), + 'lcobucci/clock' => array( + 'pretty_version' => '3.2.0', + 'version' => '3.2.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../lcobucci/clock', + 'aliases' => array(), + 'reference' => '6f28b826ea01306b07980cb8320ab30b966cd715', + 'dev_requirement' => false, + ), + 'lcobucci/jwt' => array( + 'pretty_version' => '5.2.0', + 'version' => '5.2.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../lcobucci/jwt', + 'aliases' => array(), + 'reference' => '0ba88aed12c04bd2ed9924f500673f32b67a6211', 'dev_requirement' => false, ), 'monolog/monolog' => array( 'pretty_version' => '3.5.0', 'version' => '3.5.0.0', - 'reference' => 'c915e2634718dbc8a4a15c61b0e62e7a44e14448', 'type' => 'library', 'install_path' => __DIR__ . '/../monolog/monolog', 'aliases' => array(), + 'reference' => 'c915e2634718dbc8a4a15c61b0e62e7a44e14448', 'dev_requirement' => false, ), 'mpdf/mpdf' => array( 'pretty_version' => 'v8.2.2', 'version' => '8.2.2.0', - 'reference' => '596a87b876d7793be7be060a8ac13424de120dd5', 'type' => 'library', 'install_path' => __DIR__ . '/../mpdf/mpdf', 'aliases' => array(), + 'reference' => '596a87b876d7793be7be060a8ac13424de120dd5', 'dev_requirement' => false, ), 'mpdf/psr-http-message-shim' => array( 'pretty_version' => '1.0.0', 'version' => '1.0.0.0', - 'reference' => '3206e6b80b6d2479e148ee497e9f2bebadc919db', 'type' => 'library', 'install_path' => __DIR__ . '/../mpdf/psr-http-message-shim', 'aliases' => array(), + 'reference' => '3206e6b80b6d2479e148ee497e9f2bebadc919db', 'dev_requirement' => false, ), 'mpdf/psr-log-aware-trait' => array( 'pretty_version' => 'v3.0.0', 'version' => '3.0.0.0', - 'reference' => 'a633da6065e946cc491e1c962850344bb0bf3e78', 'type' => 'library', 'install_path' => __DIR__ . '/../mpdf/psr-log-aware-trait', 'aliases' => array(), + 'reference' => 'a633da6065e946cc491e1c962850344bb0bf3e78', 'dev_requirement' => false, ), 'myclabs/deep-copy' => array( 'pretty_version' => '1.11.1', 'version' => '1.11.1.0', - 'reference' => '7284c22080590fb39f2ffa3e9057f10a4ddd0e0c', 'type' => 'library', 'install_path' => __DIR__ . '/../myclabs/deep-copy', 'aliases' => array(), + 'reference' => '7284c22080590fb39f2ffa3e9057f10a4ddd0e0c', 'dev_requirement' => false, ), 'nikic/fast-route' => array( 'pretty_version' => 'v1.3.0', 'version' => '1.3.0.0', - 'reference' => '181d480e08d9476e61381e04a71b34dc0432e812', 'type' => 'library', 'install_path' => __DIR__ . '/../nikic/fast-route', 'aliases' => array(), + 'reference' => '181d480e08d9476e61381e04a71b34dc0432e812', 'dev_requirement' => false, ), 'nyholm/psr7' => array( 'pretty_version' => '1.8.1', 'version' => '1.8.1.0', - 'reference' => 'aa5fc277a4f5508013d571341ade0c3886d4d00e', 'type' => 'library', 'install_path' => __DIR__ . '/../nyholm/psr7', 'aliases' => array(), + 'reference' => 'aa5fc277a4f5508013d571341ade0c3886d4d00e', 'dev_requirement' => false, ), 'nyholm/psr7-server' => array( 'pretty_version' => '1.1.0', 'version' => '1.1.0.0', - 'reference' => '4335801d851f554ca43fa6e7d2602141538854dc', 'type' => 'library', 'install_path' => __DIR__ . '/../nyholm/psr7-server', 'aliases' => array(), + 'reference' => '4335801d851f554ca43fa6e7d2602141538854dc', 'dev_requirement' => false, ), 'pandorafms/console' => array( 'pretty_version' => 'dev-develop', 'version' => 'dev-develop', - 'reference' => '8bf414b51f3333555f84df8b23614ca4b68c7fd4', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), + 'reference' => '670829fa5833a6f666ebf4c78669ca6fdac476c9', 'dev_requirement' => false, ), 'paragonie/random_compat' => array( 'pretty_version' => 'v9.99.100', 'version' => '9.99.100.0', - 'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a', 'type' => 'library', 'install_path' => __DIR__ . '/../paragonie/random_compat', 'aliases' => array(), + 'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a', 'dev_requirement' => false, ), 'php-di/invoker' => array( 'pretty_version' => '2.3.4', 'version' => '2.3.4.0', - 'reference' => '33234b32dafa8eb69202f950a1fc92055ed76a86', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/invoker', 'aliases' => array(), + 'reference' => '33234b32dafa8eb69202f950a1fc92055ed76a86', 'dev_requirement' => false, ), 'php-di/php-di' => array( 'pretty_version' => '7.0.6', 'version' => '7.0.6.0', - 'reference' => '8097948a89f6ec782839b3e958432f427cac37fd', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/php-di', 'aliases' => array(), + 'reference' => '8097948a89f6ec782839b3e958432f427cac37fd', 'dev_requirement' => false, ), 'php-http/message-factory-implementation' => array( @@ -334,19 +352,34 @@ 'psr/cache' => array( 'pretty_version' => '3.0.0', 'version' => '3.0.0.0', - 'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/cache', 'aliases' => array(), + 'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf', 'dev_requirement' => false, ), + 'psr/clock' => array( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/clock', + 'aliases' => array(), + 'reference' => 'e41a24703d4560fd0acb709162f73b8adfc3aa0d', + 'dev_requirement' => false, + ), + 'psr/clock-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0', + ), + ), 'psr/container' => array( 'pretty_version' => '2.0.2', 'version' => '2.0.2.0', - 'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), + 'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963', 'dev_requirement' => false, ), 'psr/container-implementation' => array( @@ -358,10 +391,10 @@ 'psr/http-factory' => array( 'pretty_version' => '1.0.2', 'version' => '1.0.2.0', - 'reference' => 'e616d01114759c4c489f93b099585439f795fe35', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-factory', 'aliases' => array(), + 'reference' => 'e616d01114759c4c489f93b099585439f795fe35', 'dev_requirement' => false, ), 'psr/http-factory-implementation' => array( @@ -374,10 +407,10 @@ 'psr/http-message' => array( 'pretty_version' => '1.1', 'version' => '1.1.0.0', - 'reference' => 'cb6ce4845ce34a8ad9e68117c10ee90a29919eba', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-message', 'aliases' => array(), + 'reference' => 'cb6ce4845ce34a8ad9e68117c10ee90a29919eba', 'dev_requirement' => false, ), 'psr/http-message-implementation' => array( @@ -390,28 +423,28 @@ 'psr/http-server-handler' => array( 'pretty_version' => '1.0.2', 'version' => '1.0.2.0', - 'reference' => '84c4fb66179be4caaf8e97bd239203245302e7d4', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-server-handler', 'aliases' => array(), + 'reference' => '84c4fb66179be4caaf8e97bd239203245302e7d4', 'dev_requirement' => false, ), 'psr/http-server-middleware' => array( 'pretty_version' => '1.0.2', 'version' => '1.0.2.0', - 'reference' => 'c1481f747daaa6a0782775cd6a8c26a1bf4a3829', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-server-middleware', 'aliases' => array(), + 'reference' => 'c1481f747daaa6a0782775cd6a8c26a1bf4a3829', 'dev_requirement' => false, ), 'psr/log' => array( 'pretty_version' => '3.0.0', 'version' => '3.0.0.0', - 'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), + 'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001', 'dev_requirement' => false, ), 'psr/log-implementation' => array( @@ -423,28 +456,28 @@ 'ralouphie/getallheaders' => array( 'pretty_version' => '3.0.3', 'version' => '3.0.3.0', - 'reference' => '120b605dfeb996808c31b6477290a714d356e822', 'type' => 'library', 'install_path' => __DIR__ . '/../ralouphie/getallheaders', 'aliases' => array(), + 'reference' => '120b605dfeb996808c31b6477290a714d356e822', 'dev_requirement' => false, ), 'ramsey/collection' => array( 'pretty_version' => '2.0.0', 'version' => '2.0.0.0', - 'reference' => 'a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5', 'type' => 'library', 'install_path' => __DIR__ . '/../ramsey/collection', 'aliases' => array(), + 'reference' => 'a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5', 'dev_requirement' => false, ), 'ramsey/uuid' => array( 'pretty_version' => '4.7.5', 'version' => '4.7.5.0', - 'reference' => '5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e', 'type' => 'library', 'install_path' => __DIR__ . '/../ramsey/uuid', 'aliases' => array(), + 'reference' => '5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e', 'dev_requirement' => false, ), 'rhumsaa/uuid' => array( @@ -456,172 +489,172 @@ 'setasign/fpdi' => array( 'pretty_version' => 'v2.6.0', 'version' => '2.6.0.0', - 'reference' => 'a6db878129ec6c7e141316ee71872923e7f1b7ad', 'type' => 'library', 'install_path' => __DIR__ . '/../setasign/fpdi', 'aliases' => array(), + 'reference' => 'a6db878129ec6c7e141316ee71872923e7f1b7ad', 'dev_requirement' => false, ), 'slim/psr7' => array( 'pretty_version' => '1.6.1', 'version' => '1.6.1.0', - 'reference' => '72d2b2bac94ab4575d369f605dbfafbe168d3163', 'type' => 'library', 'install_path' => __DIR__ . '/../slim/psr7', 'aliases' => array(), + 'reference' => '72d2b2bac94ab4575d369f605dbfafbe168d3163', 'dev_requirement' => false, ), 'slim/slim' => array( 'pretty_version' => '4.12.0', 'version' => '4.12.0.0', - 'reference' => 'e9e99c2b24398b967841c6c4c3048622cc7e2b18', 'type' => 'library', 'install_path' => __DIR__ . '/../slim/slim', 'aliases' => array(), + 'reference' => 'e9e99c2b24398b967841c6c4c3048622cc7e2b18', 'dev_requirement' => false, ), 'swiftmailer/swiftmailer' => array( 'pretty_version' => 'v6.3.0', 'version' => '6.3.0.0', - 'reference' => '8a5d5072dca8f48460fce2f4131fcc495eec654c', 'type' => 'library', 'install_path' => __DIR__ . '/../swiftmailer/swiftmailer', 'aliases' => array(), + 'reference' => '8a5d5072dca8f48460fce2f4131fcc495eec654c', 'dev_requirement' => false, ), 'symfony/deprecation-contracts' => array( 'pretty_version' => 'v3.4.0', 'version' => '3.4.0.0', - 'reference' => '7c3aff79d10325257a001fcf92d991f24fc967cf', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), + 'reference' => '7c3aff79d10325257a001fcf92d991f24fc967cf', 'dev_requirement' => false, ), 'symfony/filesystem' => array( 'pretty_version' => 'v7.0.3', 'version' => '7.0.3.0', - 'reference' => '2890e3a825bc0c0558526c04499c13f83e1b6b12', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), + 'reference' => '2890e3a825bc0c0558526c04499c13f83e1b6b12', 'dev_requirement' => false, ), 'symfony/finder' => array( 'pretty_version' => 'v7.0.0', 'version' => '7.0.0.0', - 'reference' => '6e5688d69f7cfc4ed4a511e96007e06c2d34ce56', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/finder', 'aliases' => array(), + 'reference' => '6e5688d69f7cfc4ed4a511e96007e06c2d34ce56', 'dev_requirement' => false, ), 'symfony/polyfill-ctype' => array( 'pretty_version' => 'v1.28.0', 'version' => '1.28.0.0', - 'reference' => 'ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', 'aliases' => array(), + 'reference' => 'ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb', 'dev_requirement' => false, ), 'symfony/polyfill-iconv' => array( 'pretty_version' => 'v1.28.0', 'version' => '1.28.0.0', - 'reference' => '6de50471469b8c9afc38164452ab2b6170ee71c1', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-iconv', 'aliases' => array(), + 'reference' => '6de50471469b8c9afc38164452ab2b6170ee71c1', 'dev_requirement' => false, ), 'symfony/polyfill-intl-idn' => array( 'pretty_version' => 'v1.28.0', 'version' => '1.28.0.0', - 'reference' => 'ecaafce9f77234a6a449d29e49267ba10499116d', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-idn', 'aliases' => array(), + 'reference' => 'ecaafce9f77234a6a449d29e49267ba10499116d', 'dev_requirement' => false, ), 'symfony/polyfill-intl-normalizer' => array( 'pretty_version' => 'v1.28.0', 'version' => '1.28.0.0', - 'reference' => '8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', 'aliases' => array(), + 'reference' => '8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92', 'dev_requirement' => false, ), 'symfony/polyfill-mbstring' => array( 'pretty_version' => 'v1.28.0', 'version' => '1.28.0.0', - 'reference' => '42292d99c55abe617799667f454222c54c60e229', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), + 'reference' => '42292d99c55abe617799667f454222c54c60e229', 'dev_requirement' => false, ), 'symfony/polyfill-php72' => array( 'pretty_version' => 'v1.28.0', 'version' => '1.28.0.0', - 'reference' => '70f4aebd92afca2f865444d30a4d2151c13c3179', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php72', 'aliases' => array(), + 'reference' => '70f4aebd92afca2f865444d30a4d2151c13c3179', 'dev_requirement' => false, ), 'symfony/polyfill-php80' => array( 'pretty_version' => 'v1.28.0', 'version' => '1.28.0.0', - 'reference' => '6caa57379c4aec19c0a12a38b59b26487dcfe4b5', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), + 'reference' => '6caa57379c4aec19c0a12a38b59b26487dcfe4b5', 'dev_requirement' => false, ), 'symfony/process' => array( 'pretty_version' => 'v7.0.3', 'version' => '7.0.3.0', - 'reference' => '937a195147e0c27b2759ade834169ed006d0bc74', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/process', 'aliases' => array(), + 'reference' => '937a195147e0c27b2759ade834169ed006d0bc74', 'dev_requirement' => false, ), 'symfony/var-dumper' => array( 'pretty_version' => 'v3.4.47', 'version' => '3.4.47.0', - 'reference' => '0719f6cf4633a38b2c1585140998579ce23b4b7d', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/var-dumper', 'aliases' => array(), + 'reference' => '0719f6cf4633a38b2c1585140998579ce23b4b7d', 'dev_requirement' => false, ), 'symfony/yaml' => array( 'pretty_version' => 'v7.0.3', 'version' => '7.0.3.0', - 'reference' => '2d4fca631c00700597e9442a0b2451ce234513d3', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/yaml', 'aliases' => array(), + 'reference' => '2d4fca631c00700597e9442a0b2451ce234513d3', 'dev_requirement' => false, ), 'tinymce/tinymce' => array( 'pretty_version' => '6.8.2', 'version' => '6.8.2.0', - 'reference' => 'b0073db409746748af4fc06fbee337bb99f462d9', 'type' => 'component', 'install_path' => __DIR__ . '/../tinymce/tinymce', 'aliases' => array(), + 'reference' => 'b0073db409746748af4fc06fbee337bb99f462d9', 'dev_requirement' => false, ), 'zircote/swagger-php' => array( 'pretty_version' => '4.8.3', 'version' => '4.8.3.0', - 'reference' => '598958d8a83cfbd44ba36388b2f9ed69e8b86ed4', 'type' => 'library', 'install_path' => __DIR__ . '/../zircote/swagger-php', 'aliases' => array(), + 'reference' => '598958d8a83cfbd44ba36388b2f9ed69e8b86ed4', 'dev_requirement' => false, ), ), diff --git a/pandora_console/vendor/composer/platform_check.php b/pandora_console/vendor/composer/platform_check.php index 51c545e82f..d32d90c6a9 100644 --- a/pandora_console/vendor/composer/platform_check.php +++ b/pandora_console/vendor/composer/platform_check.php @@ -16,35 +16,7 @@ if ($issues) { if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); } elseif (!headers_sent()) { - require_once __DIR__.'/../../include/functions_ui.php'; - - $url = str_replace('/var/www/html/', '', __DIR__); - $url = str_replace('/vendor/composer', '', $url); - - echo ''; - ?> - - - - '; - echo '
    '; - echo '

    Composer detected issues in your platform:

    '; - echo '
    '; - echo sprintf( - 'PandoraFMS requires PHP 8.2 to work properly and the version %s has been detected. Please update the PHP version of the system.', - PHP_VERSION, - ); - echo '
    '; + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; } } trigger_error( diff --git a/pandora_console/vendor/lcobucci/clock/LICENSE b/pandora_console/vendor/lcobucci/clock/LICENSE new file mode 100644 index 0000000000..58ea9440eb --- /dev/null +++ b/pandora_console/vendor/lcobucci/clock/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Luís Cobucci + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pandora_console/vendor/lcobucci/clock/composer.json b/pandora_console/vendor/lcobucci/clock/composer.json new file mode 100644 index 0000000000..f2cd93b76f --- /dev/null +++ b/pandora_console/vendor/lcobucci/clock/composer.json @@ -0,0 +1,48 @@ +{ + "name": "lcobucci/clock", + "description": "Yet another clock abstraction", + "license": "MIT", + "type": "library", + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com" + } + ], + "require": { + "php": "~8.2.0 || ~8.3.0", + "psr/clock": "^1.0" + }, + "require-dev": { + "infection/infection": "^0.27", + "lcobucci/coding-standard": "^11.0.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.25", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.13", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^10.2.3" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "autoload": { + "psr-4": { + "Lcobucci\\Clock\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Lcobucci\\Clock\\": "test" + } + }, + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true, + "infection/extension-installer": true, + "phpstan/extension-installer": true + }, + "preferred-install": "dist", + "sort-packages": true + } +} diff --git a/pandora_console/vendor/lcobucci/clock/src/Clock.php b/pandora_console/vendor/lcobucci/clock/src/Clock.php new file mode 100644 index 0000000000..45a033b875 --- /dev/null +++ b/pandora_console/vendor/lcobucci/clock/src/Clock.php @@ -0,0 +1,12 @@ +now = $now; + } + + public function now(): DateTimeImmutable + { + return $this->now; + } +} diff --git a/pandora_console/vendor/lcobucci/clock/src/SystemClock.php b/pandora_console/vendor/lcobucci/clock/src/SystemClock.php new file mode 100644 index 0000000000..6b65dfa53e --- /dev/null +++ b/pandora_console/vendor/lcobucci/clock/src/SystemClock.php @@ -0,0 +1,32 @@ +timezone); + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/.readthedocs.yaml b/pandora_console/vendor/lcobucci/jwt/.readthedocs.yaml new file mode 100644 index 0000000000..aa49c94360 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/.readthedocs.yaml @@ -0,0 +1,9 @@ +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3" + +mkdocs: + configuration: mkdocs.yml diff --git a/pandora_console/vendor/lcobucci/jwt/LICENSE b/pandora_console/vendor/lcobucci/jwt/LICENSE new file mode 100644 index 0000000000..cc7e28f16b --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2014, Luís Cobucci +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* 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. + +* Neither the name of the {organization} nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. diff --git a/pandora_console/vendor/lcobucci/jwt/composer.json b/pandora_console/vendor/lcobucci/jwt/composer.json new file mode 100644 index 0000000000..a61868948d --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/composer.json @@ -0,0 +1,63 @@ +{ + "name": "lcobucci/jwt", + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "license": [ + "BSD-3-Clause" + ], + "type": "library", + "keywords": [ + "JWT", + "JWS" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "require": { + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "ext-openssl": "*", + "ext-sodium": "*", + "psr/clock": "^1.0" + }, + "require-dev": { + "infection/infection": "^0.27.0", + "lcobucci/clock": "^3.0", + "lcobucci/coding-standard": "^11.0", + "phpbench/phpbench": "^1.2.9", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10.7", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.10", + "phpstan/phpstan-strict-rules": "^1.5.0", + "phpunit/phpunit": "^10.2.6" + }, + "suggest": { + "lcobucci/clock": ">= 3.0" + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Lcobucci\\JWT\\Tests\\": "tests" + } + }, + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true, + "infection/extension-installer": true, + "ocramius/package-versions": true, + "phpstan/extension-installer": true + }, + "platform": { + "php": "8.1.99" + }, + "preferred-install": "dist", + "sort-packages": true + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/renovate.json b/pandora_console/vendor/lcobucci/jwt/renovate.json new file mode 100644 index 0000000000..d0adcc3ae4 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "local>lcobucci/.github:renovate-config" + ] +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Builder.php b/pandora_console/vendor/lcobucci/jwt/src/Builder.php new file mode 100644 index 0000000000..4295e3f0b6 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Builder.php @@ -0,0 +1,85 @@ + $claims + * + * @return array + */ + public function formatClaims(array $claims): array; +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Configuration.php b/pandora_console/vendor/lcobucci/jwt/src/Configuration.php new file mode 100644 index 0000000000..488ea3e232 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Configuration.php @@ -0,0 +1,131 @@ +parser = new Token\Parser($decoder); + $this->validator = new Validation\Validator(); + + $this->builderFactory = static function (ClaimsFormatter $claimFormatter) use ($encoder): Builder { + return new Token\Builder($encoder, $claimFormatter); + }; + } + + public static function forAsymmetricSigner( + Signer $signer, + Key $signingKey, + Key $verificationKey, + Encoder $encoder = new JoseEncoder(), + Decoder $decoder = new JoseEncoder(), + ): self { + return new self( + $signer, + $signingKey, + $verificationKey, + $encoder, + $decoder, + ); + } + + public static function forSymmetricSigner( + Signer $signer, + Key $key, + Encoder $encoder = new JoseEncoder(), + Decoder $decoder = new JoseEncoder(), + ): self { + return new self( + $signer, + $key, + $key, + $encoder, + $decoder, + ); + } + + /** @param callable(ClaimsFormatter): Builder $builderFactory */ + public function setBuilderFactory(callable $builderFactory): void + { + $this->builderFactory = $builderFactory(...); + } + + public function builder(?ClaimsFormatter $claimFormatter = null): Builder + { + return ($this->builderFactory)($claimFormatter ?? ChainedFormatter::default()); + } + + public function parser(): Parser + { + return $this->parser; + } + + public function setParser(Parser $parser): void + { + $this->parser = $parser; + } + + public function signer(): Signer + { + return $this->signer; + } + + public function signingKey(): Key + { + return $this->signingKey; + } + + public function verificationKey(): Key + { + return $this->verificationKey; + } + + public function validator(): Validator + { + return $this->validator; + } + + public function setValidator(Validator $validator): void + { + $this->validator = $validator; + } + + /** @return Constraint[] */ + public function validationConstraints(): array + { + return $this->validationConstraints; + } + + public function setValidationConstraints(Constraint ...$validationConstraints): void + { + $this->validationConstraints = $validationConstraints; + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Decoder.php b/pandora_console/vendor/lcobucci/jwt/src/Decoder.php new file mode 100644 index 0000000000..6b24b9268d --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Decoder.php @@ -0,0 +1,29 @@ + */ + private array $formatters; + + public function __construct(ClaimsFormatter ...$formatters) + { + $this->formatters = $formatters; + } + + public static function default(): self + { + return new self(new UnifyAudience(), new MicrosecondBasedDateConversion()); + } + + public static function withUnixTimestampDates(): self + { + return new self(new UnifyAudience(), new UnixTimestampDates()); + } + + /** @inheritdoc */ + public function formatClaims(array $claims): array + { + foreach ($this->formatters as $formatter) { + $claims = $formatter->formatClaims($claims); + } + + return $claims; + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Encoding/JoseEncoder.php b/pandora_console/vendor/lcobucci/jwt/src/Encoding/JoseEncoder.php new file mode 100644 index 0000000000..0d9044427e --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Encoding/JoseEncoder.php @@ -0,0 +1,56 @@ +convertDate($claims[$claim]); + } + + return $claims; + } + + private function convertDate(DateTimeImmutable $date): int|float + { + if ($date->format('u') === '000000') { + return (int) $date->format('U'); + } + + return (float) $date->format('U.u'); + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Encoding/UnifyAudience.php b/pandora_console/vendor/lcobucci/jwt/src/Encoding/UnifyAudience.php new file mode 100644 index 0000000000..cf57252e9e --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Encoding/UnifyAudience.php @@ -0,0 +1,29 @@ +convertDate($claims[$claim]); + } + + return $claims; + } + + private function convertDate(DateTimeImmutable $date): int + { + return $date->getTimestamp(); + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Exception.php b/pandora_console/vendor/lcobucci/jwt/src/Exception.php new file mode 100644 index 0000000000..4b3916e691 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Exception.php @@ -0,0 +1,10 @@ +clock = $clock ?? new class implements Clock { + public function now(): DateTimeImmutable + { + return new DateTimeImmutable(); + } + }; + } + + /** @param Closure(Builder, DateTimeImmutable):Builder $customiseBuilder */ + public function issue( + Signer $signer, + Key $signingKey, + Closure $customiseBuilder, + ): UnencryptedToken { + $builder = new Token\Builder(new JoseEncoder(), ChainedFormatter::withUnixTimestampDates()); + + $now = $this->clock->now(); + $builder = $builder + ->issuedAt($now) + ->canOnlyBeUsedAfter($now) + ->expiresAt($now->modify('+5 minutes')); + + return $customiseBuilder($builder, $now)->getToken($signer, $signingKey); + } + + /** @param non-empty-string $jwt */ + public function parse( + string $jwt, + SignedWith $signedWith, + ValidAt $validAt, + Constraint ...$constraints, + ): UnencryptedToken { + $token = $this->parser->parse($jwt); + assert($token instanceof UnencryptedToken); + + (new Validator())->assert( + $token, + $signedWith, + $validAt, + ...$constraints, + ); + + return $token; + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Parser.php b/pandora_console/vendor/lcobucci/jwt/src/Parser.php new file mode 100644 index 0000000000..fa77f04efc --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Parser.php @@ -0,0 +1,22 @@ +contents()); + + if ($actualKeyLength < self::MINIMUM_KEY_LENGTH_IN_BITS) { + throw InvalidKeyProvided::tooShort(self::MINIMUM_KEY_LENGTH_IN_BITS, $actualKeyLength); + } + + return sodium_crypto_generichash($payload, $key->contents()); + } + + public function verify(string $expected, string $payload, Key $key): bool + { + return hash_equals($expected, $this->sign($payload, $key)); + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Signer/CannotSignPayload.php b/pandora_console/vendor/lcobucci/jwt/src/Signer/CannotSignPayload.php new file mode 100644 index 0000000000..35cc4d6ddc --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Signer/CannotSignPayload.php @@ -0,0 +1,15 @@ +converter->fromAsn1( + $this->createSignature($key->contents(), $key->passphrase(), $payload), + $this->pointLength(), + ); + } + + final public function verify(string $expected, string $payload, Key $key): bool + { + return $this->verifySignature( + $this->converter->toAsn1($expected, $this->pointLength()), + $payload, + $key->contents(), + ); + } + + /** {@inheritDoc} */ + final protected function guardAgainstIncompatibleKey(int $type, int $lengthInBits): void + { + if ($type !== OPENSSL_KEYTYPE_EC) { + throw InvalidKeyProvided::incompatibleKeyType( + self::KEY_TYPE_MAP[OPENSSL_KEYTYPE_EC], + self::KEY_TYPE_MAP[$type], + ); + } + + $expectedKeyLength = $this->expectedKeyLength(); + + if ($lengthInBits !== $expectedKeyLength) { + throw InvalidKeyProvided::incompatibleKeyLength($expectedKeyLength, $lengthInBits); + } + } + + /** + * @internal + * + * @return positive-int + */ + abstract public function expectedKeyLength(): int; + + /** + * Returns the length of each point in the signature, so that we can calculate and verify R and S points properly + * + * @internal + * + * @return positive-int + */ + abstract public function pointLength(): int; +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Signer/Ecdsa/ConversionFailed.php b/pandora_console/vendor/lcobucci/jwt/src/Signer/Ecdsa/ConversionFailed.php new file mode 100644 index 0000000000..d9ca751d4e --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Signer/Ecdsa/ConversionFailed.php @@ -0,0 +1,25 @@ + self::ASN1_MAX_SINGLE_BYTE ? self::ASN1_LENGTH_2BYTES : ''; + + $asn1 = hex2bin( + self::ASN1_SEQUENCE + . $lengthPrefix . dechex($totalLength) + . self::ASN1_INTEGER . dechex($lengthR) . $pointR + . self::ASN1_INTEGER . dechex($lengthS) . $pointS, + ); + assert(is_string($asn1)); + assert($asn1 !== ''); + + return $asn1; + } + + private static function octetLength(string $data): int + { + return (int) (strlen($data) / self::BYTE_SIZE); + } + + private static function preparePositiveInteger(string $data): string + { + if (substr($data, 0, self::BYTE_SIZE) > self::ASN1_BIG_INTEGER_LIMIT) { + return self::ASN1_NEGATIVE_INTEGER . $data; + } + + while ( + substr($data, 0, self::BYTE_SIZE) === self::ASN1_NEGATIVE_INTEGER + && substr($data, 2, self::BYTE_SIZE) <= self::ASN1_BIG_INTEGER_LIMIT + ) { + $data = substr($data, 2, null); + } + + return $data; + } + + public function fromAsn1(string $signature, int $length): string + { + $message = bin2hex($signature); + $position = 0; + + if (self::readAsn1Content($message, $position, self::BYTE_SIZE) !== self::ASN1_SEQUENCE) { + throw ConversionFailed::incorrectStartSequence(); + } + + // @phpstan-ignore-next-line + if (self::readAsn1Content($message, $position, self::BYTE_SIZE) === self::ASN1_LENGTH_2BYTES) { + $position += self::BYTE_SIZE; + } + + $pointR = self::retrievePositiveInteger(self::readAsn1Integer($message, $position)); + $pointS = self::retrievePositiveInteger(self::readAsn1Integer($message, $position)); + + $points = hex2bin(str_pad($pointR, $length, '0', STR_PAD_LEFT) . str_pad($pointS, $length, '0', STR_PAD_LEFT)); + assert(is_string($points)); + assert($points !== ''); + + return $points; + } + + private static function readAsn1Content(string $message, int &$position, int $length): string + { + $content = substr($message, $position, $length); + $position += $length; + + return $content; + } + + private static function readAsn1Integer(string $message, int &$position): string + { + if (self::readAsn1Content($message, $position, self::BYTE_SIZE) !== self::ASN1_INTEGER) { + throw ConversionFailed::integerExpected(); + } + + $length = (int) hexdec(self::readAsn1Content($message, $position, self::BYTE_SIZE)); + + return self::readAsn1Content($message, $position, $length * self::BYTE_SIZE); + } + + private static function retrievePositiveInteger(string $data): string + { + while ( + substr($data, 0, self::BYTE_SIZE) === self::ASN1_NEGATIVE_INTEGER + && substr($data, 2, self::BYTE_SIZE) > self::ASN1_BIG_INTEGER_LIMIT + ) { + $data = substr($data, 2, null); + } + + return $data; + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha256.php b/pandora_console/vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha256.php new file mode 100644 index 0000000000..ff00f4d47a --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha256.php @@ -0,0 +1,31 @@ +contents()); + } catch (SodiumException $sodiumException) { + throw new InvalidKeyProvided($sodiumException->getMessage(), 0, $sodiumException); + } + } + + public function verify(string $expected, string $payload, Key $key): bool + { + try { + return sodium_crypto_sign_verify_detached($expected, $payload, $key->contents()); + } catch (SodiumException $sodiumException) { + throw new InvalidKeyProvided($sodiumException->getMessage(), 0, $sodiumException); + } + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Signer/Hmac.php b/pandora_console/vendor/lcobucci/jwt/src/Signer/Hmac.php new file mode 100644 index 0000000000..815f84c30f --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Signer/Hmac.php @@ -0,0 +1,44 @@ +contents()); + $expectedKeyLength = $this->minimumBitsLengthForKey(); + + if ($actualKeyLength < $expectedKeyLength) { + throw InvalidKeyProvided::tooShort($expectedKeyLength, $actualKeyLength); + } + + return hash_hmac($this->algorithm(), $payload, $key->contents(), true); + } + + final public function verify(string $expected, string $payload, Key $key): bool + { + return hash_equals($expected, $this->sign($payload, $key)); + } + + /** + * @internal + * + * @return non-empty-string + */ + abstract public function algorithm(): string; + + /** + * @internal + * + * @return positive-int + */ + abstract public function minimumBitsLengthForKey(): int; +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Signer/Hmac/Sha256.php b/pandora_console/vendor/lcobucci/jwt/src/Signer/Hmac/Sha256.php new file mode 100644 index 0000000000..e19992ec33 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Signer/Hmac/Sha256.php @@ -0,0 +1,24 @@ +getSize(); + $contents = $fileSize > 0 ? $file->fread($file->getSize()) : ''; + assert(is_string($contents)); + + self::guardAgainstEmptyKey($contents); + + return new self($contents, $passphrase); + } + + /** @phpstan-assert non-empty-string $contents */ + private static function guardAgainstEmptyKey(string $contents): void + { + if ($contents === '') { + throw InvalidKeyProvided::cannotBeEmpty(); + } + } + + public function contents(): string + { + return $this->contents; + } + + public function passphrase(): string + { + return $this->passphrase; + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Signer/OpenSSL.php b/pandora_console/vendor/lcobucci/jwt/src/Signer/OpenSSL.php new file mode 100644 index 0000000000..bcc7065c19 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Signer/OpenSSL.php @@ -0,0 +1,126 @@ + 'RSA', + OPENSSL_KEYTYPE_DSA => 'DSA', + OPENSSL_KEYTYPE_DH => 'DH', + OPENSSL_KEYTYPE_EC => 'EC', + ]; + + /** + * @return non-empty-string + * + * @throws CannotSignPayload + * @throws InvalidKeyProvided + */ + final protected function createSignature( + string $pem, + string $passphrase, + string $payload, + ): string { + $key = $this->getPrivateKey($pem, $passphrase); + + $signature = ''; + + if (! openssl_sign($payload, $signature, $key, $this->algorithm())) { + throw CannotSignPayload::errorHappened($this->fullOpenSSLErrorString()); + } + + return $signature; + } + + /** @throws CannotSignPayload */ + private function getPrivateKey(string $pem, string $passphrase): OpenSSLAsymmetricKey + { + return $this->validateKey(openssl_pkey_get_private($pem, $passphrase)); + } + + /** @throws InvalidKeyProvided */ + final protected function verifySignature( + string $expected, + string $payload, + string $pem, + ): bool { + $key = $this->getPublicKey($pem); + $result = openssl_verify($payload, $expected, $key, $this->algorithm()); + + return $result === 1; + } + + /** @throws InvalidKeyProvided */ + private function getPublicKey(string $pem): OpenSSLAsymmetricKey + { + return $this->validateKey(openssl_pkey_get_public($pem)); + } + + /** + * Raises an exception when the key type is not the expected type + * + * @throws InvalidKeyProvided + */ + private function validateKey(OpenSSLAsymmetricKey|bool $key): OpenSSLAsymmetricKey + { + if (is_bool($key)) { + throw InvalidKeyProvided::cannotBeParsed($this->fullOpenSSLErrorString()); + } + + $details = openssl_pkey_get_details($key); + assert(is_array($details)); + + assert(array_key_exists('bits', $details)); + assert(is_int($details['bits'])); + assert(array_key_exists('type', $details)); + assert(is_int($details['type'])); + + $this->guardAgainstIncompatibleKey($details['type'], $details['bits']); + + return $key; + } + + private function fullOpenSSLErrorString(): string + { + $error = ''; + + while ($msg = openssl_error_string()) { + $error .= PHP_EOL . '* ' . $msg; + } + + return $error; + } + + /** @throws InvalidKeyProvided */ + abstract protected function guardAgainstIncompatibleKey(int $type, int $lengthInBits): void; + + /** + * Returns which algorithm to be used to create/verify the signature (using OpenSSL constants) + * + * @internal + */ + abstract public function algorithm(): int; +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Signer/Rsa.php b/pandora_console/vendor/lcobucci/jwt/src/Signer/Rsa.php new file mode 100644 index 0000000000..ba7d72d5e6 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Signer/Rsa.php @@ -0,0 +1,35 @@ +createSignature($key->contents(), $key->passphrase(), $payload); + } + + final public function verify(string $expected, string $payload, Key $key): bool + { + return $this->verifySignature($expected, $payload, $key->contents()); + } + + final protected function guardAgainstIncompatibleKey(int $type, int $lengthInBits): void + { + if ($type !== OPENSSL_KEYTYPE_RSA) { + throw InvalidKeyProvided::incompatibleKeyType( + self::KEY_TYPE_MAP[OPENSSL_KEYTYPE_RSA], + self::KEY_TYPE_MAP[$type], + ); + } + + if ($lengthInBits < self::MINIMUM_KEY_LENGTH) { + throw InvalidKeyProvided::tooShort(self::MINIMUM_KEY_LENGTH, $lengthInBits); + } + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Signer/Rsa/Sha256.php b/pandora_console/vendor/lcobucci/jwt/src/Signer/Rsa/Sha256.php new file mode 100644 index 0000000000..9e56c70f1a --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Signer/Rsa/Sha256.php @@ -0,0 +1,21 @@ + */ + private array $headers = ['typ' => 'JWT', 'alg' => null]; + + /** @var array */ + private array $claims = []; + + public function __construct(private readonly Encoder $encoder, private readonly ClaimsFormatter $claimFormatter) + { + } + + public function permittedFor(string ...$audiences): BuilderInterface + { + $configured = $this->claims[RegisteredClaims::AUDIENCE] ?? []; + $toAppend = array_diff($audiences, $configured); + + return $this->setClaim(RegisteredClaims::AUDIENCE, array_merge($configured, $toAppend)); + } + + public function expiresAt(DateTimeImmutable $expiration): BuilderInterface + { + return $this->setClaim(RegisteredClaims::EXPIRATION_TIME, $expiration); + } + + public function identifiedBy(string $id): BuilderInterface + { + return $this->setClaim(RegisteredClaims::ID, $id); + } + + public function issuedAt(DateTimeImmutable $issuedAt): BuilderInterface + { + return $this->setClaim(RegisteredClaims::ISSUED_AT, $issuedAt); + } + + public function issuedBy(string $issuer): BuilderInterface + { + return $this->setClaim(RegisteredClaims::ISSUER, $issuer); + } + + public function canOnlyBeUsedAfter(DateTimeImmutable $notBefore): BuilderInterface + { + return $this->setClaim(RegisteredClaims::NOT_BEFORE, $notBefore); + } + + public function relatedTo(string $subject): BuilderInterface + { + return $this->setClaim(RegisteredClaims::SUBJECT, $subject); + } + + public function withHeader(string $name, mixed $value): BuilderInterface + { + $new = clone $this; + $new->headers[$name] = $value; + + return $new; + } + + public function withClaim(string $name, mixed $value): BuilderInterface + { + if (in_array($name, RegisteredClaims::ALL, true)) { + throw RegisteredClaimGiven::forClaim($name); + } + + return $this->setClaim($name, $value); + } + + /** @param non-empty-string $name */ + private function setClaim(string $name, mixed $value): BuilderInterface + { + $new = clone $this; + $new->claims[$name] = $value; + + return $new; + } + + /** + * @param array $items + * + * @throws CannotEncodeContent When data cannot be converted to JSON. + */ + private function encode(array $items): string + { + return $this->encoder->base64UrlEncode( + $this->encoder->jsonEncode($items), + ); + } + + public function getToken(Signer $signer, Key $key): UnencryptedToken + { + $headers = $this->headers; + $headers['alg'] = $signer->algorithmId(); + + $encodedHeaders = $this->encode($headers); + $encodedClaims = $this->encode($this->claimFormatter->formatClaims($this->claims)); + + $signature = $signer->sign($encodedHeaders . '.' . $encodedClaims, $key); + $encodedSignature = $this->encoder->base64UrlEncode($signature); + + return new Plain( + new DataSet($headers, $encodedHeaders), + new DataSet($this->claims, $encodedClaims), + new Signature($signature, $encodedSignature), + ); + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Token/DataSet.php b/pandora_console/vendor/lcobucci/jwt/src/Token/DataSet.php new file mode 100644 index 0000000000..6c0b98ab14 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Token/DataSet.php @@ -0,0 +1,37 @@ + $data */ + public function __construct(private readonly array $data, private readonly string $encoded) + { + } + + /** @param non-empty-string $name */ + public function get(string $name, mixed $default = null): mixed + { + return $this->data[$name] ?? $default; + } + + /** @param non-empty-string $name */ + public function has(string $name): bool + { + return array_key_exists($name, $this->data); + } + + /** @return array */ + public function all(): array + { + return $this->data; + } + + public function toString(): string + { + return $this->encoded; + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Token/InvalidTokenStructure.php b/pandora_console/vendor/lcobucci/jwt/src/Token/InvalidTokenStructure.php new file mode 100644 index 0000000000..abba344b75 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Token/InvalidTokenStructure.php @@ -0,0 +1,41 @@ +splitJwt($jwt); + + if ($encodedHeaders === '') { + throw InvalidTokenStructure::missingHeaderPart(); + } + + if ($encodedClaims === '') { + throw InvalidTokenStructure::missingClaimsPart(); + } + + if ($encodedSignature === '') { + throw InvalidTokenStructure::missingSignaturePart(); + } + + $header = $this->parseHeader($encodedHeaders); + + return new Plain( + new DataSet($header, $encodedHeaders), + new DataSet($this->parseClaims($encodedClaims), $encodedClaims), + $this->parseSignature($encodedSignature), + ); + } + + /** + * Splits the JWT string into an array + * + * @param non-empty-string $jwt + * + * @return string[] + * + * @throws InvalidTokenStructure When JWT doesn't have all parts. + */ + private function splitJwt(string $jwt): array + { + $data = explode('.', $jwt); + + if (count($data) !== 3) { + throw InvalidTokenStructure::missingOrNotEnoughSeparators(); + } + + return $data; + } + + /** + * Parses the header from a string + * + * @param non-empty-string $data + * + * @return array + * + * @throws UnsupportedHeaderFound When an invalid header is informed. + * @throws InvalidTokenStructure When parsed content isn't an array. + */ + private function parseHeader(string $data): array + { + $header = $this->decoder->jsonDecode($this->decoder->base64UrlDecode($data)); + + if (! is_array($header)) { + throw InvalidTokenStructure::arrayExpected('headers'); + } + + $this->guardAgainstEmptyStringKeys($header, 'headers'); + + if (array_key_exists('enc', $header)) { + throw UnsupportedHeaderFound::encryption(); + } + + if (! array_key_exists('typ', $header)) { + $header['typ'] = 'JWT'; + } + + return $header; + } + + /** + * Parses the claim set from a string + * + * @param non-empty-string $data + * + * @return array + * + * @throws InvalidTokenStructure When parsed content isn't an array or contains non-parseable dates. + */ + private function parseClaims(string $data): array + { + $claims = $this->decoder->jsonDecode($this->decoder->base64UrlDecode($data)); + + if (! is_array($claims)) { + throw InvalidTokenStructure::arrayExpected('claims'); + } + + $this->guardAgainstEmptyStringKeys($claims, 'claims'); + + if (array_key_exists(RegisteredClaims::AUDIENCE, $claims)) { + $claims[RegisteredClaims::AUDIENCE] = (array) $claims[RegisteredClaims::AUDIENCE]; + } + + foreach (RegisteredClaims::DATE_CLAIMS as $claim) { + if (! array_key_exists($claim, $claims)) { + continue; + } + + $claims[$claim] = $this->convertDate($claims[$claim]); + } + + return $claims; + } + + /** + * @param array $array + * @param non-empty-string $part + * + * @phpstan-assert array $array + */ + private function guardAgainstEmptyStringKeys(array $array, string $part): void + { + foreach ($array as $key => $value) { + if ($key === '') { + throw InvalidTokenStructure::arrayExpected($part); + } + } + } + + /** @throws InvalidTokenStructure */ + private function convertDate(int|float|string $timestamp): DateTimeImmutable + { + if (! is_numeric($timestamp)) { + throw InvalidTokenStructure::dateIsNotParseable($timestamp); + } + + $normalizedTimestamp = number_format((float) $timestamp, self::MICROSECOND_PRECISION, '.', ''); + + $date = DateTimeImmutable::createFromFormat('U.u', $normalizedTimestamp); + + if ($date === false) { + throw InvalidTokenStructure::dateIsNotParseable($normalizedTimestamp); + } + + return $date; + } + + /** + * Returns the signature from given data + * + * @param non-empty-string $data + */ + private function parseSignature(string $data): Signature + { + $hash = $this->decoder->base64UrlDecode($data); + + return new Signature($hash, $data); + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Token/Plain.php b/pandora_console/vendor/lcobucci/jwt/src/Token/Plain.php new file mode 100644 index 0000000000..6af388d5f5 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Token/Plain.php @@ -0,0 +1,85 @@ +headers; + } + + public function claims(): DataSet + { + return $this->claims; + } + + public function signature(): Signature + { + return $this->signature; + } + + public function payload(): string + { + return $this->headers->toString() . '.' . $this->claims->toString(); + } + + public function isPermittedFor(string $audience): bool + { + return in_array($audience, $this->claims->get(RegisteredClaims::AUDIENCE, []), true); + } + + public function isIdentifiedBy(string $id): bool + { + return $this->claims->get(RegisteredClaims::ID) === $id; + } + + public function isRelatedTo(string $subject): bool + { + return $this->claims->get(RegisteredClaims::SUBJECT) === $subject; + } + + public function hasBeenIssuedBy(string ...$issuers): bool + { + return in_array($this->claims->get(RegisteredClaims::ISSUER), $issuers, true); + } + + public function hasBeenIssuedBefore(DateTimeInterface $now): bool + { + return $now >= $this->claims->get(RegisteredClaims::ISSUED_AT); + } + + public function isMinimumTimeBefore(DateTimeInterface $now): bool + { + return $now >= $this->claims->get(RegisteredClaims::NOT_BEFORE); + } + + public function isExpired(DateTimeInterface $now): bool + { + if (! $this->claims->has(RegisteredClaims::EXPIRATION_TIME)) { + return false; + } + + return $now >= $this->claims->get(RegisteredClaims::EXPIRATION_TIME); + } + + public function toString(): string + { + return $this->headers->toString() . '.' + . $this->claims->toString() . '.' + . $this->signature->toString(); + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Token/RegisteredClaimGiven.php b/pandora_console/vendor/lcobucci/jwt/src/Token/RegisteredClaimGiven.php new file mode 100644 index 0000000000..ce40a6abdc --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Token/RegisteredClaimGiven.php @@ -0,0 +1,21 @@ +hash; + } + + /** + * Returns the encoded version of the signature + * + * @return non-empty-string + */ + public function toString(): string + { + return $this->encoded; + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Token/UnsupportedHeaderFound.php b/pandora_console/vendor/lcobucci/jwt/src/Token/UnsupportedHeaderFound.php new file mode 100644 index 0000000000..1824078449 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Token/UnsupportedHeaderFound.php @@ -0,0 +1,15 @@ +claims(); + + if (! $claims->has($this->claim)) { + throw ConstraintViolation::error('The token does not have the claim "' . $this->claim . '"', $this); + } + + if ($claims->get($this->claim) !== $this->expectedValue) { + throw ConstraintViolation::error( + 'The claim "' . $this->claim . '" does not have the expected value', + $this, + ); + } + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/IdentifiedBy.php b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/IdentifiedBy.php new file mode 100644 index 0000000000..44541a75bd --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/IdentifiedBy.php @@ -0,0 +1,26 @@ +isIdentifiedBy($this->id)) { + throw ConstraintViolation::error( + 'The token is not identified with the expected ID', + $this, + ); + } + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/IssuedBy.php b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/IssuedBy.php new file mode 100644 index 0000000000..8ba3890db5 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/IssuedBy.php @@ -0,0 +1,30 @@ +issuers = $issuers; + } + + public function assert(Token $token): void + { + if (! $token->hasBeenIssuedBy(...$this->issuers)) { + throw ConstraintViolation::error( + 'The token was not issued by the given issuers', + $this, + ); + } + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/LeewayCannotBeNegative.php b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/LeewayCannotBeNegative.php new file mode 100644 index 0000000000..53abc0d4ef --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/LeewayCannotBeNegative.php @@ -0,0 +1,15 @@ +leeway = $this->guardLeeway($leeway); + } + + private function guardLeeway(?DateInterval $leeway): DateInterval + { + if ($leeway === null) { + return new DateInterval('PT0S'); + } + + if ($leeway->invert === 1) { + throw LeewayCannotBeNegative::create(); + } + + return $leeway; + } + + public function assert(Token $token): void + { + $now = $this->clock->now(); + + $this->assertIssueTime($token, $now->add($this->leeway)); + $this->assertMinimumTime($token, $now->add($this->leeway)); + $this->assertExpiration($token, $now->sub($this->leeway)); + } + + /** @throws ConstraintViolation */ + private function assertExpiration(Token $token, DateTimeInterface $now): void + { + if ($token->isExpired($now)) { + throw ConstraintViolation::error('The token is expired', $this); + } + } + + /** @throws ConstraintViolation */ + private function assertMinimumTime(Token $token, DateTimeInterface $now): void + { + if (! $token->isMinimumTimeBefore($now)) { + throw ConstraintViolation::error('The token cannot be used yet', $this); + } + } + + /** @throws ConstraintViolation */ + private function assertIssueTime(Token $token, DateTimeInterface $now): void + { + if (! $token->hasBeenIssuedBefore($now)) { + throw ConstraintViolation::error('The token was issued in the future', $this); + } + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/PermittedFor.php b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/PermittedFor.php new file mode 100644 index 0000000000..48544c9a18 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/PermittedFor.php @@ -0,0 +1,26 @@ +isPermittedFor($this->audience)) { + throw ConstraintViolation::error( + 'The token is not allowed to be used by this audience', + $this, + ); + } + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/RelatedTo.php b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/RelatedTo.php new file mode 100644 index 0000000000..164936234d --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/RelatedTo.php @@ -0,0 +1,26 @@ +isRelatedTo($this->subject)) { + throw ConstraintViolation::error( + 'The token is not related to the expected subject', + $this, + ); + } + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/SignedWith.php b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/SignedWith.php new file mode 100644 index 0000000000..5c8e265617 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/SignedWith.php @@ -0,0 +1,32 @@ +headers()->get('alg') !== $this->signer->algorithmId()) { + throw ConstraintViolation::error('Token signer mismatch', $this); + } + + if (! $this->signer->verify($token->signature()->hash(), $token->payload(), $this->key)) { + throw ConstraintViolation::error('Token signature mismatch', $this); + } + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/SignedWithOneInSet.php b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/SignedWithOneInSet.php new file mode 100644 index 0000000000..fb542fb3d4 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/SignedWithOneInSet.php @@ -0,0 +1,38 @@ + */ + private readonly array $constraints; + + public function __construct(SignedWithUntilDate ...$constraints) + { + $this->constraints = $constraints; + } + + public function assert(Token $token): void + { + $errorMessage = 'It was not possible to verify the signature of the token, reasons:'; + + foreach ($this->constraints as $constraint) { + try { + $constraint->assert($token); + + return; + } catch (ConstraintViolation $violation) { + $errorMessage .= PHP_EOL . '- ' . $violation->getMessage(); + } + } + + throw ConstraintViolation::error($errorMessage, $this); + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/SignedWithUntilDate.php b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/SignedWithUntilDate.php new file mode 100644 index 0000000000..85429e8900 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/SignedWithUntilDate.php @@ -0,0 +1,47 @@ +verifySignature = new SignedWith($signer, $key); + + $this->clock = $clock ?? new class () implements ClockInterface { + public function now(): DateTimeImmutable + { + return new DateTimeImmutable(); + } + }; + } + + public function assert(Token $token): void + { + if ($this->validUntil < $this->clock->now()) { + throw ConstraintViolation::error( + 'This constraint was only usable until ' + . $this->validUntil->format(DateTimeInterface::RFC3339), + $this, + ); + } + + $this->verifySignature->assert($token); + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/StrictValidAt.php b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/StrictValidAt.php new file mode 100644 index 0000000000..93db0a3a3e --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validation/Constraint/StrictValidAt.php @@ -0,0 +1,84 @@ +leeway = $this->guardLeeway($leeway); + } + + private function guardLeeway(?DateInterval $leeway): DateInterval + { + if ($leeway === null) { + return new DateInterval('PT0S'); + } + + if ($leeway->invert === 1) { + throw LeewayCannotBeNegative::create(); + } + + return $leeway; + } + + public function assert(Token $token): void + { + if (! $token instanceof UnencryptedToken) { + throw ConstraintViolation::error('You should pass a plain token', $this); + } + + $now = $this->clock->now(); + + $this->assertIssueTime($token, $now->add($this->leeway)); + $this->assertMinimumTime($token, $now->add($this->leeway)); + $this->assertExpiration($token, $now->sub($this->leeway)); + } + + /** @throws ConstraintViolation */ + private function assertExpiration(UnencryptedToken $token, DateTimeInterface $now): void + { + if (! $token->claims()->has(Token\RegisteredClaims::EXPIRATION_TIME)) { + throw ConstraintViolation::error('"Expiration Time" claim missing', $this); + } + + if ($token->isExpired($now)) { + throw ConstraintViolation::error('The token is expired', $this); + } + } + + /** @throws ConstraintViolation */ + private function assertMinimumTime(UnencryptedToken $token, DateTimeInterface $now): void + { + if (! $token->claims()->has(Token\RegisteredClaims::NOT_BEFORE)) { + throw ConstraintViolation::error('"Not Before" claim missing', $this); + } + + if (! $token->isMinimumTimeBefore($now)) { + throw ConstraintViolation::error('The token cannot be used yet', $this); + } + } + + /** @throws ConstraintViolation */ + private function assertIssueTime(UnencryptedToken $token, DateTimeInterface $now): void + { + if (! $token->claims()->has(Token\RegisteredClaims::ISSUED_AT)) { + throw ConstraintViolation::error('"Issued At" claim missing', $this); + } + + if (! $token->hasBeenIssuedBefore($now)) { + throw ConstraintViolation::error('The token was issued in the future', $this); + } + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validation/ConstraintViolation.php b/pandora_console/vendor/lcobucci/jwt/src/Validation/ConstraintViolation.php new file mode 100644 index 0000000000..17c7546827 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validation/ConstraintViolation.php @@ -0,0 +1,24 @@ +|null $constraint */ + public function __construct( + string $message = '', + public readonly ?string $constraint = null, + ) { + parent::__construct($message); + } + + /** @param non-empty-string $message */ + public static function error(string $message, Constraint $constraint): self + { + return new self(message: $message, constraint: $constraint::class); + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validation/NoConstraintsGiven.php b/pandora_console/vendor/lcobucci/jwt/src/Validation/NoConstraintsGiven.php new file mode 100644 index 0000000000..0ef80d259f --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validation/NoConstraintsGiven.php @@ -0,0 +1,11 @@ +getMessage(); + }, + $violations, + ); + + $message = "The token violates some mandatory constraints, details:\n"; + $message .= implode("\n", $violations); + + return $message; + } + + /** @return ConstraintViolation[] */ + public function violations(): array + { + return $this->violations; + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validation/SignedWith.php b/pandora_console/vendor/lcobucci/jwt/src/Validation/SignedWith.php new file mode 100644 index 0000000000..e721095f30 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validation/SignedWith.php @@ -0,0 +1,8 @@ +checkConstraint($constraint, $token, $violations); + } + + if ($violations) { + throw RequiredConstraintsViolated::fromViolations(...$violations); + } + } + + /** @param ConstraintViolation[] $violations */ + private function checkConstraint( + Constraint $constraint, + Token $token, + array &$violations, + ): void { + try { + $constraint->assert($token); + } catch (ConstraintViolation $e) { + $violations[] = $e; + } + } + + public function validate(Token $token, Constraint ...$constraints): bool + { + if ($constraints === []) { + throw new NoConstraintsGiven('No constraint given.'); + } + + try { + foreach ($constraints as $constraint) { + $constraint->assert($token); + } + + return true; + } catch (ConstraintViolation) { + return false; + } + } +} diff --git a/pandora_console/vendor/lcobucci/jwt/src/Validator.php b/pandora_console/vendor/lcobucci/jwt/src/Validator.php new file mode 100644 index 0000000000..d0ce4b8c76 --- /dev/null +++ b/pandora_console/vendor/lcobucci/jwt/src/Validator.php @@ -0,0 +1,20 @@ +clock = $clock; + } + + public function doSomething() + { + /** @var DateTimeImmutable $currentDateAndTime */ + $currentDateAndTime = $this->clock->now(); + // do something useful with that information + } +} +``` + +You can then pick one of the [implementations][implementation-url] of the interface to get a clock. + +If you want to implement the interface, you can require this package and +implement `Psr\Clock\ClockInterface` in your code. + +Don't forget to add `psr/clock-implementation` to your `composer.json`s `provides`-section like this: + +```json +{ + "provides": { + "psr/clock-implementation": "1.0" + } +} +``` + +And please read the [specification text][specification-url] for details on the interface. + +[psr-url]: https://www.php-fig.org/psr/psr-20 +[package-url]: https://packagist.org/packages/psr/clock +[implementation-url]: https://packagist.org/providers/psr/clock-implementation +[specification-url]: https://github.com/php-fig/fig-standards/blob/master/proposed/clock.md diff --git a/pandora_console/vendor/psr/clock/composer.json b/pandora_console/vendor/psr/clock/composer.json new file mode 100644 index 0000000000..77992eda75 --- /dev/null +++ b/pandora_console/vendor/psr/clock/composer.json @@ -0,0 +1,21 @@ +{ + "name": "psr/clock", + "description": "Common interface for reading the clock.", + "keywords": ["psr", "psr-20", "time", "clock", "now"], + "homepage": "https://github.com/php-fig/clock", + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "require": { + "php": "^7.0 || ^8.0" + }, + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + } +} diff --git a/pandora_console/vendor/psr/clock/src/ClockInterface.php b/pandora_console/vendor/psr/clock/src/ClockInterface.php new file mode 100644 index 0000000000..7b6d8d8aae --- /dev/null +++ b/pandora_console/vendor/psr/clock/src/ClockInterface.php @@ -0,0 +1,13 @@ +/dev/null 2>&1") != 0) { - logger (\%Config, " [E] Could not start nfcapd: $command", 1); - print_message (\%Config, " [E] Could not start nfcapd: $command", 1); - return; + $command = $Config{'netflow_daemon'} . ' -D -t ' . $Config{'netflow_interval'} . ' -P ' . $pid_file . ' -w ' . $Config{'netflow_path'}; + if (system ("$command >/dev/null 2>&1") != 0) { + logger (\%Config, " [E] Could not start nfcapd: $command", 1); + print_message (\%Config, " [E] Could not start nfcapd: $command", 1); + return; + } } logger (\%Config, "[*] NetFlow daemon started.", 1); diff --git a/pandora_server/conf/pandora_server.conf.new b/pandora_server/conf/pandora_server.conf.new index eded19d4db..c40746ff70 100644 --- a/pandora_server/conf/pandora_server.conf.new +++ b/pandora_server/conf/pandora_server.conf.new @@ -308,10 +308,8 @@ dataserver_threads 1 # Set 0 if want eMail deliver shared mail by all destination. mail_in_separate 1 -# nmap: If provided, is used to detect OS type with recon server using -# advanded OS fingerprint technique. Xprobe2 gives more accurate results -# Nmap is also used to do TCP port scanning in detected host. - +# nmap: used to detect OS type with recon server using advanced OS fingerprint technique. +# Nmap is also used to do TCP port scanning for host detection. nmap /usr/bin/nmap # Default path is /usr/sbin/fping for installation default in distro Centos , if you are installing in other distribution, diff --git a/pandora_server/conf/pandora_server_sec.conf.template b/pandora_server/conf/pandora_server_sec.conf.template index b070938187..088e2adf6e 100644 --- a/pandora_server/conf/pandora_server_sec.conf.template +++ b/pandora_server/conf/pandora_server_sec.conf.template @@ -302,10 +302,8 @@ dataserver_threads 1 # Set 0 if want eMail deliver shared mail by all destination. mail_in_separate 1 -# nmap: If provided, is used to detect OS type with recon server using -# advanded OS fingerprint technique. Xprobe2 gives more accurate results -# Nmap is also used to do TCP port scanning in detected host. - +# nmap: used to detect OS type with recon server using advanced OS fingerprint technique. +# Nmap is also used to do TCP port scanning for host detection. nmap /usr/bin/nmap # Default path is /usr/sbin/fping for installation default in distro Centos , if you are installing in other distribution, diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 72c8aaf397..1c0fe1b622 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -46,7 +46,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.776"; -my $pandora_build = "240429"; +my $pandora_build = "240503"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index daaf4ef7ef..b5c72ab6c1 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -34,7 +34,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.776"; -my $pandora_build = "240429"; +my $pandora_build = "240503"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 9e11b76b08..7cc4e63064 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -7,7 +7,7 @@ %define debug_package %{nil} %define name pandorafms_server %define version 7.0NG.776 -%define release 240429 +%define release 240503 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 7cc504dd39..16ad3ac618 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -4,7 +4,7 @@ %global __os_install_post %{nil} %define name pandorafms_server %define version 7.0NG.776 -%define release 240429 +%define release 240503 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index d8a84c8ab0..5a42f571c6 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.776" -PI_BUILD="240429" +PI_BUILD="240503" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 8da9a3c529..511a173cf1 100755 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -38,7 +38,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.776 Build 240429"; +my $version = "7.0NG.776 Build 240503"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index fb3c855dad..a74b93661d 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.776 Build 240429"; +my $version = "7.0NG.776 Build 240503"; # save program name for logging my $progname = basename($0); @@ -6166,7 +6166,7 @@ sub cli_create_group() { $icon = '' unless defined($icon); $description = '' unless defined($description); - $group_id = pandora_create_group ($group_name, $icon, $parent_group_id, 0, 0, '', 0, $description, $dbh); + $group_id = pandora_create_group ($group_name, $icon, $parent_group_id, 0, 0, '', 0, safe_input($description), $dbh); if($group_id == -1) { print_log "[ERROR] A problem has been ocurred creating group '$group_name'\n\n"; @@ -6191,7 +6191,7 @@ sub cli_create_group() { eval { $group_id_nodo = db_insert ($dbh_metaconsole, 'id_grupo', 'INSERT INTO tgrupo (id_grupo, nombre, icon, parent, propagate, disabled, custom_id, id_skin, description) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', $group_name, safe_input($group_name), $icon, - $parent_group_id, 0, 0, '', 0, $description); + $parent_group_id, 0, 0, '', 0, safe_input($description)); }; if ($@) { print_log "[ERROR] Problems with IDS and doesn't created group\n\n"; @@ -6293,15 +6293,15 @@ sub cli_update_group() { if(defined($icon)){ if(defined($description)){ - db_do ($dbh,'UPDATE tgrupo SET nombre=? , parent=? , icon=? , description=? WHERE id_grupo=?',$group_name,$parent_group_id,$icon,$description,$group_id); + db_do ($dbh,'UPDATE tgrupo SET nombre=? , parent=? , icon=? , description=? WHERE id_grupo=?',safe_input($group_name),$parent_group_id,$icon, safe_input($description) ,$group_id); }else{ - db_do ($dbh,'UPDATE tgrupo SET nombre=? , parent=? , icon=? WHERE id_grupo=?',$group_name,$parent_group_id,$icon,$group_id); + db_do ($dbh,'UPDATE tgrupo SET nombre=? , parent=? , icon=? WHERE id_grupo=?',safe_input($group_name),$parent_group_id,$icon,$group_id); } }else{ - db_do ($dbh,'UPDATE tgrupo SET nombre=? , parent=? WHERE id_grupo=?',$group_name,$parent_group_id,$group_id); + db_do ($dbh,'UPDATE tgrupo SET nombre=? , parent=? WHERE id_grupo=?',safe_input($group_name),$parent_group_id,$group_id); } }else{ - db_do ($dbh,'UPDATE tgrupo SET nombre=? WHERE id_grupo=?',$group_name,$group_id); + db_do ($dbh,'UPDATE tgrupo SET nombre=? WHERE id_grupo=?',safe_input($group_name),$group_id); } print_log "[INFO] Updated group '$group_id'\n\n"; }