Working on HOST SERVER and improvements to ORMOSB
This commit is contained in:
parent
f50bea38a3
commit
a0e1714358
@ -24,6 +24,10 @@ class lnApp_Block extends HTMLRender {
|
|||||||
* @param array Block attributes
|
* @param array Block attributes
|
||||||
*/
|
*/
|
||||||
public static function add($block,$prepend=FALSE) {
|
public static function add($block,$prepend=FALSE) {
|
||||||
|
// Any body objects should be converted to a string, so that any calls to Style/Script are processed
|
||||||
|
if (isset($block['body']))
|
||||||
|
$block['body'] = (string)$block['body'];
|
||||||
|
|
||||||
parent::add($block);
|
parent::add($block);
|
||||||
|
|
||||||
// Detect any style sheets.
|
// Detect any style sheets.
|
||||||
|
@ -15,6 +15,7 @@ class lnApp_Script extends HTMLRender {
|
|||||||
protected static $_spacer = "\n";
|
protected static $_spacer = "\n";
|
||||||
protected static $_required_keys = array('type','data');
|
protected static $_required_keys = array('type','data');
|
||||||
protected static $_unique_vals = array('file'=>'type');
|
protected static $_unique_vals = array('file'=>'type');
|
||||||
|
protected static $_rendered = FALSE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an instance of this class
|
* Return an instance of this class
|
||||||
@ -47,7 +48,15 @@ class lnApp_Script extends HTMLRender {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static::$_rendered = TRUE;
|
||||||
return $foutput.static::$_spacer.$soutput;
|
return $foutput.static::$_spacer.$soutput;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function add($item,$prepend=FALSE,$x='') {
|
||||||
|
if (static::$_rendered)
|
||||||
|
throw new Kohana_Exception('Already rendered?');
|
||||||
|
|
||||||
|
return parent::add($item,$prepend);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@ -96,18 +96,6 @@ abstract class ORMOSB extends ORM {
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo Change this to be called by array_blob functions
|
|
||||||
public static function serialize_array(ORM $model,$field,$value) {
|
|
||||||
if (is_null($value))
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
if (! is_array($value))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
$model->_changed[$field] = $field;
|
|
||||||
$model->$field = serialize($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function __get($column) {
|
public function __get($column) {
|
||||||
if (array_key_exists($column,$this->_table_columns)) {
|
if (array_key_exists($column,$this->_table_columns)) {
|
||||||
|
|
||||||
@ -166,15 +154,20 @@ abstract class ORMOSB extends ORM {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function save(Validation $validation = NULL) {
|
public function save(Validation $validation = NULL) {
|
||||||
// Find any fields that have changed, and that are blobs, and encode them.
|
// Find any fields that have changed, and process them.
|
||||||
if ($this->_changed)
|
if ($this->_changed)
|
||||||
foreach ($this->_changed as $c)
|
foreach ($this->_changed as $c)
|
||||||
|
// Any fields that are blobs, and encode them.
|
||||||
if ($this->_table_columns[$c]['data_type'] == 'blob') {
|
if ($this->_table_columns[$c]['data_type'] == 'blob') {
|
||||||
$this->_object[$c] = $this->blob($this->_object[$c],TRUE);
|
$this->_object[$c] = $this->blob($this->_object[$c],TRUE);
|
||||||
|
|
||||||
// We need to reset our auto_convert flag
|
// We need to reset our auto_convert flag
|
||||||
if (isset($this->_table_columns[$c]['auto_convert']))
|
if (isset($this->_table_columns[$c]['auto_convert']))
|
||||||
$this->_table_columns[$c]['auto_convert'] = FALSE;
|
$this->_table_columns[$c]['auto_convert'] = FALSE;
|
||||||
|
|
||||||
|
// Any fields that should be seriailzed, we'll do that.
|
||||||
|
} elseif (is_array($this->_object[$c]) AND in_array($c,$this->_serialize_column)) {
|
||||||
|
$this->_object[$c] = serialize($this->_object[$c]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return parent::save($validation);
|
return parent::save($validation);
|
||||||
|
@ -13,6 +13,9 @@
|
|||||||
class Model_Charge extends ORMOSB {
|
class Model_Charge extends ORMOSB {
|
||||||
// Charge doesnt use the update column
|
// Charge doesnt use the update column
|
||||||
protected $_updated_column = FALSE;
|
protected $_updated_column = FALSE;
|
||||||
|
protected $_serialize_column = array(
|
||||||
|
'attributes',
|
||||||
|
);
|
||||||
|
|
||||||
protected $_belongs_to = array(
|
protected $_belongs_to = array(
|
||||||
'account'=>array(),
|
'account'=>array(),
|
||||||
@ -27,14 +30,6 @@ class Model_Charge extends ORMOSB {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
public function rules() {
|
|
||||||
return array_merge(parent::rules(),array(
|
|
||||||
'attributes'=>array(
|
|
||||||
array('ORMOSB::serialize_array',array(':model',':field',':value')),
|
|
||||||
),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render some details for specific calls, eg: invoice
|
* Render some details for specific calls, eg: invoice
|
||||||
*/
|
*/
|
||||||
|
@ -11,13 +11,9 @@
|
|||||||
* @license http://dev.osbill.net/license.html
|
* @license http://dev.osbill.net/license.html
|
||||||
*/
|
*/
|
||||||
class Model_Export extends ORMOSB {
|
class Model_Export extends ORMOSB {
|
||||||
public function rules() {
|
protected $_serialize_column = array(
|
||||||
return array_merge(parent::rules(),array(
|
'map_data',
|
||||||
'map_data'=>array(
|
);
|
||||||
array('ORMOSB::serialize_array',array(':model',':field',':value')),
|
|
||||||
),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function list_itemsnoexport() {
|
public function list_itemsnoexport() {
|
||||||
$result = array();
|
$result = array();
|
||||||
|
79
modules/host/classes/controller/admin/host.php
Normal file
79
modules/host/classes/controller/admin/host.php
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||||
|
/**
|
||||||
|
* This class provides Host Server functions
|
||||||
|
*
|
||||||
|
* @package OSB
|
||||||
|
* @subpackage HostServer
|
||||||
|
* @category Controllers/Admin
|
||||||
|
* @author Deon George
|
||||||
|
* @copyright (c) 2010 Deon George
|
||||||
|
* @license http://dev.leenooks.net/license.html
|
||||||
|
*/
|
||||||
|
class Controller_Admin_Host extends Controller_TemplateDefault_Admin {
|
||||||
|
protected $secure_actions = array(
|
||||||
|
'ajaxmanage'=>TRUE,
|
||||||
|
'list'=>TRUE,
|
||||||
|
'update'=>TRUE,
|
||||||
|
);
|
||||||
|
|
||||||
|
public function action_ajaxmanage() {
|
||||||
|
$this->auto_render = FALSE;
|
||||||
|
|
||||||
|
$hso = ORM::factory('host_server',$this->request->param('id'));
|
||||||
|
$k = Session::instance()->get_once('manage_button');
|
||||||
|
|
||||||
|
$o = array(
|
||||||
|
'u'=>$hso->manage_username ? $hso->manage_username : strtolower($hso->name),
|
||||||
|
'p'=>(! $k OR ! $this->request->is_ajax() OR ! $hso->loaded() OR ! isset($_REQUEST['k']) OR $k != $_REQUEST['k']) ? Random::char() : $hso->manage_password,
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->response->headers('Content-Type','application/json');
|
||||||
|
$this->response->body(json_encode($o));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a list of hosting servers
|
||||||
|
*/
|
||||||
|
public function action_list() {
|
||||||
|
Block::add(array(
|
||||||
|
'title'=>_('Customer Services'),
|
||||||
|
'body'=>Table::display(
|
||||||
|
ORM::factory('host_server')->find_all(),
|
||||||
|
25,
|
||||||
|
array(
|
||||||
|
'id'=>array('label'=>'ID','url'=>'admin/host/update/'),
|
||||||
|
'name'=>array('label'=>'Details'),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'page'=>TRUE,
|
||||||
|
'type'=>'select',
|
||||||
|
'form'=>'admin/host/update/',
|
||||||
|
)),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function action_update() {
|
||||||
|
$hso = ORM::factory('host_server',$this->request->param('id'));
|
||||||
|
$output = '';
|
||||||
|
|
||||||
|
if (! $hso->loaded())
|
||||||
|
Request::current()->redirect('welcome/index');
|
||||||
|
|
||||||
|
if ($_POST) {
|
||||||
|
$hso->values($_POST);
|
||||||
|
|
||||||
|
if ($hso->changed() AND ! $hso->save())
|
||||||
|
throw new Kohana_Exception('Unable to save record?');
|
||||||
|
}
|
||||||
|
|
||||||
|
$output .= View::factory($this->viewpath())
|
||||||
|
->set('hso',$hso)
|
||||||
|
->set('plugin_form',$hso->admin_update());
|
||||||
|
|
||||||
|
Block::add(array(
|
||||||
|
'title'=>sprintf('%s %s:%s',_('Update Host Server'),$hso->id,$hso->name),
|
||||||
|
'body'=>$output,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -10,9 +10,8 @@
|
|||||||
* @license http://dev.leenooks.net/license.html
|
* @license http://dev.leenooks.net/license.html
|
||||||
*/
|
*/
|
||||||
class Controller_Task_Host extends Controller_Task {
|
class Controller_Task_Host extends Controller_Task {
|
||||||
// Host Server Object
|
private $so; // Service Object
|
||||||
private $hs;
|
private $hpo; //Host Server Object
|
||||||
private $so;
|
|
||||||
|
|
||||||
public function __construct(Request $request, Response $response) {
|
public function __construct(Request $request, Response $response) {
|
||||||
parent::__construct($request,$response);
|
parent::__construct($request,$response);
|
||||||
@ -21,6 +20,7 @@ class Controller_Task_Host extends Controller_Task {
|
|||||||
switch (Request::current()->action()) {
|
switch (Request::current()->action()) {
|
||||||
case 'getclient':
|
case 'getclient':
|
||||||
case 'getdomain':
|
case 'getdomain':
|
||||||
|
case 'getreseller':
|
||||||
case 'gettraffic':
|
case 'gettraffic':
|
||||||
case 'provision':
|
case 'provision':
|
||||||
$this->so = ORM::factory('service',$this->request->param('id'));
|
$this->so = ORM::factory('service',$this->request->param('id'));
|
||||||
@ -28,8 +28,7 @@ class Controller_Task_Host extends Controller_Task {
|
|||||||
if (! $this->so->loaded())
|
if (! $this->so->loaded())
|
||||||
throw new Kohana_Exception('Unknown service :sid',array(':sid'=>$this->request->param('id')));
|
throw new Kohana_Exception('Unknown service :sid',array(':sid'=>$this->request->param('id')));
|
||||||
|
|
||||||
$hso = $this->so->plugin()->host_server;
|
$this->hpo = $this->so->plugin()->host_server->plugin();
|
||||||
$this->hs = new $hso->provision_plugin($hso);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -50,57 +49,63 @@ class Controller_Task_Host extends Controller_Task {
|
|||||||
return $p->save();
|
return $p->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function verify($index,$result,$save=TRUE) {
|
||||||
|
$p = $this->so->plugin();
|
||||||
|
|
||||||
|
if (! isset($p->server_data[$p->host_server_id][$index]) OR (md5($p->server_data[$p->host_server_id][$index]) != md5(serialize($result)))) {
|
||||||
|
if ($save)
|
||||||
|
$this->save('c',$result);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
} else
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Client Details from Host Server
|
* Get Client Details from Host Server
|
||||||
*/
|
*/
|
||||||
public function action_getclient() {
|
public function action_getclient() {
|
||||||
$result = $this->hs->cmd_getclient($this->so);
|
$result = $this->hpo->cmd_getclient($this->so);
|
||||||
$p = $this->so->plugin();
|
|
||||||
|
|
||||||
if ($result->loaded()) {
|
if ($result->loaded())
|
||||||
if (! isset($p->server_data[$p->host_server_id]['c']) OR (md5($p->server_data[$p->host_server_id]['c']) != md5(serialize($result)))) {
|
$this->verify('c',$result);
|
||||||
echo "WARNING: data changed on server";
|
|
||||||
$this->save('c',$result);
|
|
||||||
} else
|
|
||||||
echo "NOTE: data same on server";
|
|
||||||
|
|
||||||
} else
|
print_r($result);
|
||||||
print_r($result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Client Details from Host Server
|
* Get Client Details from Host Server
|
||||||
*/
|
*/
|
||||||
public function action_getdomain() {
|
public function action_getdomain() {
|
||||||
$result = $this->hs->cmd_getdomain($this->so);
|
$result = $this->hpo->cmd_getdomain($this->so);
|
||||||
$p = $this->so->plugin();
|
|
||||||
|
|
||||||
if ($result->loaded()) {
|
if ($result->loaded())
|
||||||
if (! isset($p->server_data[$p->host_server_id]['d']) OR (md5($p->server_data[$p->host_server_id]['d']) != md5(serialize($result)))) {
|
$this->verify('d',$result);
|
||||||
echo "WARNING: data changed on server";
|
|
||||||
$this->save('d',$result);
|
|
||||||
} else
|
|
||||||
echo "NOTE: data same on server";
|
|
||||||
|
|
||||||
} else
|
print_r($result);
|
||||||
print_r($result);
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Reseller
|
||||||
|
*/
|
||||||
|
public function action_getreseller() {
|
||||||
|
$result = $this->hpo->cmd_getreseller($this->so);
|
||||||
|
|
||||||
|
print_r($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Domain Traffic
|
* Get Domain Traffic
|
||||||
*/
|
*/
|
||||||
public function action_gettraffic() {
|
public function action_gettraffic() {
|
||||||
$sid = $this->request->param('id');
|
$result = $this->hpo->cmd_gettraffic($this->so);
|
||||||
|
|
||||||
$result = $this->hs->cmd_gettraffic(ORM::factory('service',$sid));
|
print_r($result);
|
||||||
if ($result->gen_info)
|
|
||||||
print_r($result->gen_info->as_array());
|
|
||||||
else
|
|
||||||
print_r((string)$result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List services that need to be provisioned
|
* List services that need to be provisioned
|
||||||
|
* @todo This needs to be reviewed for functionality
|
||||||
*/
|
*/
|
||||||
public function action_provisionlist() {
|
public function action_provisionlist() {
|
||||||
$mode = $this->request->param('id');
|
$mode = $this->request->param('id');
|
||||||
@ -117,7 +122,7 @@ class Controller_Task_Host extends Controller_Task {
|
|||||||
if (! $so->product->avail_category OR ! preg_match('/^a:/',$so->product->avail_category))
|
if (! $so->product->avail_category OR ! preg_match('/^a:/',$so->product->avail_category))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
$pc = unserialize($so->product->avail_category);
|
$pc = unserialize($so->product->avail_category);
|
||||||
|
|
||||||
if (! array_intersect($pc,array_keys($cats)))
|
if (! array_intersect($pc,array_keys($cats)))
|
||||||
continue;
|
continue;
|
||||||
@ -137,37 +142,11 @@ class Controller_Task_Host extends Controller_Task {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a domain for the client
|
* Provision a Hosting Service
|
||||||
*
|
|
||||||
* @param int $id Hosting ID (in OSB)
|
|
||||||
* @return unknown_type
|
|
||||||
*/
|
*/
|
||||||
public function action_provision() {
|
public function action_provision() {
|
||||||
$sid = $this->request->param('id');
|
$result = $this->hpo->provision($this->so);
|
||||||
$so = ORM::factory('service',$sid);
|
|
||||||
|
|
||||||
// Provision Account
|
|
||||||
// @todo Need a test to see if an account alerady exists.
|
|
||||||
/*
|
|
||||||
$result = $this->hs->add_client($so);
|
|
||||||
print_r((string)$result);
|
print_r((string)$result);
|
||||||
|
|
||||||
// Next need to get the ID from the account call to set the IP
|
|
||||||
$result = $this->hs->setip(35); // @todo change this number
|
|
||||||
print_r((string)$result);
|
|
||||||
|
|
||||||
// Provision Domain
|
|
||||||
$result = $this->hs->add_service($so);
|
|
||||||
print_r((string)$result);
|
|
||||||
|
|
||||||
// Set Limits
|
|
||||||
$result = $this->hs->setlimits($so);
|
|
||||||
print_r((string)$result);
|
|
||||||
|
|
||||||
// Next need to get the ID for the domain to disable mail
|
|
||||||
$result = $this->hs->disablemail(43);
|
|
||||||
print_r((string)$result);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
61
modules/host/classes/host/plugin.php
Normal file
61
modules/host/classes/host/plugin.php
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides HOST Plugin Support
|
||||||
|
*
|
||||||
|
* @package OSB
|
||||||
|
* @subpackage Host Plugins
|
||||||
|
* @category Plugins
|
||||||
|
* @author Deon George
|
||||||
|
* @copyright (c) 2010 Deon George
|
||||||
|
* @license http://dev.leenooks.net/license.html
|
||||||
|
*/
|
||||||
|
abstract class Host_Plugin implements Serializable {
|
||||||
|
protected $hso; // Our Host Serve Object
|
||||||
|
protected $_object;
|
||||||
|
|
||||||
|
protected $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 => FALSE,
|
||||||
|
);
|
||||||
|
|
||||||
|
public function serialize() {
|
||||||
|
return serialize($this->_object);
|
||||||
|
}
|
||||||
|
public function unserialize($s) {
|
||||||
|
$this->_object = unserialize($s);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __get($key) {
|
||||||
|
return isset($this->_object[$key]) ? $this->_object[$key] : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Required abstract classes
|
||||||
|
abstract public function admin_update();
|
||||||
|
|
||||||
|
abstract public function manage_button(Model_Service_Plugin_Host $spho,$t);
|
||||||
|
abstract public function admin_manage_button(Model_Host_Server $hso,$t);
|
||||||
|
abstract protected function render_button($t,$sid,$u,$p);
|
||||||
|
|
||||||
|
public function __construct(Model_Host_Server $hso) {
|
||||||
|
$this->hso = $hso;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function value($key,$value=NULL) {
|
||||||
|
// If value is NULL, we are a getter
|
||||||
|
if (is_null($value))
|
||||||
|
return isset($this->hso->provision_plugin_data[$key]) ? $this->hso->provision_plugin_data[$key] : NULL;
|
||||||
|
else
|
||||||
|
$this->hso->provision_plugin_data[$key] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
126
modules/host/classes/host/plugin/plesk.php
Normal file
126
modules/host/classes/host/plugin/plesk.php
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
<?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
|
||||||
|
*/
|
||||||
|
abstract class Host_Plugin_Plesk extends Host_Plugin {
|
||||||
|
// Service Object
|
||||||
|
protected $protocol = '1.6.0.0';
|
||||||
|
protected $path = 'enterprise/control/agent.php';
|
||||||
|
protected $packet;
|
||||||
|
protected $xml;
|
||||||
|
private $_loaded;
|
||||||
|
|
||||||
|
// Manage UI Login Attributes
|
||||||
|
protected $url = 'login_up.php3';
|
||||||
|
protected $login_acnt_field = '';
|
||||||
|
protected $login_user_field = 'login_name';
|
||||||
|
protected $login_pass_field = 'passwd';
|
||||||
|
|
||||||
|
// Our required abstract classes
|
||||||
|
public function admin_update() {
|
||||||
|
return View::factory('host/admin/plugin/plesk')
|
||||||
|
->set('o',$this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function manage_button(Model_Service_Plugin_Host $spho,$t) {
|
||||||
|
return $this->render_button($t,$spho->service_id,$spho->username_value(),substr(md5($spho->password_value()),0,8));
|
||||||
|
}
|
||||||
|
public function admin_manage_button(Model_Host_Server $hso,$t) {
|
||||||
|
return $this->render_button($t,$hso->id,substr(md5($hso->manage_username),0,8),substr(md5($hso->manage_password),0,8));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function render_button($t,$sid,$u,$p) {
|
||||||
|
$debug = FALSE;
|
||||||
|
$output = '';
|
||||||
|
|
||||||
|
$output .= Form::open(
|
||||||
|
$debug ? 'debug/site' : sprintf('%s/%s',$this->hso->manage_url,$this->url),
|
||||||
|
array('target'=>'w24','method'=>'post','id'=>sprintf('id_%s_%s',$sid,$t))
|
||||||
|
);
|
||||||
|
$output .= Form::input($this->login_user_field,$u,array('type'=>'hidden','id'=>sprintf('u_%s_%s',$sid,$t)));
|
||||||
|
$output .= Form::input($this->login_pass_field,$p,array('type'=>'hidden','id'=>sprintf('p_%s_%s',$sid,$t)));
|
||||||
|
$output .= Form::close();
|
||||||
|
$output .= Form::button('submit',_('Manage'),array('class'=>'form_button','value'=>sprintf('%s:%s',$sid,$t)));
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function init() {
|
||||||
|
$this->_loaded = FALSE;
|
||||||
|
$this->xml = XML::factory(null,'plesk');
|
||||||
|
$this->packet = $this->xml->add_node('packet','',array('version'=>$this->protocol));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function server_command(XML $xml) {
|
||||||
|
// We need to find out the command key, so we can get the status result.
|
||||||
|
if (count($a=array_keys($xml->packet->as_array())) != 1)
|
||||||
|
throw new Kohana_Exception('XML command malformed? :xml',array(':xml'=>(string)$xml));
|
||||||
|
$key = array_shift($a);
|
||||||
|
if (count($a=array_keys($xml->packet->$key->as_array())) != 1)
|
||||||
|
throw new Kohana_Exception('XML command malformed? :xml',array(':xml'=>(string)$xml));
|
||||||
|
$get = array_shift($a);
|
||||||
|
|
||||||
|
$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: '.$this->hso->manage_username,
|
||||||
|
'HTTP_AUTH_PASSWD: '.$this->hso->manage_password,
|
||||||
|
'Content-Type: text/xml',
|
||||||
|
),
|
||||||
|
CURLOPT_POSTFIELDS => $this->render($xml),
|
||||||
|
)));
|
||||||
|
|
||||||
|
$response = $request->execute();
|
||||||
|
|
||||||
|
$result = XML::factory(null,'plesk',$response->body());
|
||||||
|
|
||||||
|
if ($result->status->value() == 'ok')
|
||||||
|
$this->_loaded = TRUE;
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function collapse(XML $xml) {
|
||||||
|
$result = array();
|
||||||
|
|
||||||
|
foreach ($xml->as_array() as $j=>$k) {
|
||||||
|
$v = $xml->$j->value();
|
||||||
|
|
||||||
|
if (count($k) > 1) {
|
||||||
|
foreach ($xml->get($j,1) as $k)
|
||||||
|
if (isset($k['name'][0]))
|
||||||
|
$result[$j][$k['name'][0]] = (isset($k['value'][0]) ? $k['value'][0] : '');
|
||||||
|
else
|
||||||
|
$result[$j][] = $k;
|
||||||
|
|
||||||
|
} elseif (! is_null($v))
|
||||||
|
$result[$j] = $v;
|
||||||
|
else
|
||||||
|
$result[$j] = $this->collapse($xml->$j);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (array_key_exists('name',$result) AND array_key_exists('value',$result))
|
||||||
|
$result = array($result['name']=>$result['value']);
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function loaded() {
|
||||||
|
return $this->_loaded;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function render(XML $xml) {
|
||||||
|
return preg_replace('/<\/?plesk>/','',(string)$xml->render(FALSE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
246
modules/host/classes/host/plugin/plesk/10.php
Normal file
246
modules/host/classes/host/plugin/plesk/10.php
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides PLESK client support
|
||||||
|
*
|
||||||
|
* @package OSB
|
||||||
|
* @subpackage Plugins/Plesk
|
||||||
|
* @category Plugins
|
||||||
|
* @author Deon George
|
||||||
|
* @copyright (c) 2010 Deon George
|
||||||
|
* @license http://dev.leenooks.net/license.html
|
||||||
|
*/
|
||||||
|
class Host_Plugin_Plesk_10 extends Host_Plugin_Plesk {
|
||||||
|
protected $protocol = '1.6.3.0';
|
||||||
|
private $_loaded = FALSE;
|
||||||
|
|
||||||
|
// @todo Get these default "templates" values out of the DB
|
||||||
|
private $_template = array(
|
||||||
|
'client'=>array(
|
||||||
|
'gen_info'=>array(),
|
||||||
|
'stat'=>array(),
|
||||||
|
),
|
||||||
|
'domain'=>array(
|
||||||
|
'gen_info'=>array(),
|
||||||
|
'hosting'=>array(),
|
||||||
|
'limits'=>array(),
|
||||||
|
'stat'=>array(),
|
||||||
|
'prefs'=>array(),
|
||||||
|
'disk_usage'=>array(),
|
||||||
|
'performance'=>array(),
|
||||||
|
'subscriptions'=>array(),
|
||||||
|
'permissions'=>array(),
|
||||||
|
#'plan-items'=>array(), // protocol 1.6.3.1
|
||||||
|
),
|
||||||
|
'reseller'=>array(
|
||||||
|
'gen-info'=>array(),
|
||||||
|
'stat'=>array(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a Client Configuration
|
||||||
|
*/
|
||||||
|
public function cmd_getclient(Model_Service $so) {
|
||||||
|
$this->init();
|
||||||
|
$items = array_keys($this->_template['client']);
|
||||||
|
|
||||||
|
$client = $this->packet->add_node('customer');
|
||||||
|
$get = $client->add_node('get');
|
||||||
|
$filter = $get->add_node('filter');
|
||||||
|
$filter->add_node('login',$so->plugin()->host_account);
|
||||||
|
$dataset = $get->add_node('dataset');
|
||||||
|
foreach ($items as $k)
|
||||||
|
$dataset->add_node($k);
|
||||||
|
|
||||||
|
$result = $this->server_command($this->xml);
|
||||||
|
|
||||||
|
if (! $this->loaded())
|
||||||
|
throw new Kohana_Exception('Unable to get PLESK Client data - Error :error',array(':error'=>(string)$result));
|
||||||
|
|
||||||
|
$this->_object['id'] = $result->id->value();
|
||||||
|
foreach ($items as $k)
|
||||||
|
foreach ($result->get($k) as $a=>$b)
|
||||||
|
$this->_object[$k] = $this->collapse($b);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a Domain Configuration
|
||||||
|
*/
|
||||||
|
public function cmd_getdomain(Model_Service $so) {
|
||||||
|
$this->init();
|
||||||
|
$items = array_keys($this->_template['domain']);
|
||||||
|
|
||||||
|
$domain = $this->packet->add_node('webspace');
|
||||||
|
$get = $domain->add_node('get');
|
||||||
|
$filter = $get->add_node('filter');
|
||||||
|
$filter->add_node('name',strtolower($so->plugin()->name()));
|
||||||
|
$dataset = $get->add_node('dataset');
|
||||||
|
foreach ($items as $k)
|
||||||
|
$dataset->add_node($k);
|
||||||
|
|
||||||
|
$result = $this->server_command($this->xml);
|
||||||
|
|
||||||
|
if (! $this->loaded())
|
||||||
|
throw new Kohana_Exception('Unable to get PLESK Domain data - Error :error',array(':error'=>(string)$result));
|
||||||
|
|
||||||
|
$this->_object['id'] = $result->id->value();
|
||||||
|
foreach ($items as $k)
|
||||||
|
foreach ($result->get($k) as $a=>$b)
|
||||||
|
$this->_object[$k] = $this->collapse($b);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Reseller
|
||||||
|
*/
|
||||||
|
public function cmd_getreseller(Model_Service $so) {
|
||||||
|
$this->init();
|
||||||
|
$items = array_keys($this->_template['reseller']);
|
||||||
|
|
||||||
|
$hsao = ORM::factory('host_server_affiliate',array('affiliate_id'=>$so->affiliate_id,'host_server_id'=>$so->plugin()->host_server_id))->find();
|
||||||
|
|
||||||
|
if (! $hsao->loaded())
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
$domain = $this->packet->add_node('reseller');
|
||||||
|
$get = $domain->add_node('get');
|
||||||
|
$filter = $get->add_node('filter');
|
||||||
|
$filter->add_node('login',strtolower($hsao->host_username));
|
||||||
|
$dataset = $get->add_node('dataset');
|
||||||
|
foreach ($items as $k)
|
||||||
|
$dataset->add_node($k);
|
||||||
|
|
||||||
|
$result = $this->server_command($this->xml);
|
||||||
|
|
||||||
|
if (! $this->loaded())
|
||||||
|
throw new Kohana_Exception('Unable to get PLESK Reseller data - Error :error',array(':error'=>(string)$result));
|
||||||
|
|
||||||
|
$this->_object['id'] = $result->id->value();
|
||||||
|
foreach ($items as $k)
|
||||||
|
foreach ($result->get($k) as $a=>$b)
|
||||||
|
$this->_object[$k] = $this->collapse($b);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Domain Traffic
|
||||||
|
*/
|
||||||
|
public function cmd_gettraffic(Model_Service $so) {
|
||||||
|
throw new Kohana_Exception('Not Implemented');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provision a hosting service
|
||||||
|
* @todo To implement
|
||||||
|
*/
|
||||||
|
public function provision(Model_Service $so) {
|
||||||
|
/*
|
||||||
|
$ro = $this->cmd_getreseller($so);
|
||||||
|
|
||||||
|
// Make sure our reseller exists
|
||||||
|
if ($ro AND ! $ro->id)
|
||||||
|
throw new Kohana_Exception('Add Reseller - Not Implemented');
|
||||||
|
|
||||||
|
$result = $this->add_client($so);
|
||||||
|
if (! $result->loaded())
|
||||||
|
throw new Kohana_Exception('Failed to Add Client?');
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Provision Domain
|
||||||
|
$result = $this->add_domain($so);
|
||||||
|
if (! $this->loaded())
|
||||||
|
throw new Kohana_Exception('Failed to Add Domain?');
|
||||||
|
|
||||||
|
print_r(array('r'=>(string)$result,'t'=>$this));
|
||||||
|
|
||||||
|
// Create Client Account
|
||||||
|
throw new Kohana_Exception('Not Implemented');
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
// Next need to get the ID from the account call to set the IP
|
||||||
|
$result = $this->hs->setip(35); // @todo change this number
|
||||||
|
print_r((string)$result);
|
||||||
|
|
||||||
|
|
||||||
|
// Set Limits
|
||||||
|
$result = $this->hs->setlimits($so);
|
||||||
|
print_r((string)$result);
|
||||||
|
|
||||||
|
// Next need to get the ID for the domain to disable mail
|
||||||
|
$result = $this->hs->disablemail(43);
|
||||||
|
print_r((string)$result);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
public function add_client(Model_Service $so) {
|
||||||
|
$ro = $this->cmd_getreseller($so);
|
||||||
|
|
||||||
|
$this->init();
|
||||||
|
$client = $this->packet->add_node('customer');
|
||||||
|
$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_account);
|
||||||
|
$gen_info->add_node('passwd',$so->plugin()->host_password);
|
||||||
|
|
||||||
|
$gen_info->add_node('status',0);
|
||||||
|
$gen_info->add_node('email',$so->account->email);
|
||||||
|
|
||||||
|
if ($ro->id)
|
||||||
|
$gen_info->add_node('owner-id',$ro->id);
|
||||||
|
|
||||||
|
$result = $this->server_command($this->xml);
|
||||||
|
|
||||||
|
if (! $this->loaded())
|
||||||
|
throw new Kohana_Exception('Unable to add PLESK Client - Error :error',array(':error'=>(string)$result));
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function add_domain(Model_Service $so) {
|
||||||
|
$plan = 'Default Domain';
|
||||||
|
$co = $this->cmd_getclient($so);
|
||||||
|
$ip = '223.27.16.147'; //@todo Get from other means.
|
||||||
|
|
||||||
|
if (! $co->loaded())
|
||||||
|
throw new Kohana_Exception('Unable to load Plesk Customer?');
|
||||||
|
|
||||||
|
$this->init();
|
||||||
|
$domain = $this->packet->add_node('webspace');
|
||||||
|
$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-id',$co->id);
|
||||||
|
$gen_setup->add_node('htype','vrt_hst');
|
||||||
|
$gen_setup->add_node('ip_address',$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',$ip);
|
||||||
|
|
||||||
|
$add->add_node('plan-name',$plan);
|
||||||
|
|
||||||
|
$result = $this->server_command($this->xml);
|
||||||
|
|
||||||
|
if (! $this->loaded())
|
||||||
|
throw new Kohana_Exception('Unable to add PLESK Domain - Error :error',array(':error'=>(string)$result));
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
318
modules/host/classes/host/plugin/plesk/9.php
Normal file
318
modules/host/classes/host/plugin/plesk/9.php
Normal file
@ -0,0 +1,318 @@
|
|||||||
|
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides PLESK client support
|
||||||
|
*
|
||||||
|
* @package OSB
|
||||||
|
* @subpackage Plugins/Plesk
|
||||||
|
* @category Plugins
|
||||||
|
* @author Deon George
|
||||||
|
* @copyright (c) 2010 Deon George
|
||||||
|
* @license http://dev.leenooks.net/license.html
|
||||||
|
*/
|
||||||
|
class Host_Plugin_Plesk_9 extends Host_Plugin_Plesk {
|
||||||
|
protected $protocol = '1.6.0.1';
|
||||||
|
private $_loaded = FALSE;
|
||||||
|
|
||||||
|
// @todo Get these default "templates" values out of the DB
|
||||||
|
private $_template = array(
|
||||||
|
'client'=>array(
|
||||||
|
'gen_info'=>array(),
|
||||||
|
'stat'=>array(),
|
||||||
|
'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,
|
||||||
|
),
|
||||||
|
'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,
|
||||||
|
),
|
||||||
|
'ippool' => array(
|
||||||
|
'223.27.16.147'=>'shared',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'domain'=>array(
|
||||||
|
'gen_info'=>array(),
|
||||||
|
'hosting'=>array(),
|
||||||
|
'limits'=>array(),
|
||||||
|
'user'=>array(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a Client Configuration
|
||||||
|
*/
|
||||||
|
public function cmd_getclient(Model_Service $so) {
|
||||||
|
$this->init();
|
||||||
|
$items = array_keys($this->_template['client']);
|
||||||
|
|
||||||
|
$client = $this->packet->add_node('client');
|
||||||
|
$get = $client->add_node('get');
|
||||||
|
$filter = $get->add_node('filter');
|
||||||
|
$filter->add_node('login',$so->plugin()->host_account);
|
||||||
|
$dataset = $get->add_node('dataset');
|
||||||
|
foreach ($items as $k)
|
||||||
|
$dataset->add_node($k);
|
||||||
|
|
||||||
|
$result = $this->server_command($this->xml);
|
||||||
|
|
||||||
|
if (! $this->loaded())
|
||||||
|
throw new Kohana_Exception('Unable to get PLESK Client data - Error :error',array(':error'=>(string)$result));
|
||||||
|
|
||||||
|
foreach ($items as $k)
|
||||||
|
foreach ($result->get($k) as $a=>$b)
|
||||||
|
$this->_object[$k] = $this->collapse($b);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a Domain Configuration
|
||||||
|
*/
|
||||||
|
public function cmd_getdomain(Model_Service $so) {
|
||||||
|
$this->init();
|
||||||
|
$items = array_keys($this->_template['domain']);
|
||||||
|
|
||||||
|
$domain = $this->packet->add_node('domain');
|
||||||
|
$get = $domain->add_node('get');
|
||||||
|
$filter = $get->add_node('filter');
|
||||||
|
$filter->add_node('domain-name',strtolower($so->plugin()->name()));
|
||||||
|
$dataset = $get->add_node('dataset');
|
||||||
|
foreach ($items as $k)
|
||||||
|
$dataset->add_node($k);
|
||||||
|
|
||||||
|
$result = $this->server_command($this->xml);
|
||||||
|
|
||||||
|
if (! $this->loaded())
|
||||||
|
throw new Kohana_Exception('Unable to get PLESK Domain data - Error :error',array(':error'=>(string)$result));
|
||||||
|
|
||||||
|
foreach ($items as $k)
|
||||||
|
foreach ($result->get($k) as $a=>$b)
|
||||||
|
$this->_object[$k] = $this->collapse($b);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Domain Traffic
|
||||||
|
*/
|
||||||
|
public function cmd_gettraffic(Model_Service $so) {
|
||||||
|
$this->init();
|
||||||
|
|
||||||
|
$client = $this->packet->add_node('domain');
|
||||||
|
$get = $client->add_node('get_traffic');
|
||||||
|
$filter = $get->add_node('filter');
|
||||||
|
$filter->add_node('domain-name',strtolower($so->plugin()->name()));
|
||||||
|
|
||||||
|
# $get->add_node('since_date','2012-04-01');
|
||||||
|
# $get->add_node('end_date','2012-04-02');
|
||||||
|
|
||||||
|
$result = $this->server_command($this->xml);
|
||||||
|
|
||||||
|
if (! $this->loaded())
|
||||||
|
throw new Kohana_Exception('Unable to get PLESK Traffic data - Error :error',array(':error'=>(string)$result));
|
||||||
|
|
||||||
|
$this->_object = $this->collapse($result);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provision a hosting service
|
||||||
|
* @todo To implement
|
||||||
|
*/
|
||||||
|
public function provision(Model_Service $so) {
|
||||||
|
throw new Kohana_Exception('Not Implemented');
|
||||||
|
|
||||||
|
/*
|
||||||
|
$result = $this->add_client($so);
|
||||||
|
|
||||||
|
// Next need to get the ID from the account call to set the IP
|
||||||
|
$result = $this->hs->setip(35); // @todo change this number
|
||||||
|
print_r((string)$result);
|
||||||
|
|
||||||
|
// Provision Domain
|
||||||
|
$result = $this->hs->add_service($so);
|
||||||
|
print_r((string)$result);
|
||||||
|
|
||||||
|
// Set Limits
|
||||||
|
$result = $this->hs->setlimits($so);
|
||||||
|
print_r((string)$result);
|
||||||
|
|
||||||
|
// Next need to get the ID for the domain to disable mail
|
||||||
|
$result = $this->hs->disablemail(43);
|
||||||
|
print_r((string)$result);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a new client to the host server
|
||||||
|
* @todo To implement
|
||||||
|
*/
|
||||||
|
public function add_client(Model_Service $so) {
|
||||||
|
throw new Kohana_Exception('Not Implemented');
|
||||||
|
|
||||||
|
/*
|
||||||
|
$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);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
// * @todo To implement
|
||||||
|
public function add_service(Model_Service $so) {
|
||||||
|
throw new Kohana_Exception('Not Implemented');
|
||||||
|
|
||||||
|
/*
|
||||||
|
// @todo This should come from the DB.
|
||||||
|
$host_ip = '223.27.16.147';
|
||||||
|
$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
|
||||||
|
// * @todo To implement
|
||||||
|
public function setlimits(Model_Service $so) {
|
||||||
|
throw new Kohana_Exception('Not Implemented');
|
||||||
|
|
||||||
|
/*
|
||||||
|
$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);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
// @todo This is broken. $this->ippool is not existing
|
||||||
|
// * @todo To implement
|
||||||
|
public function setip($id) {
|
||||||
|
throw new Kohana_Exception('Not Implemented');
|
||||||
|
|
||||||
|
/*
|
||||||
|
$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);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
// * @todo To implement
|
||||||
|
public function disablemail($id) {
|
||||||
|
throw new Kohana_Exception('Not Implemented');
|
||||||
|
|
||||||
|
/*
|
||||||
|
$client = $this->packet->add_node('mail');
|
||||||
|
$disable = $client->add_node('disable');
|
||||||
|
$disable->add_node('domain_id',$id);
|
||||||
|
|
||||||
|
return $this->server_command($this->xml);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -14,21 +14,59 @@ class Model_Host_Server extends ORMOSB {
|
|||||||
// Host Server doesnt use the update column
|
// Host Server doesnt use the update column
|
||||||
protected $_updated_column = FALSE;
|
protected $_updated_column = FALSE;
|
||||||
|
|
||||||
public function manage_button(Model_Service_Plugin_Host $spho,$t) {
|
protected $_serialize_column = array(
|
||||||
$c = sprintf('Service_Host_%s',$this->provision_plugin);
|
'provision_plugin_data',
|
||||||
if (! class_exists($c))
|
);
|
||||||
return '';
|
|
||||||
|
|
||||||
$po = new $c($this->id);
|
/**
|
||||||
|
* Return the object of the product plugin
|
||||||
|
*/
|
||||||
|
public function plugin($type='') {
|
||||||
|
$c = sprintf('Host_Plugin_%s',$this->provision_plugin);
|
||||||
|
|
||||||
return $po->manage_button($spho,$t);
|
if (! $this->provision_plugin OR ! class_exists($c))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
$o = new $c($this);
|
||||||
|
|
||||||
|
return $type ? $o->$type : $o;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function prov_plugin_data() {
|
/**
|
||||||
if (! $this->provision_plugin_data)
|
* Enable the plugin to update
|
||||||
throw new Kohana_Exception('No plugin configuration data');
|
*/
|
||||||
|
public function admin_update() {
|
||||||
|
if (is_null($plugin = $this->plugin()))
|
||||||
|
return NULL;
|
||||||
|
else
|
||||||
|
return $plugin->admin_update();
|
||||||
|
}
|
||||||
|
|
||||||
return unserialize($this->provision_plugin_data);
|
public function manage_button($t='') {
|
||||||
|
static $k = '';
|
||||||
|
|
||||||
|
// If $k is already set, we've rendered this JS
|
||||||
|
if (! $k) {
|
||||||
|
$k = Random::char();
|
||||||
|
Session::instance()->set('manage_button',$k);
|
||||||
|
|
||||||
|
Script::add(array('type'=>'stdin','data'=>'
|
||||||
|
$(document).ready(function() {
|
||||||
|
var x=0;
|
||||||
|
$("button[name=submit]").click(function() {
|
||||||
|
var t=$(this).val().split(":");
|
||||||
|
if (x++) { alert("Session expired, please refresh the page!"); return false; }
|
||||||
|
$.getJSON("'.URL::site('admin/host/ajaxmanage/'.$this->id).'", { k: "'.$k.'",t: t[1] }, function(data) {
|
||||||
|
$.each(data, function(key, val) { $("#"+key+"_"+t[0]+"_"+t[1]).val(val); });
|
||||||
|
})
|
||||||
|
.error(function() { alert("There was a problem with the request"); return false; })
|
||||||
|
.success(function() { $("form[id=id_"+t[0]+"_"+t[1]+"]").submit(); });
|
||||||
|
});
|
||||||
|
});'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
return is_null($this->plugin()) ? '' : $this->plugin()->admin_manage_button($this,$t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@ -36,14 +36,6 @@ class Model_Service_Plugin_Host extends Model_Service_Plugin {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
public function rules() {
|
|
||||||
return array_merge(parent::rules(),array(
|
|
||||||
'server_data_date'=>array(
|
|
||||||
array('ORMOSB::serialize_array',array(':model',':field',':value')),
|
|
||||||
),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Required abstract functions
|
// Required abstract functions
|
||||||
public function admin_update() {
|
public function admin_update() {
|
||||||
return '';
|
return '';
|
||||||
@ -77,7 +69,7 @@ class Model_Service_Plugin_Host extends Model_Service_Plugin {
|
|||||||
if ($this->service->queue == 'PROVISION')
|
if ($this->service->queue == 'PROVISION')
|
||||||
return _('To Be Provisioned');
|
return _('To Be Provisioned');
|
||||||
|
|
||||||
return ($this->username_value() AND $this->password_value()) ? $this->host_server->manage_button($this,$t) : '';
|
return ($this->username_value() AND $this->password_value()) ? $this->host_server->plugin()->manage_button($this,$t) : '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@ -1,241 +0,0 @@
|
|||||||
<?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 implements Serializable {
|
|
||||||
private $protocol = '1.6.0.1';
|
|
||||||
private $path = 'enterprise/control/agent.php';
|
|
||||||
// Service Object
|
|
||||||
protected $hso;
|
|
||||||
protected $packet;
|
|
||||||
protected $xml;
|
|
||||||
protected $_object;
|
|
||||||
|
|
||||||
public function serialize() {
|
|
||||||
return serialize($this->_object);
|
|
||||||
}
|
|
||||||
public function unserialize($s) {
|
|
||||||
$this->_object = unserialize($s);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected $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 => FALSE,
|
|
||||||
);
|
|
||||||
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function server_command(XML $xml) {
|
|
||||||
if (count($a=array_keys($xml->packet->as_array())) != 1)
|
|
||||||
throw kohana_exception('XML command malformed?');
|
|
||||||
|
|
||||||
// We need to find out the command key, so we can get the status result.
|
|
||||||
$key = array_shift($a);
|
|
||||||
|
|
||||||
$hs = $this->hso->prov_plugin_data();
|
|
||||||
|
|
||||||
$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();
|
|
||||||
|
|
||||||
$result = XML::factory(null,'plesk',$response->body());
|
|
||||||
return $result;
|
|
||||||
|
|
||||||
return ($result->$key->get->result->status->value() == 'ok') ? $result->data : $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function collapse(XML $xml) {
|
|
||||||
$result = array();
|
|
||||||
|
|
||||||
foreach ($xml->as_array() as $j=>$k) {
|
|
||||||
$v = $xml->$j->value();
|
|
||||||
|
|
||||||
if (count($k) > 1) {
|
|
||||||
foreach ($xml->get($j,1) as $k)
|
|
||||||
if (isset($k['name'][0]))
|
|
||||||
$result[$j][$k['name'][0]] = (isset($k['value'][0]) ? $k['value'][0] : '');
|
|
||||||
else
|
|
||||||
$result[$j][] = $k;
|
|
||||||
|
|
||||||
} elseif (! is_null($v))
|
|
||||||
$result[$j] = $v;
|
|
||||||
else
|
|
||||||
$result[$j] = $this->collapse($xml->$j);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('name',$result) AND array_key_exists('value',$result))
|
|
||||||
$result = array($result['name']=>$result['value']);
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a Client Configuration
|
|
||||||
*/
|
|
||||||
public function cmd_getclient(Model_Service $so) {
|
|
||||||
$pco = new Plesk_Client($this->hso);
|
|
||||||
return $pco->cmd_getclient($so);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a Server Configuration
|
|
||||||
*/
|
|
||||||
public function cmd_getdomain(Model_Service $so) {
|
|
||||||
$pdo = new Plesk_Domain($this->hso);
|
|
||||||
return $pdo->cmd_getdomain($so);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Domain Traffic
|
|
||||||
*/
|
|
||||||
public function cmd_gettraffic(Model_Service $so) {
|
|
||||||
$client = $this->packet->add_node('domain');
|
|
||||||
$get = $client->add_node('get_traffic');
|
|
||||||
$filter = $get->add_node('filter');
|
|
||||||
$filter->add_node('domain-name',strtolower($so->plugin()->name()));
|
|
||||||
# $filter->add_node('id',1);
|
|
||||||
# $get->add_node('since_date','2012-04-01');
|
|
||||||
# $get->add_node('end_date','2012-04-02');
|
|
||||||
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,105 +0,0 @@
|
|||||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class provides PLESK client 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_Client extends Plesk {
|
|
||||||
private $_loaded = FALSE;
|
|
||||||
|
|
||||||
// @todo Get these default "templates" values out of the DB
|
|
||||||
private $_template = array(
|
|
||||||
'gen_info'=>array(),
|
|
||||||
'stat'=>array(),
|
|
||||||
'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,
|
|
||||||
),
|
|
||||||
'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,
|
|
||||||
),
|
|
||||||
'ippool' => array(
|
|
||||||
'111.67.13.20'=>'shared',
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a Client Configuration
|
|
||||||
*/
|
|
||||||
public function cmd_getclient(Model_Service $so) {
|
|
||||||
$items = array_keys($this->_template);
|
|
||||||
|
|
||||||
$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');
|
|
||||||
foreach ($items as $k)
|
|
||||||
$dataset->add_node($k);
|
|
||||||
|
|
||||||
$result = $this->server_command($this->xml);
|
|
||||||
|
|
||||||
if ($result->client->get->result->status->value() != 'ok')
|
|
||||||
throw new Kohana_Exception('Unable to get PLESK Client data');
|
|
||||||
|
|
||||||
foreach ($items as $k)
|
|
||||||
foreach ($result->get($k) as $a=>$b)
|
|
||||||
$this->_object[$k] = $this->collapse($b);
|
|
||||||
|
|
||||||
$this->_loaded = TRUE;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function loaded() {
|
|
||||||
return $this->_loaded;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,56 +0,0 @@
|
|||||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class provides PLESK domain 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_Domain extends Plesk {
|
|
||||||
private $_loaded = FALSE;
|
|
||||||
|
|
||||||
// @todo Get these default "templates" values out of the DB
|
|
||||||
private $_template = array(
|
|
||||||
'gen_info'=>array(),
|
|
||||||
'hosting'=>array(),
|
|
||||||
'limits'=>array(),
|
|
||||||
'user'=>array(),
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a Client Configuration
|
|
||||||
*/
|
|
||||||
public function cmd_getdomain(Model_Service $so) {
|
|
||||||
$items = array_keys($this->_template);
|
|
||||||
|
|
||||||
$domain = $this->packet->add_node('domain');
|
|
||||||
$get = $domain->add_node('get');
|
|
||||||
$filter = $get->add_node('filter');
|
|
||||||
$filter->add_node('domain-name',strtolower($so->plugin()->name()));
|
|
||||||
$dataset = $get->add_node('dataset');
|
|
||||||
foreach ($items as $k)
|
|
||||||
$dataset->add_node($k);
|
|
||||||
|
|
||||||
$result = $this->server_command($this->xml);
|
|
||||||
|
|
||||||
if ($result->domain->get->result->status->value() != 'ok')
|
|
||||||
throw new Kohana_Exception('Unable to get PLESK Domain data');
|
|
||||||
|
|
||||||
foreach ($items as $k)
|
|
||||||
foreach ($result->get($k) as $a=>$b)
|
|
||||||
$this->_object[$k] = $this->collapse($b);
|
|
||||||
|
|
||||||
$this->_loaded = TRUE;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function loaded() {
|
|
||||||
return $this->_loaded;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,58 +0,0 @@
|
|||||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class will take care of Domain Registrars.
|
|
||||||
*
|
|
||||||
* @package OSB
|
|
||||||
* @subpackage Service
|
|
||||||
* @category Helpers
|
|
||||||
* @author Deon George
|
|
||||||
* @copyright (c) 2010 Deon George
|
|
||||||
* @license http://dev.leenooks.net/license.html
|
|
||||||
*/
|
|
||||||
abstract class Service_Host {
|
|
||||||
protected $so;
|
|
||||||
protected $fetchresult = NULL;
|
|
||||||
// @todo These options should be centrally defined
|
|
||||||
protected $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 => FALSE,
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setup this class. We need to get our supplier details out of the database.
|
|
||||||
*/
|
|
||||||
public function __construct($sid) {
|
|
||||||
$this->so = ORM::factory('host_server',$sid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Our HTML button that will enable us to manage this domain.
|
|
||||||
*
|
|
||||||
* @param so Our Service Object
|
|
||||||
*/
|
|
||||||
abstract public function manage_button(Model_Service_Plugin_Host $spho,$t);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return an instance of this class
|
|
||||||
*
|
|
||||||
* @return HeadImage
|
|
||||||
*/
|
|
||||||
public static function instance($supplier) {
|
|
||||||
$sc = sprintf('%s_%s',get_called_class(),$supplier);
|
|
||||||
|
|
||||||
if (! class_exists($sc))
|
|
||||||
throw new Kohana_Exception('Class doesnt exist for :supplier',array(':supplier'=>$supplier));
|
|
||||||
else
|
|
||||||
return new $sc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,35 +0,0 @@
|
|||||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class is able to interact with PLESK
|
|
||||||
*
|
|
||||||
* @package OSB
|
|
||||||
* @subpackage Service
|
|
||||||
* @category Helpers
|
|
||||||
* @author Deon George
|
|
||||||
* @copyright (c) 2010 Open Source Billing
|
|
||||||
* @license http://dev.osbill.net/license.html
|
|
||||||
*/
|
|
||||||
class Service_Host_Plesk extends Service_Host {
|
|
||||||
private $login_acnt_field = '';
|
|
||||||
private $login_user_field = 'login_name';
|
|
||||||
private $login_pass_field = 'passwd';
|
|
||||||
|
|
||||||
// Our required abstract classes
|
|
||||||
public function manage_button(Model_Service_Plugin_Host $spho,$t) {
|
|
||||||
$debug = FALSE;
|
|
||||||
$output = '';
|
|
||||||
|
|
||||||
$output .= Form::open(
|
|
||||||
$debug ? 'debug/site' : sprintf('%s/%s',$this->so->manage_url,'login_up.php3'),
|
|
||||||
array('target'=>'w24','method'=>'post','id'=>sprintf('id_%s_%s',$spho->service_id,$t))
|
|
||||||
);
|
|
||||||
$output .= Form::input($this->login_user_field,$spho->username_value(),array('type'=>'hidden','id'=>sprintf('u_%s_%s',$spho->service_id,$t)));
|
|
||||||
$output .= Form::input($this->login_pass_field,substr(md5($spho->password_value()),0,8),array('type'=>'hidden','id'=>sprintf('p_%s_%s',$spho->service_id,$t)));
|
|
||||||
$output .= Form::close();
|
|
||||||
$output .= Form::button('submit',_('Manage'),array('class'=>'form_button','value'=>sprintf('%s:%s',$spho->service_id,$t)));
|
|
||||||
|
|
||||||
return $output;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,34 +0,0 @@
|
|||||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class is able to interact with TPP
|
|
||||||
*
|
|
||||||
* @package OSB
|
|
||||||
* @subpackage Service
|
|
||||||
* @category Helpers
|
|
||||||
* @author Deon George
|
|
||||||
* @copyright (c) 2010 Open Source Billing
|
|
||||||
* @license http://dev.osbill.net/license.html
|
|
||||||
*/
|
|
||||||
class Service_Host_TPP extends Service_Host {
|
|
||||||
private $login_acnt_field = '';
|
|
||||||
private $login_user_field = 'login';
|
|
||||||
private $login_pass_field = 'password';
|
|
||||||
|
|
||||||
// Our required abstract classes
|
|
||||||
public function manage_button($u,$p,$d) {
|
|
||||||
$output = '';
|
|
||||||
|
|
||||||
$output .= Form::open(
|
|
||||||
sprintf('%s/%s',$this->so->whitelabel_url,'execute/logon'),
|
|
||||||
array('target'=>'tpp','method'=>'post')
|
|
||||||
);
|
|
||||||
$output .= Form::input($this->login_user_field,$u,array('type'=>'hidden'));
|
|
||||||
$output .= Form::input($this->login_pass_field,$p,array('type'=>'hidden'));
|
|
||||||
$output .= Form::button('submit',_('Manage'),array('class'=>'form_button'));
|
|
||||||
$output .= Form::close();
|
|
||||||
|
|
||||||
return $output;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
6
modules/host/views/host/admin/plugin/plesk.php
Normal file
6
modules/host/views/host/admin/plugin/plesk.php
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<table class="box-left">
|
||||||
|
<tr>
|
||||||
|
<th>Shared IPs</th>
|
||||||
|
<td><?php echo Form::input('provision_plugin_data[shared_ip]',$o->value('shared_ip')); ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
54
modules/host/views/host/admin/update.php
Normal file
54
modules/host/views/host/admin/update.php
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<!-- @todo NEEDS TO BE TRANSLATED -->
|
||||||
|
<table width="100%">
|
||||||
|
<?php if ($x=$hso->manage_button()) { ?>
|
||||||
|
<tr>
|
||||||
|
<td style="width: 40%;">Panel Login</td>
|
||||||
|
<td style="width: 60%;" class="data"><?php echo $x; ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php } ?>
|
||||||
|
</table>
|
||||||
|
<?php echo Form::open(); ?>
|
||||||
|
<table class="box-left">
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<td><?php echo Form::input('name',$hso->name); ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Active</th>
|
||||||
|
<td><?php echo StaticList_YesNo::form('status',$hso->status); ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Debug Mode</th>
|
||||||
|
<td><?php echo StaticList_YesNo::form('debug',$hso->debug); ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Notes</th>
|
||||||
|
<td><?php echo Form::input('notes',$hso->notes); ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Provision Plugin</th>
|
||||||
|
<!-- @todo This should be a dynamic list -->
|
||||||
|
<td><?php echo Form::input('provision_plugin',$hso->provision_plugin); ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Max Accounts</th>
|
||||||
|
<td><?php echo Form::input('max_accounts',$hso->max_accounts); ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Manage URL</th>
|
||||||
|
<td>
|
||||||
|
<?php echo Form::input('manage_url',$hso->manage_url,array('size'=>($a=strlen($hso->manage_url)>50 ? $a : 50))); ?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Manage Admin</th>
|
||||||
|
<td><?php echo Form::input('manage_username',$hso->manage_username); ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Manage Password</th>
|
||||||
|
<td><?php echo Form::input('manage_password',$hso->manage_password); ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<?php if ($plugin_form) { echo '<br/>'.$plugin_form; } ?>
|
||||||
|
<?php echo Form::submit('submit',_('Update'),array('class'=>'form_button')); ?>
|
||||||
|
<?php echo Form::close(); ?>
|
@ -46,14 +46,6 @@ class Model_Product extends ORMOSB {
|
|||||||
'price_group',
|
'price_group',
|
||||||
);
|
);
|
||||||
|
|
||||||
public function rules() {
|
|
||||||
return array_merge(parent::rules(),array(
|
|
||||||
'price_group'=>array(
|
|
||||||
array('ORMOSB::serialize_array',array(':model',':field',':value')),
|
|
||||||
),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the object of the product plugin
|
* Return the object of the product plugin
|
||||||
*/
|
*/
|
||||||
|
@ -57,7 +57,7 @@ abstract class Model_Service_Plugin extends ORMOSB {
|
|||||||
var x=0;
|
var x=0;
|
||||||
$("button[name=submit]").click(function() {
|
$("button[name=submit]").click(function() {
|
||||||
var t=$(this).val().split(":");
|
var t=$(this).val().split(":");
|
||||||
if (x++) { alert("Please refresh the page"); return false; }
|
if (x++) { alert("Session expired, please refresh the page!"); return false; }
|
||||||
$.getJSON("'.URL::site('user/service/ajaxmanage/'.$this->service_id).'", { k: "'.$k.'",t: t[1] }, function(data) {
|
$.getJSON("'.URL::site('user/service/ajaxmanage/'.$this->service_id).'", { k: "'.$k.'",t: t[1] }, function(data) {
|
||||||
$.each(data, function(key, val) { $("#"+key+"_"+t[0]+"_"+t[1]).val(val); });
|
$.each(data, function(key, val) { $("#"+key+"_"+t[0]+"_"+t[1]).val(val); });
|
||||||
}).error(function() { alert("There was a problem with the request"); return false; }).success(
|
}).error(function() { alert("There was a problem with the request"); return false; }).success(
|
||||||
|
@ -32,6 +32,9 @@ class Model_Service_Plugin_SSL extends Model_Service_Plugin {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Required abstract functions
|
// Required abstract functions
|
||||||
|
public function username_value() {} // Not used
|
||||||
|
public function password_value() {} // Not used
|
||||||
|
|
||||||
public function service_view() {
|
public function service_view() {
|
||||||
return View::factory('service/user/plugin/ssl/view')
|
return View::factory('service/user/plugin/ssl/view')
|
||||||
->set('so',$this);
|
->set('so',$this);
|
||||||
|
Reference in New Issue
Block a user