diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7b30c02 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +modules/servers/solusvmpro/.idea +modules/servers/solusvmpro/callback.php +modules/servers/solusvmpro/configure.ini +modules/servers/solusvmpro/custom.php +.idea + 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) diff --git a/modules/servers/solusvmpro/VERSION b/modules/servers/solusvmpro/VERSION index 2582ddd..fae6e3d 100644 --- a/modules/servers/solusvmpro/VERSION +++ b/modules/servers/solusvmpro/VERSION @@ -1 +1 @@ -4.1.1 \ No newline at end of file +4.2.1 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/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/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/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/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..70b2d0f 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'] = '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'; 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/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 7545305..39dddce 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; @@ -79,7 +80,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; } @@ -102,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 = ROOTDIR . '/modules/servers/solusvmpro/configure.ini'; $this->configIni = parse_ini_file( $config_file ); } @@ -126,6 +127,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,13 +190,18 @@ 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(); 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; } @@ -219,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; } } @@ -636,7 +648,7 @@ public function clientAreaCalculations( $result ) { ) ); - if ( $result["status"] == "success" ) { + if ( $this->isSuccessResponse($result) ) { $vstatus = '' . $vstatusAr[$result["state"]]['msg'] . ''; } else { $vstatus = '' . $vstatusAr['unavailable']['msg'] . ''; @@ -648,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]); @@ -679,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]); @@ -709,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]); @@ -964,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 ) { @@ -1038,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 ) { @@ -1066,10 +1078,36 @@ 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; + } + + /** + * Converts Collection to array if required + * + * @param array|Collection|any $object arbitrary object. + * + * @return array + */ + public static 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 7ef383e..dde412e 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(); @@ -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; } @@ -71,7 +72,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 +81,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 +90,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 +99,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; @@ -209,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"]; @@ -307,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"] ); @@ -323,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"; @@ -382,7 +383,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 +433,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 +487,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 +565,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 +600,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 +635,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"]; @@ -680,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 = " "; @@ -692,7 +694,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 +702,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 +710,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,21 +718,33 @@ 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"]; } } + if ( $cbandwidth > 0 ){ + $solusvm->apiCall( 'vserver-bandwidth', array( "limit" => $cbandwidth, "vserverid" => $customField["vserverid"] ) ); + if ( !$solusvm->isSuccessResponse($solusvm->result) ) { + $resource_errors .= (string) $solusvm->result["statusmsg"]; + } + + } + + $lines_arr = []; 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); - $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; @@ -741,7 +755,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 { @@ -749,13 +763,13 @@ 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->result["status"] != "success" ) { + if ( !$solusvm->isSuccessResponse($solusvm->result) ) { $resource_errors .= (string) $solusvm->result["statusmsg"] . $error_divider; break; } else { @@ -763,6 +777,7 @@ function solusvmpro_ChangePackage( $params ) { } } } + } $ipArr = implode(PHP_EOL, $lines_arr); @@ -781,7 +796,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 +882,20 @@ 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' ); + $solusAdminId = (int)$solusvm->getExtData("login-button-admin-id"); - $code = ' - - - + $code = ''; + if (isset($solusAdminId) && $solusAdminId > 0) { + $code .= ''; + } + $code .=' + + +
'; return $code; @@ -902,7 +923,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 ); @@ -959,7 +980,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 ); @@ -1016,7 +1037,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 ); @@ -1035,23 +1056,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 ) );
@@ -1097,7 +1122,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 );
@@ -1175,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)
@@ -1210,7 +1235,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 );
@@ -1257,4 +1282,3 @@ function solusvmpro_customclientareaunavailable( $params, $cparams ) {
         return $output;
     }
 }
-
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;