This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/modules/host/vendor/plesk.php

259 lines
7.1 KiB
PHP
Raw Normal View History

2011-12-16 23:31:35 +00:00
<?php defined('SYSPATH') or die('No direct access allowed.');
/**
* This class provides PLESK support
*
* @package OSB
* @subpackage Plugins/Plesk
* @category Plugins
* @author Deon George
* @copyright (c) 2010 Deon George
* @license http://dev.leenooks.net/license.html
*/
class Plesk {
private $protocol = '1.6.0.1';
private $path = 'enterprise/control/agent.php';
// Service Object
private $hso;
private $packet;
private $xml;
// @todo Get this out of the DB
private $permissions = array(
'cp_access'=>TRUE,
'create_domains'=>FALSE,
'manage_phosting'=>FALSE,
'manage_php_safe_mode'=>FALSE,
'manage_sh_access'=>FALSE,
'manage_not_chroot_shell'=>FALSE,
'manage_quota'=>TRUE,
'manage_subdomains'=>TRUE,
'manage_domain_aliases'=>FALSE,
'manage_log'=>TRUE,
'manage_anonftp'=>FALSE,
'manage_crontab'=>FALSE,
'change_limits'=>FALSE,
'manage_dns'=>TRUE,
'manage_webapps'=>FALSE,
'manage_webstat'=>TRUE,
'manage_maillists'=>TRUE,
'manage_spamfilter'=>FALSE,
'manage_virusfilter'=>FALSE,
'allow_local_backups'=>FALSE,
'allow_ftp_backups'=>TRUE,
'remote_access_interface'=>FALSE,
'site_builder'=>FALSE,
'manage_performance'=>FALSE,
'manage_dashboard'=>TRUE,
'select_db_server'=>FALSE,
);
// @todo Get this out of the DB
private $limits = array(
'resource-policy'=>'notify',
'max_dom'=>-1,
'max_subdom'=>-1,
'max_dom_aliases'=>-1,
'disk_space_soft'=>-1,
'disk_space'=>-1,
'max_traffic_soft'=>-1,
'max_traffic'=>-1,
'max_wu'=>-1,
'max_db'=>-1,
'max_box'=>-1,
'mbox_quota'=>51200000,
'max_redir'=>-1,
'max_mg'=>-1,
'max_resp'=>-1,
'max_maillists'=>-1,
'max_webapps'=>0,
'expiration'=>-1,
);
// @todo Get this out of the DB
private $ippool = array(
'111.67.13.20'=>'shared',
);
private $curlopts = array(
CURLOPT_CONNECTTIMEOUT => 60,
CURLOPT_FAILONERROR => TRUE,
CURLOPT_FOLLOWLOCATION => FALSE,
CURLOPT_HEADER => FALSE,
CURLOPT_HTTPPROXYTUNNEL => FALSE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYHOST => FALSE,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_VERBOSE => TRUE,
);
public function __construct(Model_Host_Server $hso) {
$this->hso = $hso;
$this->xml = XML::factory(null,'plesk');
$this->packet = $this->xml->add_node('packet','',array('version'=>$this->protocol));
}
private function server_command(XML $xml) {
$hs = $this->hso->prov_plugin_data();
2011-12-16 23:31:35 +00:00
$request = Request::factory(sprintf('%s/%s',$this->hso->manage_url,$this->path))
->method('POST');
$request->get_client()->options(Arr::merge($this->curlopts,array(
CURLOPT_HTTPHEADER => array(
'HTTP_AUTH_LOGIN: '.$hs['user'],
'HTTP_AUTH_PASSWD: '.$hs['pass'],
'Content-Type: text/xml',
),
CURLOPT_POSTFIELDS => $this->render($xml),
)));
$response = $request->execute();
return XML::factory(null,'plesk',$response->body());
}
/**
* Get a Client Configuration
*/
public function get_client(Model_Service $so) {
$client = $this->packet->add_node('client');
$get = $client->add_node('get');
$filter = $get->add_node('filter');
$filter->add_node('login',$so->plugin()->host_username);
$dataset = $get->add_node('dataset');
$dataset->add_node('gen_info');
$dataset->add_node('stat');
$dataset->add_node('permissions');
$dataset->add_node('limits');
$dataset->add_node('ippool');
return $this->server_command($this->xml);
}
/**
* Get a Server Configuration
*/
public function get_service(Model_Service $so) {
$client = $this->packet->add_node('domain');
$get = $client->add_node('get');
$filter = $get->add_node('filter');
$filter->add_node('domain-name',strtolower($so->name()));
$dataset = $get->add_node('dataset');
$dataset->add_node('hosting');
$dataset->add_node('limits');
return $this->server_command($this->xml);
}
/**
* Add a new client to the host server
*/
public function add_client(Model_Service $so) {
$client_template = 'DefaultClient';
$reseller_id = $so->affiliate->host_server_affiliate->host_username;
$client = $this->packet->add_node('client');
$add = $client->add_node('add');
$gen_info = $add->add_node('gen_info');
$gen_info->add_node('cname',$so->account->company);
$gen_info->add_node('pname',sprintf('%s %s',$so->account->first_name,$so->account->last_name));
$gen_info->add_node('login',$so->plugin()->host_username);
$gen_info->add_node('passwd',$so->plugin()->host_password);
$gen_info->add_node('status',0);
$gen_info->add_node('email',$so->account->email);
if ($reseller_id)
$gen_info->add_node('owner-login',$reseller_id);
return $this->server_command($this->xml);
}
public function add_service(Model_Service $so) {
// @todo This should come from the DB.
$host_ip = '111.67.13.20';
$domain_template = 'Default Domain';
$domain = $this->packet->add_node('domain');
$add = $domain->add_node('add');
$gen_setup = $add->add_node('gen_setup');
$gen_setup->add_node('name',strtolower($so->name()));
$gen_setup->add_node('owner-login',$so->plugin()->host_username);
$gen_setup->add_node('htype','vrt_hst');
$gen_setup->add_node('ip_address',$host_ip);
$gen_setup->add_node('status','0');
$hosting = $add->add_node('hosting');
$vrt_host = $hosting->add_node('vrt_hst');
$property = $vrt_host->add_node('property');
$property->add_node('name','ftp_login');
$property->add_node('value',$so->plugin()->ftp_username);
$property = $vrt_host->add_node('property');
$property->add_node('name','ftp_password');
$property->add_node('value',$so->plugin()->ftp_password);
$vrt_host->add_node('ip_address',$host_ip);
$add->add_node('template-name',$domain_template);
return $this->server_command($this->xml);
}
// @todo not sure if this is actually working as desired
public function setlimits(Model_Service $so) {
$client = $this->packet->add_node('client');
// Permissions
$set = $client->add_node('set');
$filter = $set->add_node('filter');
$filter->add_node('login',$so->plugin()->host_username);
$values = $set->add_node('values');
$x = $values->add_node('permissions');
foreach ($this->permissions as $k=>$v) {
$l = $x->add_node('permission');
$l->add_node('name',$k);
$l->add_node('value',$v==TRUE?'true':'false');
}
// Limits
$set = $client->add_node('set');
$filter = $set->add_node('filter');
$filter->add_node('login',$so->plugin()->host_username);
$values = $set->add_node('values');
$x = $values->add_node('limits');
foreach ($this->limits as $k=>$v) {
$l = $x->add_node('limit');
$l->add_node('name',$k);
$l->add_node('value',$v);
}
return $this->server_command($this->xml);
}
public function setip($id) {
$client = $this->packet->add_node('client');
$ip = $client->add_node('ippool_add_ip');
$ip->add_node('client_id',$id);
foreach ($this->ippool as $k=>$v)
$ip->add_node('ip_address',$k);
return $this->server_command($this->xml);
}
public function disablemail($id) {
$client = $this->packet->add_node('mail');
$disable = $client->add_node('disable');
$disable->add_node('domain_id',$id);
return $this->server_command($this->xml);
}
private function render(XML $xml) {
return preg_replace('/<\/?plesk>/','',(string)$xml->render(FALSE));
}
}
?>