From fc49808fd4c796476c25934380cdda74a4bd417c Mon Sep 17 00:00:00 2001 From: Ivan Gavryliuk Date: Thu, 16 Jul 2020 14:45:47 +0300 Subject: [PATCH 01/16] add gitignore, check curl_exec --- .gitignore | 4 ++ modules/servers/solusvmpro/lib/SolusVM.php | 26 +++++++++-- modules/servers/solusvmpro/solusvmpro.php | 53 ++++++++++++---------- 3 files changed, 56 insertions(+), 27 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7f33223 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +modules/servers/solusvmpro/.idea +modules/servers/solusvmpro/callback.php +modules/servers/solusvmpro/configure.ini +modules/servers/solusvmpro/custom.php \ No newline at end of file diff --git a/modules/servers/solusvmpro/lib/SolusVM.php b/modules/servers/solusvmpro/lib/SolusVM.php index 7545305..b9f7488 100644 --- a/modules/servers/solusvmpro/lib/SolusVM.php +++ b/modules/servers/solusvmpro/lib/SolusVM.php @@ -79,7 +79,7 @@ public function __construct( $params, $debug = false ) { if ( ! $cport ) { $cport = "5353"; } - $this->url = "http://" . $conaddr . ":" . $cport . "/api/" . $this->modType . "/command.php/"; + $this->url = "http://" . $conaddr . ":" . $cport . "/api/" . $this->modType . "/command.php"; $this->fwdurl = "http://" . $conaddr . ":" . $cport; } @@ -126,6 +126,12 @@ public function getExtData( $name ) { public function apiCall( $faction, $postVars = array() ) { $this->result = ''; + if ( !$this->curl_enabled() ) { + $msg = 'Curl is currently disabled'; + $this->debugLog( 'solusvmpro', $faction, '', $msg, '', array() ); + die($msg); + } + if ( $faction == "fwdurl" ) { $result = $this->fwdurl; $this->debugLog( 'solusvmpro', $faction, '', $result, '', array() ); @@ -183,6 +189,11 @@ public function apiCall( $faction, $postVars = array() ) { } + private function curl_enabled() { + $disabled = explode(',', ini_get('disable_functions')); + return !in_array('curl_exec', $disabled); + } + public function sortReturn( $data ) { preg_match_all( '/<(.*?)>([^<]+)<\/\\1>/i', $data, $matches ); $result = array(); @@ -636,7 +647,7 @@ public function clientAreaCalculations( $result ) { ) ); - if ( $result["status"] == "success" ) { + if ( $this->isSuccessResponse($result) ) { $vstatus = '' . $vstatusAr[$result["state"]]['msg'] . ''; } else { $vstatus = '' . $vstatusAr['unavailable']['msg'] . ''; @@ -1066,10 +1077,19 @@ public static function loadLang( $lang = null ) { } public function debugLog( $module, $action, $requestString, $responseData, $processedData, $replaceVars ) { - if ( !$this->configIni[ 'debug' ] ){ + if ( !$this->configIni[ 'debug' ] ) { return; } logModuleCall( $module, $action, $requestString, $responseData, $processedData, $replaceVars ); } + + public function isSuccessResponse( $result ) { + if ( isset($result["status"]) && $result["status"] == "success" ) { + return true; + } + + $this->debugLog( 'solusvmpro', 'isSuccessResponse', '', $result, '', array() ); + return false; + } } diff --git a/modules/servers/solusvmpro/solusvmpro.php b/modules/servers/solusvmpro/solusvmpro.php index 7ef383e..697b1a4 100644 --- a/modules/servers/solusvmpro/solusvmpro.php +++ b/modules/servers/solusvmpro/solusvmpro.php @@ -71,7 +71,7 @@ function solusvmpro_ConfigOptions() { ## List plans $solusvm->apiCall( 'listplans', $callArray ); - if ( $solusvm->result["status"] == "success" ) { + if ( $solusvm->isSuccessResponse($solusvm->result) ) { $default_plan = $solusvm->result["plans"]; } else { $default_plan = $solusvm->rawResult; @@ -80,7 +80,7 @@ function solusvmpro_ConfigOptions() { ## List nodes $solusvm->apiCall( 'listnodes', $callArray ); - if ( $solusvm->result["status"] == "success" ) { + if ( $solusvm->isSuccessResponse($solusvm->result) ) { $default_node = $solusvm->result["nodes"]; } else { $default_node = $solusvm->rawResult; @@ -89,7 +89,7 @@ function solusvmpro_ConfigOptions() { ## List node groups $solusvm->apiCall( 'listnodegroups', $callArray ); - if ( $solusvm->result["status"] == "success" ) { + if ( $solusvm->isSuccessResponse($solusvm->result) ) { $default_nodegroup = $solusvm->result["nodegroups"]; } else { $default_nodegroup = $solusvm->rawResult; @@ -98,7 +98,7 @@ function solusvmpro_ConfigOptions() { ## List templates $solusvm->apiCall( 'listtemplates', $callArray ); - if ( $solusvm->result["status"] == "success" ) { + if ( $solusvm->isSuccessResponse($solusvm->result) ) { $default_template = $solusvm->result["templates"]; } else { $default_template = $solusvm->rawResult; @@ -382,7 +382,7 @@ function solusvmpro_SuspendAccount( $params ) { $solusvm->apiCall( 'vserver-suspend', $callArray ); - if ( $solusvm->result["status"] == "success" ) { + if ( $solusvm->isSuccessResponse($solusvm->result) ) { $result = "success"; } else { $result = (string) $solusvm->result["statusmsg"]; @@ -432,7 +432,7 @@ function solusvmpro_UnsuspendAccount( $params ) { $solusvm->apiCall( 'vserver-unsuspend', $callArray ); - if ( $solusvm->result["status"] == "success" ) { + if ( $solusvm->isSuccessResponse($solusvm->result) ) { $result = "success"; } else { $result = (string) $solusvm->result["statusmsg"]; @@ -486,7 +486,7 @@ function solusvmpro_TerminateAccount( $params ) { $solusvm->apiCall( 'vserver-terminate', $callArray ); - if ( $solusvm->result["status"] == "success" ) { + if ( $solusvm->isSuccessResponse($solusvm->result) ) { $solusvm->removeipTerminatedProduct(); $solusvm->removevserveridTerminatedProduct(); @@ -564,7 +564,7 @@ function solusvmpro_reboot( $params ) { $solusvm->apiCall( 'vserver-reboot', $callArray ); - if ( $solusvm->result["status"] == "success" ) { + if ( $solusvm->isSuccessResponse($solusvm->result) ) { $result = "success"; } else { $result = (string) $solusvm->result["statusmsg"]; @@ -599,7 +599,7 @@ function solusvmpro_boot( $params ) { $solusvm->apiCall( 'vserver-boot', $callArray ); - if ( $solusvm->result["status"] == "success" ) { + if ( $solusvm->isSuccessResponse($solusvm->result) ) { $result = "success"; } else { $result = (string) $solusvm->result["statusmsg"]; @@ -634,7 +634,7 @@ function solusvmpro_shutdown( $params ) { $solusvm->apiCall( 'vserver-shutdown', $callArray ); - if ( $solusvm->result["status"] == "success" ) { + if ( $solusvm->isSuccessResponse($solusvm->result) ) { $result = "success"; } else { $result = (string) $solusvm->result["statusmsg"]; @@ -692,7 +692,7 @@ function solusvmpro_ChangePackage( $params ) { $cmem = str_replace(":", "|", $cmem); $solusvm->apiCall( 'vserver-change-memory', array( "memory" => $cmem, "vserverid" => $customField["vserverid"] ) ); - if ( $solusvm->result["status"] != "success" ) { + if ( !$solusvm->isSuccessResponse($solusvm->result) ) { $resource_errors = (string) $solusvm->result["statusmsg"] . $error_divider; } @@ -700,7 +700,7 @@ function solusvmpro_ChangePackage( $params ) { if ( $cdisk > 0 ){ $solusvm->apiCall( 'vserver-change-hdd', array( "hdd" => $cdisk, "vserverid" => $customField["vserverid"] ) ); - if ( $solusvm->result["status"] != "success" ) { + if ( !$solusvm->isSuccessResponse($solusvm->result) ) { $resource_errors .= (string) $solusvm->result["statusmsg"] . $error_divider; } @@ -708,7 +708,7 @@ function solusvmpro_ChangePackage( $params ) { if ( $ccpu > 0 ){ $solusvm->apiCall( 'vserver-change-cpu', array( "cpu" => $ccpu, "vserverid" => $customField["vserverid"] ) ); - if ( $solusvm->result["status"] != "success" ) { + if ( !$solusvm->isSuccessResponse($solusvm->result) ) { $resource_errors .= (string) $solusvm->result["statusmsg"]; } @@ -716,7 +716,7 @@ function solusvmpro_ChangePackage( $params ) { if ( $cnspeed >= 0 ){ $solusvm->apiCall( 'vserver-change-nspeed', array( "customnspeed" => $cnspeed, "vserverid" => $customField["vserverid"] ) ); - if ( $solusvm->result["status"] != "success" ) { + if ( !$solusvm->isSuccessResponse($solusvm->result) ) { $resource_errors .= (string) $solusvm->result["statusmsg"]; } @@ -741,7 +741,7 @@ function solusvmpro_ChangePackage( $params ) { $solusvm->apiCall( 'vserver-addip', array( "vserverid" => $customField["vserverid"] ) ); - if ( $solusvm->result["status"] != "success" ) { + if ( !$solusvm->isSuccessResponse($solusvm->result) ) { $resource_errors .= (string) $solusvm->result["statusmsg"] . $error_divider; break; } else { @@ -755,7 +755,7 @@ function solusvmpro_ChangePackage( $params ) { $solusvm->apiCall( 'vserver-delip', array( "vserverid" => $customField["vserverid"], "ipaddr" => $lines_arr[0]) ); - if ( $solusvm->result["status"] != "success" ) { + if ( !$solusvm->isSuccessResponse($solusvm->result) ) { $resource_errors .= (string) $solusvm->result["statusmsg"] . $error_divider; break; } else { @@ -781,7 +781,7 @@ function solusvmpro_ChangePackage( $params ) { "vserverid" => $customField["vserverid"] ); $solusvm->apiCall( 'vserver-change', $callArray ); - if ( $solusvm->result["status"] == "success" ) { + if ( $solusvm->isSuccessResponse($solusvm->result) ) { $result = "success"; } else { $result = (string) $solusvm->result["statusmsg"]; @@ -867,14 +867,19 @@ function solusvmpro_AdminServicesTabFields( $params ) { if ( ! function_exists( 'solusvmpro_AdminLink' ) ) { function solusvmpro_AdminLink( $params ) { try { - $solusvm = new SolusVM( $params ); + $solusvm = new SolusVM($params); - $fwdurl = $solusvm->apiCall( 'fwdurl' ); + $fwdurl = $solusvm->apiCall('fwdurl'); - $code = '
- - - + $solusAdminId = (int)$solusvm->getExtData("login-button-admin-id"); + + $code = ''; + if (isset($solusAdminId) && $solusAdminId > 0) { + $code .= ''; + } + $code .=' + +
'; return $code; @@ -1097,7 +1102,7 @@ function solusvmpro_ClientArea( $params ) { $callArray = array( "vserverid" => $customField["vserverid"], "nographs" => false ); $solusvm->apiCall( 'vserver-infoall', $callArray ); - if ( $solusvm->result["status"] == "success" ) { + if ( $solusvm->isSuccessResponse($solusvm->result) ) { $data = $solusvm->clientAreaCalculations( $solusvm->result ); return solusvmpro_customclientarea( $params, $data ); From a06cbbc74e56e16805817b3c1a5ca5d7c7007cb0 Mon Sep 17 00:00:00 2001 From: Evgenii Ruzavin Date: Fri, 9 Oct 2020 11:57:18 +0700 Subject: [PATCH 02/16] FEATURE SVM-3051 WHMCS8 support --- modules/servers/solusvmpro/VERSION | 2 +- modules/servers/solusvmpro/lib/SolusVM.php | 22 ++++++++++++++++++++-- modules/servers/solusvmpro/solusvmpro.php | 9 +++++---- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/modules/servers/solusvmpro/VERSION b/modules/servers/solusvmpro/VERSION index 2582ddd..cd9b8f5 100644 --- a/modules/servers/solusvmpro/VERSION +++ b/modules/servers/solusvmpro/VERSION @@ -1 +1 @@ -4.1.1 \ No newline at end of file +4.1.2 \ No newline at end of file diff --git a/modules/servers/solusvmpro/lib/SolusVM.php b/modules/servers/solusvmpro/lib/SolusVM.php index b9f7488..a350374 100644 --- a/modules/servers/solusvmpro/lib/SolusVM.php +++ b/modules/servers/solusvmpro/lib/SolusVM.php @@ -4,7 +4,8 @@ use SolusVM\Curl; use Illuminate\Database\Capsule\Manager as Capsule; - +use Illuminate\Support\Collection as Collection; +use Exception; class SolusVM { protected $url; @@ -975,7 +976,7 @@ public static function getParamsFromServiceID( $servid, $uid = null ) { public static function getParamsFromVserviceID( $vserverid, $uid ) { /** @var stdClass $hosting */ - foreach ( Capsule::table( 'tblhosting' )->where( 'userid', $uid )->get() as $hosting ) { + foreach ( SolusVM::collectionToArray(Capsule::table( 'tblhosting' )->where( 'userid', $uid )->get()) as $hosting ) { $vserverFieldRow = Capsule::table( 'tblcustomfields' )->where( 'relid', $hosting->packageid )->where( 'fieldname', 'vserverid' )->first(); if ( ! $vserverFieldRow ) { @@ -1091,5 +1092,22 @@ public function isSuccessResponse( $result ) { $this->debugLog( 'solusvmpro', 'isSuccessResponse', '', $result, '', array() ); return false; } + + /** + * Converts Collection to array if required + * + * @param array|Collection|any $object arbitrary object. + * + * @return array + */ + public function collectionToArray($object) { + if (is_array($object)) { + return $object; + } + if ($object instanceof Collection) { + return $object->toArray(); + } + throw new Exception('Object is not an array or Illuminate\Support\Collection'); + } } diff --git a/modules/servers/solusvmpro/solusvmpro.php b/modules/servers/solusvmpro/solusvmpro.php index 697b1a4..5967f7f 100644 --- a/modules/servers/solusvmpro/solusvmpro.php +++ b/modules/servers/solusvmpro/solusvmpro.php @@ -25,10 +25,11 @@ function initConfigOption() { if(!isset($_POST['id'])){ - $data = Capsule::table('tblproducts')->where('servertype', 'solusvmpro')->where('id', $_GET['id'])->get(); + $data = SolusVM::collectionToArray(Capsule::table('tblproducts')->where('servertype', 'solusvmpro')->where('id', $_GET['id'])->get()); }else{ - $data = Capsule::table('tblproducts')->where('servertype', 'solusvmpro')->where('id', $_POST['id'])->get(); + $data = SolusVM::collectionToArray(Capsule::table('tblproducts')->where('servertype', 'solusvmpro')->where('id', $_POST['id'])->get()); } + $packageconfigoption = []; if(is_array($data) && count($data) > 0) { $packageconfigoption[1] = $data[0]->configoption1; @@ -47,7 +48,7 @@ function solusvmpro_ConfigOptions() { $master_array = array(); /** @var stdClass $row */ - foreach ( Capsule::table( 'tblservers' )->where( 'type', 'solusvmpro' )->get() as $row ) { + foreach ( SolusVM::collectionToArray(Capsule::table( 'tblservers' )->where( 'type', 'solusvmpro' )->get()) as $row ) { $master_array[] = $row->id . " - " . $row->name; } @@ -724,7 +725,7 @@ function solusvmpro_ChangePackage( $params ) { if ( $cextraip > 0 ){ //first() function doesn't work - $ipaddresses = Capsule::table('tblhosting')->select('assignedips')->where( 'id', $params['serviceid'] )->get(); + $ipaddresses = SolusVM::collectionToArray(Capsule::table('tblhosting')->select('assignedips')->where( 'id', $params['serviceid'] )->get()); $ips = $ipaddresses[0]->assignedips; $lines_arr = explode(PHP_EOL, $ips); From edd2045a2387d245b156fef14c1518ca4b9a0e93 Mon Sep 17 00:00:00 2001 From: oneumyvakin Date: Wed, 21 Oct 2020 13:41:50 +0700 Subject: [PATCH 03/16] Update documentation link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4e7c56..6a738e4 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -[SolusVM WHMCS Module Documentation](https://documentation.solusvm.com/display/DOCS/WHMCS) \ No newline at end of file +[SolusVM WHMCS Module Documentation](https://docs.solusvm.com/display/BET/SolusVM+WHMCS+billing+module) From 38335e4af635309757a4e3eda35cf74dda6fe903 Mon Sep 17 00:00:00 2001 From: Alexandr Redikultsev Date: Thu, 24 Jun 2021 11:16:48 +0700 Subject: [PATCH 04/16] BUGFIX SVM-3243 Adding http_referer to post request for fallback --- .gitignore | 4 +++- modules/servers/solusvmpro/VERSION | 2 +- modules/servers/solusvmpro/solusvmpro.php | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 7f33223..7b30c02 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ modules/servers/solusvmpro/.idea modules/servers/solusvmpro/callback.php modules/servers/solusvmpro/configure.ini -modules/servers/solusvmpro/custom.php \ No newline at end of file +modules/servers/solusvmpro/custom.php +.idea + diff --git a/modules/servers/solusvmpro/VERSION b/modules/servers/solusvmpro/VERSION index cd9b8f5..8c7fafd 100644 --- a/modules/servers/solusvmpro/VERSION +++ b/modules/servers/solusvmpro/VERSION @@ -1 +1 @@ -4.1.2 \ No newline at end of file +4.1.3 \ No newline at end of file diff --git a/modules/servers/solusvmpro/solusvmpro.php b/modules/servers/solusvmpro/solusvmpro.php index 5967f7f..87bece6 100644 --- a/modules/servers/solusvmpro/solusvmpro.php +++ b/modules/servers/solusvmpro/solusvmpro.php @@ -880,6 +880,7 @@ function solusvmpro_AdminLink( $params ) { } $code .=' + '; From 90d173eef1bce76a8f200de44745320a6889fc28 Mon Sep 17 00:00:00 2001 From: Jordan S Date: Wed, 30 Jun 2021 07:57:24 -0300 Subject: [PATCH 05/16] Fix for WHMCS 8.2 compatibility For some reason after updating from WHMCS 8.1.3 to 8.2, __DIR__ will not work in this file. It returns the file path for the script that called it, resulting in errors like: ``` PHP Fatal error: require_once(): Failed opening required '/path/to/whmcs/vendor/whmcs/whmcs-foundation/lib/Log/../lang/english.php' (include_path='.:/opt/plesk/php/7.4/share/pear') in /path/to/whmcs/vendor/whmcs/whmcs-foundation/lib/Log/ErrorLog.php on line 1145 ``` This change repairs that by using the WHMCS global 'ROOTDIR' rather than __DIR__ --- modules/servers/solusvmpro/lib/SolusVM.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/servers/solusvmpro/lib/SolusVM.php b/modules/servers/solusvmpro/lib/SolusVM.php index a350374..12af1e5 100644 --- a/modules/servers/solusvmpro/lib/SolusVM.php +++ b/modules/servers/solusvmpro/lib/SolusVM.php @@ -1050,7 +1050,7 @@ public function getVT() { public static function loadLang( $lang = null ) { global $_LANG, $CONFIG; - $langDir = __DIR__ . '/../lang/'; + $langDir = ROOTDIR . '/modules/servers/solusvmpro/lang/'; $availableLangsFullPath = glob( $langDir . '*.php' ); $availableLangs = array(); foreach ( $availableLangsFullPath as $availableLang ) { From 4df401aa1c1576331530c5ab5674ada1647a42b4 Mon Sep 17 00:00:00 2001 From: Alexandr Redikultsev Date: Thu, 1 Jul 2021 10:59:32 +0700 Subject: [PATCH 06/16] Replacing __DIR__ with ROOTDIR for WHMCS 8 compatibility --- modules/servers/solusvmpro/VERSION | 2 +- modules/servers/solusvmpro/console.php | 6 +++--- modules/servers/solusvmpro/get_client_data.php | 6 +++--- modules/servers/solusvmpro/html5console.php | 6 +++--- modules/servers/solusvmpro/lib/SolusVM.php | 2 +- modules/servers/solusvmpro/solusvmpro.php | 10 +++++----- modules/servers/solusvmpro/svm_control.php | 6 +++--- modules/servers/solusvmpro/vnc.php | 6 +++--- 8 files changed, 22 insertions(+), 22 deletions(-) diff --git a/modules/servers/solusvmpro/VERSION b/modules/servers/solusvmpro/VERSION index 8c7fafd..9d086c6 100644 --- a/modules/servers/solusvmpro/VERSION +++ b/modules/servers/solusvmpro/VERSION @@ -1 +1 @@ -4.1.3 \ No newline at end of file +4.1.4 \ No newline at end of file diff --git a/modules/servers/solusvmpro/console.php b/modules/servers/solusvmpro/console.php index f431a3f..8fbbbf2 100644 --- a/modules/servers/solusvmpro/console.php +++ b/modules/servers/solusvmpro/console.php @@ -3,9 +3,9 @@ define( "CLIENTAREA", true ); require( "../../../init.php" ); -require_once __DIR__ . '/lib/Curl.php'; -require_once __DIR__ . '/lib/CaseInsensitiveArray.php'; -require_once __DIR__ . '/lib/SolusVM.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/Curl.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/CaseInsensitiveArray.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/SolusVM.php'; use Illuminate\Database\Capsule\Manager as Capsule; use SolusVM\SolusVM; diff --git a/modules/servers/solusvmpro/get_client_data.php b/modules/servers/solusvmpro/get_client_data.php index c2b4825..22a8dd0 100644 --- a/modules/servers/solusvmpro/get_client_data.php +++ b/modules/servers/solusvmpro/get_client_data.php @@ -4,9 +4,9 @@ require( "../../../init.php" ); session_start(); -require_once __DIR__ . '/lib/Curl.php'; -require_once __DIR__ . '/lib/CaseInsensitiveArray.php'; -require_once __DIR__ . '/lib/SolusVM.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/Curl.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/CaseInsensitiveArray.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/SolusVM.php'; use Illuminate\Database\Capsule\Manager as Capsule; use SolusVM\SolusVM; diff --git a/modules/servers/solusvmpro/html5console.php b/modules/servers/solusvmpro/html5console.php index 7c9406b..31a404d 100644 --- a/modules/servers/solusvmpro/html5console.php +++ b/modules/servers/solusvmpro/html5console.php @@ -3,9 +3,9 @@ define("CLIENTAREA", true); require("../../../init.php"); -require_once __DIR__ . '/lib/Curl.php'; -require_once __DIR__ . '/lib/CaseInsensitiveArray.php'; -require_once __DIR__ . '/lib/SolusVM.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/Curl.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/CaseInsensitiveArray.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/SolusVM.php'; use Illuminate\Database\Capsule\Manager as Capsule; use SolusVM\SolusVM; diff --git a/modules/servers/solusvmpro/lib/SolusVM.php b/modules/servers/solusvmpro/lib/SolusVM.php index 12af1e5..4d120eb 100644 --- a/modules/servers/solusvmpro/lib/SolusVM.php +++ b/modules/servers/solusvmpro/lib/SolusVM.php @@ -103,7 +103,7 @@ public function __construct( $params, $debug = false ) { $this->pid = $this->getParam( "pid" ); # Product/Service ID //Parse Ini file - $config_file = dirname(__DIR__) . '/configure.ini'; + $config_file = dirname(ROOTDIR) . '/modules/servers/solusvmpro/configure.ini'; $this->configIni = parse_ini_file( $config_file ); } diff --git a/modules/servers/solusvmpro/solusvmpro.php b/modules/servers/solusvmpro/solusvmpro.php index 87bece6..3acc63d 100644 --- a/modules/servers/solusvmpro/solusvmpro.php +++ b/modules/servers/solusvmpro/solusvmpro.php @@ -5,9 +5,9 @@ * */ -require_once __DIR__ . '/lib/Curl.php'; -require_once __DIR__ . '/lib/CaseInsensitiveArray.php'; -require_once __DIR__ . '/lib/SolusVM.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/Curl.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/CaseInsensitiveArray.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/SolusVM.php'; use Illuminate\Database\Capsule\Manager as Capsule; use SolusVM\SolusVM; @@ -16,8 +16,8 @@ die( "This file cannot be accessed directly" ); } -if ( file_exists( __DIR__ . "/custom.php" ) ) { - require_once( __DIR__ . "/custom.php" ); +if ( file_exists( ROOTDIR . "/custom.php" ) ) { + require_once( ROOTDIR . "/modules/servers/solusvmpro/custom.php" ); } SolusVM::loadLang(); diff --git a/modules/servers/solusvmpro/svm_control.php b/modules/servers/solusvmpro/svm_control.php index 7774b61..10c9fa9 100644 --- a/modules/servers/solusvmpro/svm_control.php +++ b/modules/servers/solusvmpro/svm_control.php @@ -5,9 +5,9 @@ require("../../../init.php"); session_start(); -require_once __DIR__ . '/lib/Curl.php'; -require_once __DIR__ . '/lib/CaseInsensitiveArray.php'; -require_once __DIR__ . '/lib/SolusVM.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/Curl.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/CaseInsensitiveArray.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/SolusVM.php'; use Illuminate\Database\Capsule\Manager as Capsule; use SolusVM\SolusVM; diff --git a/modules/servers/solusvmpro/vnc.php b/modules/servers/solusvmpro/vnc.php index 3dd242d..0cff97a 100644 --- a/modules/servers/solusvmpro/vnc.php +++ b/modules/servers/solusvmpro/vnc.php @@ -3,9 +3,9 @@ define( "CLIENTAREA", true ); require( "../../../init.php" ); -require_once __DIR__ . '/lib/Curl.php'; -require_once __DIR__ . '/lib/CaseInsensitiveArray.php'; -require_once __DIR__ . '/lib/SolusVM.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/Curl.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/CaseInsensitiveArray.php'; +require_once ROOTDIR . '/modules/servers/solusvmpro/lib/SolusVM.php'; use Illuminate\Database\Capsule\Manager as Capsule; use SolusVM\SolusVM; From bc43ad49524a307967141ec5862ba0f9cb0e4f66 Mon Sep 17 00:00:00 2001 From: avolovplesk <61376229+avolovplesk@users.noreply.github.com> Date: Fri, 29 Oct 2021 18:24:49 +0700 Subject: [PATCH 07/16] Fix to allow upgrade/downgrade Bandwidth Added variable for bandwidth limit (cbandwidth) and api call to change it. --- modules/servers/solusvmpro/solusvmpro.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/modules/servers/solusvmpro/solusvmpro.php b/modules/servers/solusvmpro/solusvmpro.php index 3acc63d..4f8c880 100644 --- a/modules/servers/solusvmpro/solusvmpro.php +++ b/modules/servers/solusvmpro/solusvmpro.php @@ -681,10 +681,11 @@ function solusvmpro_ChangePackage( $params ) { $ccpu = $solusvm->getCcpu(); $cextraip = $solusvm->getCextraip(); $cnspeed = $solusvm->getCnspeed(); + $cbandwidth = $solusvm->getCbandwidth(); ######################################### //Apply custom resources - if ( !empty($cmem) || !empty($cdisk) || !empty($ccpu) || !empty($cextraip) ){ + if ( !empty($cmem) || !empty($cdisk) || !empty($ccpu) || !empty($cextraip) || !empty($cbandwidth) ){ $resource_errors = ""; $error_divider = " "; @@ -722,6 +723,14 @@ function solusvmpro_ChangePackage( $params ) { } } + + if ( $cbandwidth > 0 ){ + $solusvm->apiCall( 'vserver-bandwidth', array( "limit" => $cbandwidth, "vserverid" => $customField["vserverid"] ) ); + if ( !$solusvm->isSuccessResponse($solusvm->result) ) { + $resource_errors .= (string) $solusvm->result["statusmsg"]; + } + + } if ( $cextraip > 0 ){ //first() function doesn't work @@ -1264,4 +1273,3 @@ function solusvmpro_customclientareaunavailable( $params, $cparams ) { return $output; } } - From 078ed6581c8d8bc337ee5d9d976db00635c9fde1 Mon Sep 17 00:00:00 2001 From: Plsk-test Date: Thu, 23 Dec 2021 02:38:16 -0500 Subject: [PATCH 08/16] Fix for incorrect parsing of configure.ini file path modified: modules/servers/solusvmpro/lib/SolusVM.php --- modules/servers/solusvmpro/lib/SolusVM.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/servers/solusvmpro/lib/SolusVM.php b/modules/servers/solusvmpro/lib/SolusVM.php index 4d120eb..1e710db 100644 --- a/modules/servers/solusvmpro/lib/SolusVM.php +++ b/modules/servers/solusvmpro/lib/SolusVM.php @@ -103,7 +103,7 @@ public function __construct( $params, $debug = false ) { $this->pid = $this->getParam( "pid" ); # Product/Service ID //Parse Ini file - $config_file = dirname(ROOTDIR) . '/modules/servers/solusvmpro/configure.ini'; + $config_file = ROOTDIR . '/modules/servers/solusvmpro/configure.ini'; $this->configIni = parse_ini_file( $config_file ); } From 4044ac992cb2c5dba3b23fe58d95f9ba2ad64a09 Mon Sep 17 00:00:00 2001 From: Plsk-test Date: Fri, 29 Apr 2022 08:36:40 -0400 Subject: [PATCH 09/16] modified: modules/servers/solusvmpro/VERSION --- modules/servers/solusvmpro/VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/servers/solusvmpro/VERSION b/modules/servers/solusvmpro/VERSION index 9d086c6..561ad33 100644 --- a/modules/servers/solusvmpro/VERSION +++ b/modules/servers/solusvmpro/VERSION @@ -1 +1 @@ -4.1.4 \ No newline at end of file +4.1.6 From 0aeaf21f8ac5c51656fee50347692dfd238f3da4 Mon Sep 17 00:00:00 2001 From: Evgenii Ruzavin Date: Fri, 3 Jun 2022 15:53:00 +0700 Subject: [PATCH 10/16] BUGFIX SVM-1789 Fix broken VNC password change functionality --- modules/servers/solusvmpro/VERSION | 2 +- modules/servers/solusvmpro/lang/arabic.php | 1 + modules/servers/solusvmpro/lang/english.php | 1 + modules/servers/solusvmpro/lang/french.php | 1 + modules/servers/solusvmpro/lang/italian.php | 1 + modules/servers/solusvmpro/lang/russian.php | 1 + modules/servers/solusvmpro/lang/spanish.php | 1 + modules/servers/solusvmpro/lang/ukranian.php | 1 + modules/servers/solusvmpro/solusvmpro.php | 8 ++++++-- 9 files changed, 14 insertions(+), 3 deletions(-) diff --git a/modules/servers/solusvmpro/VERSION b/modules/servers/solusvmpro/VERSION index 561ad33..9edf2a4 100644 --- a/modules/servers/solusvmpro/VERSION +++ b/modules/servers/solusvmpro/VERSION @@ -1 +1 @@ -4.1.6 +4.1.7 diff --git a/modules/servers/solusvmpro/lang/arabic.php b/modules/servers/solusvmpro/lang/arabic.php index 606f6b6..1cf7d96 100644 --- a/modules/servers/solusvmpro/lang/arabic.php +++ b/modules/servers/solusvmpro/lang/arabic.php @@ -50,6 +50,7 @@ $_LANG['solusvmpro_confirmRootPassword'] = 'تأكيد كلمة مرور الجذر'; $_LANG['solusvmpro_confirmVNCPassword'] = 'تأكيد كلمة مرور فنك'; $_LANG['solusvmpro_confirmErrorPassword'] = 'يرجى التحقق من إدخال كلمة المرور وتأكيدها'; +$_LANG['solusvmpro_kvmVncPasswordLengthError'] = 'Length of KVM VNC password cannot be greater than 8 characters'; $_LANG['solusvmpro_virtualizationTypeError'] = 'الدالة غير مدعمة لهذا النوع الظاهري'; $_LANG['solusvmpro_unknownError'] = 'خطأ غير معروف. اتصل بالدعم'; $_LANG['solusvmpro_invalidHostname'] = 'اسم مضيف غير صالح'; diff --git a/modules/servers/solusvmpro/lang/english.php b/modules/servers/solusvmpro/lang/english.php index 8aa58a9..4be6507 100644 --- a/modules/servers/solusvmpro/lang/english.php +++ b/modules/servers/solusvmpro/lang/english.php @@ -50,6 +50,7 @@ $_LANG['solusvmpro_confirmRootPassword'] = 'Confirm a root password'; $_LANG['solusvmpro_confirmVNCPassword'] = 'Confirm VNC password'; $_LANG['solusvmpro_confirmErrorPassword'] = 'Please check that you have entered and confirmed your password'; +$_LANG['solusvmpro_kvmVncPasswordLengthError'] = 'Length of KVM VNC password cannot be greater than 8 characters'; $_LANG['solusvmpro_virtualizationTypeError'] = 'Function not supported for this virtualization type'; $_LANG['solusvmpro_unknownError'] = 'Unknown error. Contact support'; $_LANG['solusvmpro_invalidHostname'] = 'Invalid Hostname'; diff --git a/modules/servers/solusvmpro/lang/french.php b/modules/servers/solusvmpro/lang/french.php index 0ee4647..85be5e0 100644 --- a/modules/servers/solusvmpro/lang/french.php +++ b/modules/servers/solusvmpro/lang/french.php @@ -50,6 +50,7 @@ $_LANG['solusvmpro_confirmRootPassword'] = 'Confirmer un mot de passe racine'; $_LANG['solusvmpro_confirmVNCPassword'] = 'Confirmer le mot de passe VNC'; $_LANG['solusvmpro_confirmErrorPassword'] = 'Vérifiez que vous avez entré et confirmé votre mot de passe'; +$_LANG['solusvmpro_kvmVncPasswordLengthError'] = 'Length of KVM VNC password cannot be greater than 8 characters'; $_LANG['solusvmpro_virtualizationTypeError'] = 'Fonction non prise en charge pour ce type de virtualisation'; $_LANG['solusvmpro_unknownError'] = 'Erreur inconnue. Contactez le support'; $_LANG['solusvmpro_invalidHostname'] = 'Nom d'hôte invalide'; diff --git a/modules/servers/solusvmpro/lang/italian.php b/modules/servers/solusvmpro/lang/italian.php index 06e4810..8832ab1 100644 --- a/modules/servers/solusvmpro/lang/italian.php +++ b/modules/servers/solusvmpro/lang/italian.php @@ -50,6 +50,7 @@ $_LANG['solusvmpro_confirmRootPassword'] = 'Confermare una password di root'; $_LANG['solusvmpro_confirmVNCPassword'] = 'Confermare la password VNC'; $_LANG['solusvmpro_confirmErrorPassword'] = 'Verifica di aver inserito e confermato la tua password'; +$_LANG['solusvmpro_kvmVncPasswordLengthError'] = 'Length of KVM VNC password cannot be greater than 8 characters'; $_LANG['solusvmpro_virtualizationTypeError'] = 'Funzione non supportata per questo tipo di virtualizzazione'; $_LANG['solusvmpro_unknownError'] = 'Errore sconosciuto. Contatta il supporto'; $_LANG['solusvmpro_invalidHostname'] = 'hostname non valido'; diff --git a/modules/servers/solusvmpro/lang/russian.php b/modules/servers/solusvmpro/lang/russian.php index cab7c7a..d79881f 100644 --- a/modules/servers/solusvmpro/lang/russian.php +++ b/modules/servers/solusvmpro/lang/russian.php @@ -50,6 +50,7 @@ $_LANG['solusvmpro_confirmRootPassword'] = 'Повторите пароль для root'; $_LANG['solusvmpro_confirmVNCPassword'] = 'Повторите пароль для VNC'; $_LANG['solusvmpro_confirmErrorPassword'] = 'Пароли не совпадают'; +$_LANG['solusvmpro_kvmVncPasswordLengthError'] = 'Длина пароля VNC для KVM не может быть больше 8 символов'; $_LANG['solusvmpro_virtualizationTypeError'] = 'Функция не поддерживается для этого типа виртуализации'; $_LANG['solusvmpro_unknownError'] = 'Неизвестная ошибка. Обратитесь в службу поддержки'; $_LANG['solusvmpro_invalidHostname'] = 'Неверный адрес'; diff --git a/modules/servers/solusvmpro/lang/spanish.php b/modules/servers/solusvmpro/lang/spanish.php index 756e5b8..5eb7fe5 100644 --- a/modules/servers/solusvmpro/lang/spanish.php +++ b/modules/servers/solusvmpro/lang/spanish.php @@ -50,6 +50,7 @@ $_LANG['solusvmpro_confirmRootPassword'] = 'Confirmar una contraseña de root'; $_LANG['solusvmpro_confirmVNCPassword'] = 'Confirmar contraseña de VNC'; $_LANG['solusvmpro_confirmErrorPassword'] = 'Comprueba que has ingresado y confirmado tu contraseña.'; +$_LANG['solusvmpro_kvmVncPasswordLengthError'] = 'Length of KVM VNC password cannot be greater than 8 characters'; $_LANG['solusvmpro_virtualizationTypeError'] = 'Función no admitida para este tipo de virtualización'; $_LANG['solusvmpro_unknownError'] = 'Error desconocido. Soporte de contacto'; $_LANG['solusvmpro_invalidHostname'] = 'Nombre de host no válido'; diff --git a/modules/servers/solusvmpro/lang/ukranian.php b/modules/servers/solusvmpro/lang/ukranian.php index 96675d1..1467267 100644 --- a/modules/servers/solusvmpro/lang/ukranian.php +++ b/modules/servers/solusvmpro/lang/ukranian.php @@ -50,6 +50,7 @@ $_LANG['solusvmpro_confirmRootPassword'] = 'Повторіть пароль для root'; $_LANG['solusvmpro_confirmVNCPassword'] = 'Повторіть пароль для VNC'; $_LANG['solusvmpro_confirmErrorPassword'] = 'Паролі не співпадають'; +$_LANG['solusvmpro_kvmVncPasswordLengthError'] = 'Length of KVM VNC password cannot be greater than 8 characters'; $_LANG['solusvmpro_virtualizationTypeError'] = 'Функція не підтримує цей тип віртуалізації'; $_LANG['solusvmpro_unknownError'] = 'Невідома помилка. Зверніться у службу підтримки'; $_LANG['solusvmpro_invalidHostname'] = 'Неправильна адреса'; diff --git a/modules/servers/solusvmpro/solusvmpro.php b/modules/servers/solusvmpro/solusvmpro.php index 4f8c880..caa9292 100644 --- a/modules/servers/solusvmpro/solusvmpro.php +++ b/modules/servers/solusvmpro/solusvmpro.php @@ -1051,23 +1051,27 @@ function solusvmpro_Custom_ChangeVNCPassword( $params = '' ) { exit( json_encode( $result ) ); } - $solusvm->apiCall( 'vserver-vncpassword', $callArray ); + $solusvm->apiCall( 'vserver-vncpass', $callArray ); $r = $solusvm->result; $message = ''; + $isApiCallSuccessful = false; if ( $r["status"] == "success" ) { $solusvm->setCustomfieldsValue( 'vncpassword', $newvncpassword ); $message = $_LANG['solusvmpro_passwordUpdated']; + $isApiCallSuccessful = true; } elseif ( $r["status"] == "error" && $r["statusmsg"] == "VNC password not specified" ) { $message = $_LANG['solusvmpro_enterPassword']; } elseif ( $r["status"] == "error" && $r["statusmsg"] == "Not supported for this virtualization type" ) { $message = $_LANG['solusvmpro_virtualizationTypeError']; + } elseif ( $r["status"] === "error" && $r["statusmsg"] === "Length of KVM VNC password cannot be greater than 8 characters." ) { + $message = $_LANG['solusvmpro_kvmVncPasswordLengthError']; } else { $message = $_LANG['solusvmpro_unknownError']; } //$message = "
" . print_r($r, true) . $solusvm->debugTxt;
         $result = (object) array(
-            'success' => true,
+            'success' => $isApiCallSuccessful,
             'msg'     => $message,
         );
         exit( json_encode( $result ) );

From d5074a7f9e914c632fa847b13a6c34bce2c8e251 Mon Sep 17 00:00:00 2001
From: Evgenii Ruzavin 
Date: Wed, 29 Jun 2022 09:57:14 +0700
Subject: [PATCH 11/16] FEATURE SVM-1789 Add French translation about VNC
 password length restriction

---
 modules/servers/solusvmpro/lang/french.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/servers/solusvmpro/lang/french.php b/modules/servers/solusvmpro/lang/french.php
index 85be5e0..70b2d0f 100644
--- a/modules/servers/solusvmpro/lang/french.php
+++ b/modules/servers/solusvmpro/lang/french.php
@@ -50,7 +50,7 @@
 $_LANG['solusvmpro_confirmRootPassword']                  = 'Confirmer un mot de passe racine';
 $_LANG['solusvmpro_confirmVNCPassword']                   = 'Confirmer le mot de passe VNC';
 $_LANG['solusvmpro_confirmErrorPassword']                 = 'Vérifiez que vous avez entré et confirmé votre mot de passe';
-$_LANG['solusvmpro_kvmVncPasswordLengthError']            = 'Length of KVM VNC password cannot be greater than 8 characters';
+$_LANG['solusvmpro_kvmVncPasswordLengthError']            = 'La longueur du mot de passe VNC KVM ne peut pas être supérieure à 8 caractères';
 $_LANG['solusvmpro_virtualizationTypeError']              = 'Fonction non prise en charge pour ce type de virtualisation';
 $_LANG['solusvmpro_unknownError']                         = 'Erreur inconnue. Contactez le support';
 $_LANG['solusvmpro_invalidHostname']                      = 'Nom d'hôte invalide';

From 333215b1959b78d676378b63c5a0699e29999c5d Mon Sep 17 00:00:00 2001
From: dshamanskaia 
Date: Wed, 10 Aug 2022 09:29:14 +0300
Subject: [PATCH 12/16] BUGFIX SVM-3482 Extra IP was removed on another
 Configurable Option upgrade/downgrade

---
 modules/servers/solusvmpro/solusvmpro.php | 54 ++++++++++++-----------
 1 file changed, 29 insertions(+), 25 deletions(-)

diff --git a/modules/servers/solusvmpro/solusvmpro.php b/modules/servers/solusvmpro/solusvmpro.php
index caa9292..266494e 100644
--- a/modules/servers/solusvmpro/solusvmpro.php
+++ b/modules/servers/solusvmpro/solusvmpro.php
@@ -29,7 +29,7 @@ function initConfigOption()
     }else{
         $data = SolusVM::collectionToArray(Capsule::table('tblproducts')->where('servertype', 'solusvmpro')->where('id', $_POST['id'])->get());
     }
-    
+
     $packageconfigoption = [];
     if(is_array($data) && count($data) > 0) {
         $packageconfigoption[1] = $data[0]->configoption1;
@@ -210,12 +210,12 @@ function solusvmpro_CreateAccount( $params ) {
 
         ## Update the username field
         Capsule::table( 'tblhosting' )
-               ->where( 'id', $serviceid )
-               ->update(
-                   [
-                       'username' => $clientUsername,
-                   ]
-               );
+            ->where( 'id', $serviceid )
+            ->update(
+                [
+                    'username' => $clientUsername,
+                ]
+            );
 
         $returnData["password"] = $r["password"];
 
@@ -308,12 +308,12 @@ function solusvmpro_CreateAccount( $params ) {
             ## Insert the dedicated ip
             $mainip = $r["mainipaddress"];
             Capsule::table( 'tblhosting' )
-                   ->where( 'id', $serviceid )
-                   ->update(
-                       [
-                           'dedicatedip' => $mainip,
-                       ]
-                   );
+                ->where( 'id', $serviceid )
+                ->update(
+                    [
+                        'dedicatedip' => $mainip,
+                    ]
+                );
 
             ## Update the hostname just in case solus changed it
             $solusvm->setHostname( $r["hostname"] );
@@ -324,12 +324,12 @@ function solusvmpro_CreateAccount( $params ) {
                 ## Remove the comma and replace with a line break
                 $iplist = str_replace( ",", "\n", $extraip );
                 Capsule::table( 'tblhosting' )
-                       ->where( 'id', $serviceid )
-                       ->update(
-                           [
-                               'assignedips' => $iplist,
-                           ]
-                       );
+                    ->where( 'id', $serviceid )
+                    ->update(
+                        [
+                            'assignedips' => $iplist,
+                        ]
+                    );
             }
             $result = "success";
 
@@ -723,7 +723,7 @@ function solusvmpro_ChangePackage( $params ) {
                 }
 
             }
-            
+
             if ( $cbandwidth > 0 ){
                 $solusvm->apiCall( 'vserver-bandwidth', array( "limit" => $cbandwidth, "vserverid" => $customField["vserverid"] ) );
                 if ( !$solusvm->isSuccessResponse($solusvm->result) ) {
@@ -738,9 +738,12 @@ function solusvmpro_ChangePackage( $params ) {
                 $ips = $ipaddresses[0]->assignedips;
 
                 $lines_arr = explode(PHP_EOL, $ips);
-                $num_current_ips = count($lines_arr);
-                if( empty($lines_arr[0]) ){
-                    $num_current_ips -= 1;
+
+                $num_current_ips = 0;
+                foreach ($lines_arr as $ip) {
+                    if (filter_var(trim($ip), FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
+                        $num_current_ips++;
+                    }
                 }
 
                 $additional_ips_needed = $cextraip - $num_current_ips;
@@ -759,12 +762,12 @@ function solusvmpro_ChangePackage( $params ) {
                         }
                     }
 
-                } else {
+                }
 
+                if ( $additional_ips_needed < 0 ) {
                     for($i=0; $i>$additional_ips_needed;$i--){
 
                         $solusvm->apiCall( 'vserver-delip', array( "vserverid" => $customField["vserverid"], "ipaddr" => $lines_arr[0]) );
-
                         if ( !$solusvm->isSuccessResponse($solusvm->result) ) {
                             $resource_errors .= (string) $solusvm->result["statusmsg"] . $error_divider;
                             break;
@@ -773,6 +776,7 @@ function solusvmpro_ChangePackage( $params ) {
                         }
                     }
                 }
+                
             }
 
             $ipArr = implode(PHP_EOL, $lines_arr);

From 48b7c0a889fce379f55fc0293bb705d7ac566c45 Mon Sep 17 00:00:00 2001
From: dshamanskaia <110902229+dshamanskaia@users.noreply.github.com>
Date: Wed, 10 Aug 2022 09:58:51 +0300
Subject: [PATCH 13/16] Update VERSION

---
 modules/servers/solusvmpro/VERSION | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/servers/solusvmpro/VERSION b/modules/servers/solusvmpro/VERSION
index 9edf2a4..a7c00da 100644
--- a/modules/servers/solusvmpro/VERSION
+++ b/modules/servers/solusvmpro/VERSION
@@ -1 +1 @@
-4.1.7
+4.1.8

From b69595a2099553dcc34eb66e4a460c05b69396ee Mon Sep 17 00:00:00 2001
From: avolov 
Date: Thu, 6 Oct 2022 13:48:05 +0700
Subject: [PATCH 14/16] BUGFIX SVM-3588 use  to get vserverid instead of GET
 request

---
 modules/servers/solusvmpro/js/hostname.js     | 1 -
 modules/servers/solusvmpro/js/rescuemode.js   | 1 -
 modules/servers/solusvmpro/js/rootpassword.js | 1 -
 modules/servers/solusvmpro/js/vncpassword.js  | 1 -
 modules/servers/solusvmpro/solusvmpro.php     | 8 ++++----
 5 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/modules/servers/solusvmpro/js/hostname.js b/modules/servers/solusvmpro/js/hostname.js
index 513bbcc..a6dcfcf 100644
--- a/modules/servers/solusvmpro/js/hostname.js
+++ b/modules/servers/solusvmpro/js/hostname.js
@@ -33,7 +33,6 @@ $(function () {
             button.html(' ' + lang['solusvmpro_change']);
             button.prop('disabled', true);
             var ajaxData = {
-                vserverid: vserverid,
                 modop: 'custom',
                 a: 'ChangeHostname',
                 newhostname: newhostname,
diff --git a/modules/servers/solusvmpro/js/rescuemode.js b/modules/servers/solusvmpro/js/rescuemode.js
index 072c76b..cc6b620 100644
--- a/modules/servers/solusvmpro/js/rescuemode.js
+++ b/modules/servers/solusvmpro/js/rescuemode.js
@@ -34,7 +34,6 @@ $(function () {
             button.html(' ' + lang['solusvmpro_processing']);
             button.prop('disabled', true);
             var ajaxData = {
-                vserverid: vserverid,
                 modop: 'custom',
                 a: 'ChangeRescueMode',
                 rescueAction: rescueAction,
diff --git a/modules/servers/solusvmpro/js/rootpassword.js b/modules/servers/solusvmpro/js/rootpassword.js
index 6b098c7..40f5edb 100644
--- a/modules/servers/solusvmpro/js/rootpassword.js
+++ b/modules/servers/solusvmpro/js/rootpassword.js
@@ -38,7 +38,6 @@ $(function () {
             button.html(' ' + lang['solusvmpro_change']);
             button.prop('disabled', true);
             var ajaxData = {
-                vserverid: vserverid,
                 modop: 'custom',
                 a: 'ChangeRootPassword',
                 newrootpassword: newrootpassword,
diff --git a/modules/servers/solusvmpro/js/vncpassword.js b/modules/servers/solusvmpro/js/vncpassword.js
index d9f1817..4916bfb 100644
--- a/modules/servers/solusvmpro/js/vncpassword.js
+++ b/modules/servers/solusvmpro/js/vncpassword.js
@@ -38,7 +38,6 @@ $(function () {
             button.html(' ' + lang['solusvmpro_change']);
             button.prop('disabled', true);
             var ajaxData = {
-                vserverid: vserverid,
                 modop: 'custom',
                 a: 'ChangeVNCPassword',
                 newvncpassword: newvncpassword,
diff --git a/modules/servers/solusvmpro/solusvmpro.php b/modules/servers/solusvmpro/solusvmpro.php
index 266494e..5cdc45b 100644
--- a/modules/servers/solusvmpro/solusvmpro.php
+++ b/modules/servers/solusvmpro/solusvmpro.php
@@ -922,7 +922,7 @@ function solusvmpro_Custom_ChangeHostname( $params = '' ) {
     if ( $check_section ) {
         ## The call string for the connection function
 
-        $callArray = array( "vserverid" => $_GET['vserverid'], "hostname" => $newhostname );
+        $callArray = array( "vserverid" => $params['customfields']['vserverid'], "hostname" => $newhostname );
 
         $solusvm = new SolusVM( $params );
 
@@ -979,7 +979,7 @@ function solusvmpro_Custom_ChangeRootPassword( $params = '' ) {
     $checkNewRootPassword = SolusVM::validateRootPassword( $newrootpassword );
     if ( $checkNewRootPassword ) {
         ## The call string for the connection function
-        $callArray = array( "vserverid" => $_GET['vserverid'], "rootpassword" => $newrootpassword );
+        $callArray = array( "vserverid" => $params['customfields']['vserverid'], "rootpassword" => $newrootpassword );
 
         $solusvm = new SolusVM( $params );
 
@@ -1036,7 +1036,7 @@ function solusvmpro_Custom_ChangeVNCPassword( $params = '' ) {
     $checkNewVNCPassword = SolusVM::validateVNCPassword( $newvncpassword );
     if ( $checkNewVNCPassword ) {
         ## The call string for the connection function
-        $callArray = array( "vserverid" => $_GET['vserverid'], "vncpassword" => $newvncpassword );
+        $callArray = array( "vserverid" => $params['customfields']['vserverid'], "vncpassword" => $newvncpassword );
 
         $solusvm = new SolusVM( $params );
 
@@ -1234,7 +1234,7 @@ function solusvmpro_Custom_ChangeRescueMode( $params = '' ) {
 
     if ( $rescueValue && $rescueAction) {
         // The call string for the connection function
-        $callArray = array( 'vserverid' => $_GET['vserverid'], $rescueAction => $rescueValue );
+        $callArray = array( 'vserverid' => $params['customfields']['vserverid'], $rescueAction => $rescueValue );
         $solusvm = new SolusVM( $params );
 
         $solusvm->apiCall( 'vserver-rescue', $callArray );

From fc1755a2b85a015887cb102c8d053e1e891fea95 Mon Sep 17 00:00:00 2001
From: Artem Volov <61376229+avolovplesk@users.noreply.github.com>
Date: Thu, 6 Oct 2022 14:30:11 +0700
Subject: [PATCH 15/16] Update VERSION

---
 modules/servers/solusvmpro/VERSION | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/servers/solusvmpro/VERSION b/modules/servers/solusvmpro/VERSION
index a7c00da..6aba2b2 100644
--- a/modules/servers/solusvmpro/VERSION
+++ b/modules/servers/solusvmpro/VERSION
@@ -1 +1 @@
-4.1.8
+4.2.0

From bb0f53e17a6dadb829114eff94102efd455ec577 Mon Sep 17 00:00:00 2001
From: Evgenii Ruzavin 
Date: Thu, 17 Nov 2022 09:48:19 +0700
Subject: [PATCH 16/16] FEATURE SVM-3260 Add PHP 8.1 support

---
 modules/servers/solusvmpro/VERSION            |  2 +-
 modules/servers/solusvmpro/custom-example.php | 16 ++++-----
 modules/servers/solusvmpro/lib/Curl.php       |  2 +-
 modules/servers/solusvmpro/lib/SolusVM.php    | 34 +++++++++----------
 modules/servers/solusvmpro/solusvmpro.php     |  9 ++---
 5 files changed, 32 insertions(+), 31 deletions(-)

diff --git a/modules/servers/solusvmpro/VERSION b/modules/servers/solusvmpro/VERSION
index 6aba2b2..fae6e3d 100644
--- a/modules/servers/solusvmpro/VERSION
+++ b/modules/servers/solusvmpro/VERSION
@@ -1 +1 @@
-4.2.0
+4.2.1
diff --git a/modules/servers/solusvmpro/custom-example.php b/modules/servers/solusvmpro/custom-example.php
index 420301f..4818015 100644
--- a/modules/servers/solusvmpro/custom-example.php
+++ b/modules/servers/solusvmpro/custom-example.php
@@ -16,18 +16,18 @@
 #   ### server is ordered, if no hostname is specified.
 #   ###########################################################################
 #   ################################## CODE ###################################
-#   $serviceid = $params["serviceid"];
-#   $clientsdetails = $params["clientsdetails"];
-#   if(!empty($params[domain])) {
-#     $currentHost = $params[domain] {
-#       strlen($params[domain]) - 1}
+#   $serviceid = $params['serviceid'];
+#   $clientsdetails = $params['clientsdetails'];
+#   if(!empty($params['domain'])) {
+#     $currentHost = $params['domain'] {
+#       strlen($params['domain']) - 1}
 #     ;
 #     if(!strcmp($currentHost, ".")) {
-#       $newHost = substr($params[domain], 0, -1);
+#       $newHost = substr($params['domain'], 0, -1);
 #       mysql_real_escape_string($newHost);
 #       mysql_query("UPDATE tblhosting SET `domain` = '$newHost' WHERE `id` = '$serviceid'");
 #     } else {
-#       $newHost = $params[domain];
+#       $newHost = $params['domain'];
 #     }
 #   } else {
 #     $newHost = "vps" . $serviceid . $clientsdetails['id'] . ".EXAMPLEDOMAIN.COM";
@@ -56,7 +56,7 @@
 #   ### from the server list in whmcs
 #   ###########################################################################
 #   ################################## CODE ###################################
-#   $code = '
+# $code = ' # # # diff --git a/modules/servers/solusvmpro/lib/Curl.php b/modules/servers/solusvmpro/lib/Curl.php index 097fe71..5a77684 100644 --- a/modules/servers/solusvmpro/lib/Curl.php +++ b/modules/servers/solusvmpro/lib/Curl.php @@ -199,7 +199,7 @@ public function call() */ public function close() { - if (is_resource($this->curl)) { + if (is_resource($this->curl) || is_object($this->curl)) { curl_close($this->curl); } $this->options = null; diff --git a/modules/servers/solusvmpro/lib/SolusVM.php b/modules/servers/solusvmpro/lib/SolusVM.php index 1e710db..39dddce 100644 --- a/modules/servers/solusvmpro/lib/SolusVM.php +++ b/modules/servers/solusvmpro/lib/SolusVM.php @@ -201,7 +201,7 @@ public function sortReturn( $data ) { foreach ( $matches[1] as $k => $v ) { $result[ $v ] = $matches[2][ $k ]; } - $this->debugLog( 'solusvmpro', 'process', $data, $result, $result, '' ); + $this->debugLog( 'solusvmpro', 'process', $data, $result, $result, [] ); return $result; } @@ -231,10 +231,10 @@ public function serverExtra( $mServer = array() ) { public function passwordGen( $length = 10, $chars = 'abcdefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ1234567890' ) { $chars_length = ( strlen( $chars ) - 1 ); - $string = $chars{rand( 0, $chars_length )}; + $string = $chars[rand( 0, $chars_length )]; for ( $i = 1; $i < $length; $i = strlen( $string ) ) { - $r = $chars{rand( 0, $chars_length )}; - if ( $r != $string{$i - 1} ) { + $r = $chars[rand( 0, $chars_length )]; + if ( $r != $string[$i - 1]) { $string .= $r; } } @@ -660,10 +660,10 @@ public function clientAreaCalculations( $result ) { if ($result["state"] == "online" || $result["state"] == "offline") { //Bandwidth graph $bandwidthData = explode(",", $result["bandwidth"]); - $usedBwPercentage = $bandwidthData[3]; - $bandwidthData[1] = $bandwidthData[1] / 1024; - $bandwidthData[2] = $bandwidthData[2] / 1024; - $bandwidthData[0] = $bandwidthData[0] / 1024; + $usedBwPercentage = (int)$bandwidthData[3]; + $bandwidthData[1] = (int)$bandwidthData[1] / 1024; + $bandwidthData[2] = (int)$bandwidthData[2] / 1024; + $bandwidthData[0] = (int)$bandwidthData[0] / 1024; $bwUsed = $this->bwFormat($bandwidthData[1]); $bwFree = $this->bwFormat($bandwidthData[2]); $bwTotal = $this->bwFormat($bandwidthData[0]); @@ -691,10 +691,10 @@ public function clientAreaCalculations( $result ) { if ($result["type"] == "openvz") { if ($this->getExtData("memusage") != "disable") { $memData = explode(",", $result["memory"]); - $usedMemPercentage = $memData[3]; - $memData[1] = $memData[1] / 1024; - $memData[2] = $memData[2] / 1024; - $memData[0] = $memData[0] / 1024; + $usedMemPercentage = (int)$memData[3]; + $memData[1] = (int)$memData[1] / 1024; + $memData[2] = (int)$memData[2] / 1024; + $memData[0] = (int)$memData[0] / 1024; $memUsed = $this->bwFormat($memData[1]); $memFree = $this->bwFormat($memData[2]); $memTotal = $this->bwFormat($memData[0]); @@ -721,10 +721,10 @@ public function clientAreaCalculations( $result ) { if ($result["type"] == "openvz" || $result["type"] == "xen") { if ($this->getExtData("diskusage") != "disable") { $hddData = explode(",", $result["hdd"]); - $usedHddPercentage = $hddData[3]; - $hddData[1] = $hddData[1] / 1024; - $hddData[2] = $hddData[2] / 1024; - $hddData[0] = $hddData[0] / 1024; + $usedHddPercentage = (int)$hddData[3]; + $hddData[1] = (int)$hddData[1] / 1024; + $hddData[2] = (int)$hddData[2] / 1024; + $hddData[0] = (int)$hddData[0] / 1024; $hddUsed = $this->bwFormat($hddData[1]); $hddFree = $this->bwFormat($hddData[2]); $hddTotal = $this->bwFormat($hddData[0]); @@ -1100,7 +1100,7 @@ public function isSuccessResponse( $result ) { * * @return array */ - public function collectionToArray($object) { + public static function collectionToArray($object) { if (is_array($object)) { return $object; } diff --git a/modules/servers/solusvmpro/solusvmpro.php b/modules/servers/solusvmpro/solusvmpro.php index 5cdc45b..dde412e 100644 --- a/modules/servers/solusvmpro/solusvmpro.php +++ b/modules/servers/solusvmpro/solusvmpro.php @@ -732,6 +732,7 @@ function solusvmpro_ChangePackage( $params ) { } + $lines_arr = []; if ( $cextraip > 0 ){ //first() function doesn't work $ipaddresses = SolusVM::collectionToArray(Capsule::table('tblhosting')->select('assignedips')->where( 'id', $params['serviceid'] )->get()); @@ -1199,12 +1200,12 @@ function solusvmpro_UsageUpdate($params) $r = json_decode($res); $bandwidthData = explode(',', $r->bandwidth); - $bwusage = round($bandwidthData[1] / 1024 ** 2, 0, PHP_ROUND_HALF_UP); - $bwlimit = round($bandwidthData[0] / 1024 ** 2, 0, PHP_ROUND_HALF_UP); + $bwusage = round((int)$bandwidthData[1] / 1024 ** 2, 0, PHP_ROUND_HALF_UP); + $bwlimit = round((int)$bandwidthData[0] / 1024 ** 2, 0, PHP_ROUND_HALF_UP); $hddData = explode(',', $r->hdd); - $diskusage = round($hddData[1] / 1024 ** 2, 0, PHP_ROUND_HALF_UP); - $disklimit = round($hddData[0] / 1024 ** 2, 0, PHP_ROUND_HALF_UP); + $diskusage = round((int)$hddData[1] / 1024 ** 2, 0, PHP_ROUND_HALF_UP); + $disklimit = round((int)$hddData[0] / 1024 ** 2, 0, PHP_ROUND_HALF_UP); Capsule::table('tblhosting') ->where('id', $ownerRow->id)