Page 1 of 1

VestaCP Boxbilling Updates

Posted: Thu Apr 27, 2017 10:14 pm
by thewball
Hi!

I Love the VestaCP software! While I was integrating VestaCP with BoxBilling, I noticed that there was a domain creation error in this script. I have noticed that there is an error in the call to the api when the user account is created. It connects to my server just fine and the Boxbilling install is solid. Is there any guidance you could give me to fixing this? Thank you so much!!

Code: Select all

<?php
/**
 * BoxBilling
 *
 * LICENSE
 *
 * This source file is subject to the license that is bundled
 * with this package in the file LICENSE.txt
 * It is also available through the world-wide-web at this URL:
 * http://www.boxbilling.com/LICENSE.txt
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to [email protected] so we can send you a copy immediately.
 *
 * @copyright Copyright (c) 2010-2012 BoxBilling (http://www.boxbilling.com)
 * @license   http://www.boxbilling.com/LICENSE.txt
 * @version   $Id$
 */
class Server_Manager_Vesta extends Server_Manager
{
    /**
     * Method is called just after obejct contruct is complete.
     * Add required parameters checks here. 
     */
	public function init()
    {
        
	}
    /**
     * Return server manager parameters.
     * @return type 
     */
    public static function getForm()
    {
        return array(
            'label'     =>  'Vesta Server Manager V2',
        );
    }
    /**
     * Returns link to account management page
     * 
     * @return string 
     */
    public function getLoginUrl()
    {
     $host = 'http';
		if ($this->_config['secure']) {
			$host .= 's';
		}
		$host .= '://' . $this->_config['host'] . ':'.$this->_config['port'].'/';
        return $host;
    }
    /**
     * Returns link to reseller account management
     * @return string 
     */
    public function getResellerLoginUrl()
    {
        return 'http://www.google.com?q=whm';
    }
   
private function _makeRequest($params)
    {
$host = 'http';
		if ($this->_config['secure']) {
			$host .= 's';
		}
		$host .= '://' . $this->_config['host'] . ':'.$this->_config['port'].'/api/';
    	
    	
// Server credentials
$params['user'] = $this->_config['username'];
$params['password'] = $this->_config['password'];
   	
    	
// Send POST query via cURL
$postdata = http_build_query($params);
$curl = curl_init();
$timeout = 5;
curl_setopt($curl, CURLOPT_URL, $host);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
$result = curl_exec($curl);
curl_close($curl);
		if(strpos($result, 'Error')!== false){
throw new Server_Exception('Connection to server failed  '.$result);
    	}
		
			return $result;
    }
private function _getPackageName(Server_Package $package)
    {
        $name = $package->getName();
        
        return $name;
    }
    /**
     * This method is called to check if configuration is correct
     * and class can connect to server
     * 
     * @return boolean 
     */
    public function testConnection()
    {
      
    
           
        // Server credentials
$vst_command = 'v-check-user-password';
$vst_returncode = 'yes';
// Prepare POST query
$postvars = array(
    
    'returncode' => $vst_returncode,
    'cmd' => $vst_command,
    'arg1' => $this->_config['username'],
    'arg2' => $this->_config['password'],
);
    
// Make request and check sys info
$result = $this->_makeRequest($postvars);
if(strpos($result, 'Error')!== false){
throw new Server_Exception('Connection to server failed  '.$result);
    	}
else {
if ($result == 0) {
    		return true;
    	} else {
    		throw new Server_Exception('Connection to server failed '.$result);
    	}
}
		return true;
    }
    /**
     * MEthods retrieves information from server, assignes new values to
     * cloned Server_Account object and returns it.
     * @param Server_Account $a
     * @return Server_Account 
     */
    public function synchronizeAccount(Server_Account $a)
    {
        $this->getLog()->info('Synchronizing account with server '.$a->getUsername());
        $new = clone $a;
        //@example - retrieve username from server and set it to cloned object
        //$new->setUsername('newusername');
        return $new;
    }
    /**
     * Create new account on server
     * 
     * @param Server_Account $a 
     */
	public function createAccount(Server_Account $a)
    {
           
           $p = $a->getPackage();
           $packname = $this->_getPackageName($p);
		
		
		$client = $a->getClient();
        // Server credentials
$vst_command = 'v-add-user';
$vst_returncode = 'yes';
$parts = explode(" ", $client->getFullName());
$lastname = array_pop($parts);
$firstname = implode(" ", $parts);
// Prepare POST query
$postvars = array(
    
    'returncode' => $vst_returncode,
    'cmd' => $vst_command,
    'arg1' => $a->getUsername(),
    'arg2' => $a->getPassword(),
    'arg3' => $client->getEmail(),
    'arg4' => $packname,
    'arg5' => $firstname,
    'arg6' => $lastname							
);    
// Make request and create user 
$result = $this->_makeRequest($postvars);
if($result == 0)
{
		
// Create Domain Prepare POST query
$postvars2 = array(
    
    'returncode' => 'yes',
    'cmd' => 'v-add-domain',
    'arg1' => $a->getUsername(),
    'arg2' => $a->getDomain()
);
$result2 = $this->_makeRequest($postvars2);
}
else {
}
if($result2 != '0'){
throw new Server_Exception('Server Manager Vesta CP Error: Create Domain failure '.$result2);
}
	return true;
	}
    /**
     * Suspend account on server
     * @param Server_Account $a 
     */
	public function suspendAccount(Server_Account $a)
    {
$user = $a->getUsername();
// Prepare POST query
$postvars = array(    
    'returncode' => 'yes',
    'cmd' => 'v-suspend-user',
    'arg1' => $a->getUsername(),
    'arg2' => 'no'  
                  );    
// Make request and suspend user 
$result = $this->_makeRequest($postvars);
// Check if error 6 the account is suspended on server
if($result == '6'){
			return true;
                 }
if($result != '0'){
throw new Server_Exception('Server Manager Vesta CP Error: Suspend Account Error '.$result.$suspended);
}
return true;
        
	}
    /**
     * Unsuspend account on server
     * @param Server_Account $a 
     */
	public function unsuspendAccount(Server_Account $a)
    {
           
        // Server credentials
$vst_command = 'v-unsuspend-user';
$vst_returncode = 'yes';
// Prepare POST query
$postvars = array(
    
    'returncode' => $vst_returncode,
    'cmd' => $vst_command,
    'arg1' => $a->getUsername(),
    'arg2' => 'no',
    'arg3' =>'',
    'arg4' =>'',
    'arg5' =>'',
    'arg6' =>'',
    'arg7' =>'',
    'arg8' =>'',
    'arg9' =>''
		
);  
  
		$result = $this->_makeRequest($postvars);
if($result != '0'){
throw new Server_Exception('Server Manager Vesta CP Error: unSuspend Account Error '.$result);
}
return true;
}
	
    /**
     * Cancel account on server
     * @param Server_Account $a 
     */
	public function cancelAccount(Server_Account $a)
    {
        
           
        // Server credentials
$vst_username = $this->_config['username'];
$vst_password = $this->_config['password'];
$vst_command = 'v-delete-user';
$vst_returncode = 'yes';
// Prepare POST query
$postvars = array(
    
    'returncode' => $vst_returncode,
    'cmd' => $vst_command,
    'arg1' => $a->getUsername(),
    'arg2' => 'no'
						
);    
// Make request and delete user 
		$result = $this->_makeRequest($postvars);
if($result == '3'){
return true;
}
else {if($result != '0'){
throw new Server_Exception('Server Manager Vesta CP Error: Cancel Account Error '.$result);
}}
return true;
	}
    /**
     * Change account package on server
     * @param Server_Account $a
     * @param Server_Package $p 
     */
	public function changeAccountPackage(Server_Account $a, Server_Package $p)
    {
        
$package = $a->getPackage()->getName();
        
        
// Server credentials
$vst_username = $this->_config['username'];
$vst_password = $this->_config['password'];
$vst_command = 'v-change-user-package';
$vst_returncode = 'yes';
// Prepare POST query
$postvars = array(
    
    'returncode' => $vst_returncode,
    'cmd' => $vst_command,
    'arg1' => $a->getUsername(),
    'arg2' => $this->_getPackageName($p),
    'arg3' => 'no'
			
);    
// Make request and change package
		$result = $this->_makeRequest($postvars);
if($result != '0'){
throw new Server_Exception('Server Manager Vesta CP Error: Change User package Account Error '.$result);
}
return true;
	}
    /**
     * Change account username on server
     * @param Server_Account $a
     * @param type $new - new account username
     */
    public function changeAccountUsername(Server_Account $a, $new)
    {
        {
throw new Server_Exception('Server Manager Vesta CP Error: Not Supported');
}
    }
    /**
     * Change account domain on server
     * @param Server_Account $a
     * @param type $new - new domain name
     */
    public function changeAccountDomain(Server_Account $a, $new)
    {
        {
throw new Server_Exception('Server Manager Vesta CP Error: Not Supported');
}
    }
    /**
     * Change account password on server
     * @param Server_Account $a
     * @param type $new - new password
     */
    public function changeAccountPassword(Server_Account $a, $new)
    {
        
           
        // Server credentials
$vst_username = $this->_config['username'];
$vst_password = $this->_config['password'];
$vst_command = 'v-change-user-password';
$vst_returncode = 'yes';
// Prepare POST query
$postvars = array(
    
    'returncode' => $vst_returncode,
    'cmd' => $vst_command,
    'arg1' => $a->getUsername(),
    'arg2' => $new
			
);    
// Make request and change password
$result = $this->_makeRequest($postvars);
if($result != '0'){
throw new Server_Exception('Server Manager Vesta CP Error: Change Password Account Error '.$result);
}
        
return true;
    }
    /**
     * Change account IP on server
     * @param Server_Account $a
     * @param type $new - account IP
     */
    public function changeAccountIp(Server_Account $a, $new)
    {
        
      {
throw new Server_Exception('Server Manager Vesta CP Error: Not Supported');
}
    }
}

Re: VestaCP Boxbilling Updates

Posted: Sun May 14, 2017 2:48 pm
by BBuchanan1013
best advice is to make sure you have the latest vesta.php from boxbilling. There are several out there, the best one to get imo is the one from the official boxbilling github extensions:
https://github.com/boxbilling/extensions

Re: VestaCP Boxbilling Updates

Posted: Wed May 17, 2017 8:53 pm
by thewball
Thanks so much for your reply!

I have installed that manager in the correct location and configured it correctly in BB, it connects to the server fine apparently, but I am still getting the 'Server Manager Vesta CP Error: Create Domain failure' window in BoxBilling. It seems like there is some error either when it comes to creating the user or adding the domain. Any suggestions?

Thanks for your help!

Re: VestaCP Boxbilling Updates

Posted: Fri May 26, 2017 2:37 am
by BBuchanan1013
thewball wrote:Thanks so much for your reply!

I have installed that manager in the correct location and configured it correctly in BB, it connects to the server fine apparently, but I am still getting the 'Server Manager Vesta CP Error: Create Domain failure' window in BoxBilling. It seems like there is some error either when it comes to creating the user or adding the domain. Any suggestions?

Thanks for your help!
Have you checked to see if it actually creates it in the panel? If so, there might be a difference in the api somewhere throwing it off.

Re: VestaCP Boxbilling Updates

Posted: Fri May 26, 2017 3:36 pm
by thewball
I have checked. It does not want to create the account in the control panel. Unfortunately, the way the script is written, it creates the user and the domain at once and does not throw an error if the user account is not created first. It just defaults to a 'domain error'. The account says failed setup on the BoxBilling end. Is there anything in the script that seems to be acting weirdly with the API?

Thanks for your help!

Re: VestaCP Boxbilling Updates

Posted: Tue Sep 12, 2017 1:24 am
by yosucadilla
I also have everything configured and working fine, it connects well (or so it says).
New order in BB is created but it starts as "Failed Setup". If you hit the activate button, a popup throws this error:

"Manager Vesta CP Error: Create Domain failure
Not Found
The requested URL /api/ was not found on this server."

Anyone found solution for this issue?

I'm hitting a big wall!

Re: VestaCP Boxbilling Updates

Posted: Sun Oct 01, 2017 2:26 pm
by TrK
The fact is boxbilling is not maintained anymore so the plugins are old, i am also trying to create a new plugin for boxbilling that will bridge the vestaCP api but i don't have enough time to make it happen. I might use an API wrapper to boost its progress but still i am not sure. Hopebilling does have a working module for vesta but i don't like them.