Implement PLESK, SSL Services
This commit is contained in:
parent
cb18209369
commit
c8fd44f844
@ -41,7 +41,7 @@ class lnApp_Table {
|
||||
if (! empty($option['button']))
|
||||
$button = implode('',$option['button']);
|
||||
else
|
||||
$button = '<input type="submit" name="Submit" value="View/Edit" class="form_button"/>';
|
||||
$button = Form::button('Submit','View/Edit',array('class'=>'form_button','type'=>'submit'));
|
||||
|
||||
Script::add(array(
|
||||
'type'=>'stdin',
|
||||
|
@ -11,5 +11,9 @@
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Model_Affiliate extends ORMOSB {
|
||||
// Relationships
|
||||
protected $_belongs_to = array(
|
||||
'host_server_affiliate'=>array('far_key'=>'affiliate_id','foreign_key'=>'id'),
|
||||
);
|
||||
}
|
||||
?>
|
||||
|
37
modules/charge/views/charge/admin/add.php
Normal file
37
modules/charge/views/charge/admin/add.php
Normal file
@ -0,0 +1,37 @@
|
||||
<table border="1">
|
||||
<tr>
|
||||
<td>Account</td>
|
||||
<td><?php echo Form::input('account_id',''); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Service</td>
|
||||
<td><?php echo Form::select('service_id',array('NONE')); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sweep</td>
|
||||
<td><?php echo StaticList_SweepType::form('sweep_type',6); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quantity</td>
|
||||
<td><?php echo Form::input('quantity',NULL); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Amount</td>
|
||||
<td><?php echo Form::input('amount',NULL); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Taxable</td>
|
||||
<td><?php echo StaticList_YesNo::form('taxable',true); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Description</td>
|
||||
<td><?php echo Form::input('description',NULL); ?></td>
|
||||
</tr>
|
||||
<!-- @todo This to be dynamic -->
|
||||
<?php for($x=0;$x<10;$x++) { ?>
|
||||
<tr>
|
||||
<td>Attributes</td>
|
||||
<td><?php echo Form::input('attributes['.$x.']',NULL); ?></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</table>
|
123
modules/host/classes/controller/task/host.php
Normal file
123
modules/host/classes/controller/task/host.php
Normal file
@ -0,0 +1,123 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
/**
|
||||
* This class provides Host Server functions
|
||||
*
|
||||
* @package OSB
|
||||
* @subpackage HostServer
|
||||
* @category Controllers/Task
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class Controller_Task_Host extends Controller_Task {
|
||||
// Host Server Object
|
||||
private $hs;
|
||||
|
||||
public function __construct(Request $request, Response $response) {
|
||||
parent::__construct($request,$response);
|
||||
|
||||
// To make it easy for some methods, we'll load our service here
|
||||
switch (Request::current()->action()) {
|
||||
case 'getclient':
|
||||
case 'getservice':
|
||||
case 'provision':
|
||||
$sid = $this->request->param('id');
|
||||
|
||||
$hso = ORM::factory('service',$sid)->plugin()->host_server;
|
||||
require Kohana::find_file('vendor',$hso->provision_plugin);
|
||||
$this->hs = new $hso->provision_plugin($hso);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Client Details from Host Server
|
||||
*/
|
||||
public function action_getclient() {
|
||||
$sid = $this->request->param('id');
|
||||
|
||||
print_r((string)$this->hs->get_client(ORM::factory('service',$sid)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Client Details from Host Server
|
||||
*/
|
||||
public function action_getservice() {
|
||||
$sid = $this->request->param('id');
|
||||
|
||||
print_r((string)$this->hs->get_service(ORM::factory('service',$sid)));
|
||||
}
|
||||
|
||||
/**
|
||||
* List services that need to be provisioned
|
||||
*/
|
||||
public function action_provisionlist() {
|
||||
$mode = $this->request->param('id');
|
||||
$cats = array();
|
||||
|
||||
if ($mode)
|
||||
$cats = ORM::factory('product_category')->list_bylistgroup($mode);
|
||||
|
||||
foreach (ORM::Factory('service')->list_provision()->find_all() as $so) {
|
||||
$pc = array();
|
||||
|
||||
// Limit to show only those by the requested category.
|
||||
if ($cats) {
|
||||
if (! $so->product->avail_category_id OR ! preg_match('/^a:/',$so->product->avail_category_id))
|
||||
continue;
|
||||
|
||||
$pc = unserialize($so->product->avail_category_id);
|
||||
|
||||
if (! array_intersect($pc,array_keys($cats)))
|
||||
continue;
|
||||
}
|
||||
|
||||
echo $so->id();
|
||||
|
||||
switch ($mode) {
|
||||
case 'host':
|
||||
printf(' %s %s %s',$so->plugin(),$so->plugin()->host_server->name,$so->service_name());
|
||||
break;
|
||||
|
||||
default:
|
||||
}
|
||||
echo "\n";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a domain for the client
|
||||
*
|
||||
* @param int $id Hosting ID (in OSB)
|
||||
* @return unknown_type
|
||||
*/
|
||||
public function action_provision() {
|
||||
$sid = $this->request->param('id');
|
||||
$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);
|
||||
|
||||
// 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);
|
||||
*/
|
||||
}
|
||||
}
|
||||
?>
|
@ -11,6 +11,9 @@
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Model_Host_Server extends ORMOSB {
|
||||
// Host Server doesnt use the update column
|
||||
protected $_updated_column = FALSE;
|
||||
|
||||
public function manage_button($u,$p,$d) {
|
||||
$c = sprintf('Service_Host_%s',$this->provision_plugin);
|
||||
if (! class_exists($c))
|
||||
@ -20,5 +23,12 @@ class Model_Host_Server extends ORMOSB {
|
||||
|
||||
return $po->manage_button($u,$p,$d);
|
||||
}
|
||||
|
||||
public function config() {
|
||||
if (! $this->provision_plugin_data)
|
||||
throw new Kohana_Exception('No plugin configuration data');
|
||||
|
||||
return unserialize($this->provision_plugin_data);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
15
modules/host/classes/model/host/server/affiliate.php
Normal file
15
modules/host/classes/model/host/server/affiliate.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class supports affiliates Host Server Configuration
|
||||
*
|
||||
* @package OSB
|
||||
* @subpackage HostServer/Affiliate
|
||||
* @category Models
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Model_Host_Server_Affiliate extends ORMOSB {
|
||||
}
|
||||
?>
|
@ -51,6 +51,10 @@ class Model_Service_Plugin_Host extends Model_Service_Plugin {
|
||||
* to manage the domain.
|
||||
*/
|
||||
public function manage_button() {
|
||||
// @todo Convert this to a Static_List display
|
||||
if ($this->service->queue == 'PROVISION')
|
||||
return _('To Be Provisioned');
|
||||
|
||||
return ($this->host_username AND $this->host_password) ? $this->host_server->manage_button($this->host_username,$this->host_password,$this->name()) : '';
|
||||
}
|
||||
}
|
||||
|
258
modules/host/vendor/plesk.php
vendored
Normal file
258
modules/host/vendor/plesk.php
vendored
Normal file
@ -0,0 +1,258 @@
|
||||
<?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->config();
|
||||
|
||||
$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));
|
||||
}
|
||||
}
|
||||
?>
|
@ -1,101 +0,0 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
/**
|
||||
* This class provides Host Server functions
|
||||
*
|
||||
* @package OSB
|
||||
* @subpackage HostServer
|
||||
* @category Controllers
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class Controller_HostServer extends Controller {
|
||||
public function action_plesk_addclienttest($id) {
|
||||
$ao = ORM::factory('account',$id);
|
||||
|
||||
$plesk = new Plesk;
|
||||
$result = $plesk->addclient($ao);
|
||||
|
||||
print_r(array('s'=>(string)$result,'r'=>(string)$result->add->result));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a domain for the client
|
||||
*
|
||||
* @param int $id Hosting ID (in OSB)
|
||||
* @return unknown_type
|
||||
*/
|
||||
public function action_plesk_adddomaintest($id) {
|
||||
$so = ORM::factory('service',$id);
|
||||
|
||||
$plesk = new Plesk;
|
||||
$result = $plesk->adddomain($so);
|
||||
|
||||
print_r(array('s'=>(string)$result,'r'=>(string)$result->add->result));
|
||||
}
|
||||
|
||||
public function action_plesk_addclient($id) {
|
||||
}
|
||||
|
||||
public function action_plesk_getclient($id) {
|
||||
$ao = ORM::factory('account',$id);
|
||||
$plesk = new Plesk;
|
||||
print_r($plesk->get_client($ao)->as_array());
|
||||
}
|
||||
|
||||
public function action_plesk_getservice($id) {
|
||||
$so = ORM::factory('service',$id);
|
||||
$plesk = new Plesk;
|
||||
|
||||
$result = $plesk->get_service($so);
|
||||
print_r(array('s'=>(string)$result,'r'=>(string)$result->get));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the Limits for the client
|
||||
*
|
||||
* @param int $id Client ID (in plesk)
|
||||
* @return unknown_type
|
||||
*/
|
||||
public function action_plesk_setlimits() {
|
||||
$plesk = new Plesk;
|
||||
$result = $plesk->setlimits();
|
||||
|
||||
print_r(array('s'=>(string)$result,'r'=>(string)$result->set->result));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the IP for the client
|
||||
*
|
||||
* @param int $id Client ID (in plesk)
|
||||
* @return unknown_type
|
||||
*/
|
||||
public function action_plesk_setip($id) {
|
||||
$plesk = new Plesk;
|
||||
$result = $plesk->setip($id);
|
||||
|
||||
print_r(array('s'=>(string)$result,'r'=>(string)$result->set));
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable mail for a domain
|
||||
*
|
||||
* @param int $id Domain ID (in plesk)
|
||||
* @return unknown_type
|
||||
*/
|
||||
public function action_plesk_disablemail($id) {
|
||||
$plesk = new Plesk;
|
||||
$result = $plesk->disablemail($id);
|
||||
|
||||
print_r(array('s'=>(string)$result,'r'=>(string)$result));
|
||||
}
|
||||
|
||||
public function action_plesk_settraffic() {
|
||||
die();
|
||||
$plesk = new Plesk;
|
||||
$result = $plesk->set_traffic();
|
||||
|
||||
print_r(array('s'=>(string)$result,'r'=>(string)$result));
|
||||
}
|
||||
}
|
||||
?>
|
@ -1,321 +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 {
|
||||
// @todo - need to get this value from the DB.
|
||||
private $admin_id = 'jd-admin';
|
||||
private $password = 'jd3550lp';
|
||||
|
||||
private $protocol = '1.6.0.1';
|
||||
private $path = 'enterprise/control/agent.php';
|
||||
|
||||
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,
|
||||
);
|
||||
|
||||
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,
|
||||
);
|
||||
|
||||
private $ippool = array(
|
||||
'111.67.13.20'=>'shared',
|
||||
);
|
||||
|
||||
public function addclient($account) {
|
||||
// @todo Remove this static definition
|
||||
$reseller_id = 'gtc-admin';
|
||||
$client_template = 'DefaultClient';
|
||||
|
||||
$xml = XML::factory(null,'plesk');
|
||||
$packet = $xml->add_node('packet','',array('version'=>$this->protocol));
|
||||
|
||||
// Client Details
|
||||
$client = $packet->add_node('client');
|
||||
$add = $client->add_node('add');
|
||||
$gen_info = $add->add_node('gen_info');
|
||||
$gen_info->add_node('cname',$account->company);
|
||||
$gen_info->add_node('pname',sprintf('%s %s',$account->first_name,$account->last_name));
|
||||
|
||||
$gen_info->add_node('login',$this->admin_id);
|
||||
$gen_info->add_node('passwd',$this->password);
|
||||
|
||||
$gen_info->add_node('status',0);
|
||||
$gen_info->add_node('email',$account->email);
|
||||
|
||||
if ($reseller_id)
|
||||
$gen_info->add_node('owner-login',$reseller_id);
|
||||
|
||||
return $this->server_command($xml);
|
||||
}
|
||||
|
||||
// @not developed
|
||||
public function setlimits() {
|
||||
$xml = XML::factory(null,'plesk');
|
||||
$packet = $xml->add_node('packet','',array('version'=>$this->protocol));
|
||||
|
||||
$client = $packet->add_node('client');
|
||||
|
||||
// Permissions
|
||||
$set = $client->add_node('set');
|
||||
$filter = $set->add_node('filter');
|
||||
$filter->add_node('login',$this->admin_id);
|
||||
$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',$this->admin_id);
|
||||
$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($xml);
|
||||
}
|
||||
|
||||
public function setip($id) {
|
||||
$xml = XML::factory(null,'plesk');
|
||||
$packet = $xml->add_node('packet','',array('version'=>$this->protocol));
|
||||
|
||||
// IP Address
|
||||
$client = $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($xml);
|
||||
}
|
||||
|
||||
public function disablemail($id) {
|
||||
$xml = XML::factory(null,'plesk');
|
||||
$packet = $xml->add_node('packet','',array('version'=>$this->protocol));
|
||||
|
||||
// IP Address
|
||||
$client = $packet->add_node('mail');
|
||||
$disable = $client->add_node('disable');
|
||||
$disable->add_node('domain_id',$id);
|
||||
|
||||
echo (string)$xml;
|
||||
return $this->server_command($xml);
|
||||
}
|
||||
|
||||
public function adddomain($service) {
|
||||
$host_ip = '111.67.13.20';
|
||||
$domain_template = 'Default Domain';
|
||||
|
||||
$xml = XML::factory(null,'plesk');
|
||||
$packet = $xml->add_node('packet','',array('version'=>$this->protocol));
|
||||
|
||||
// Domain Details
|
||||
$domain = $packet->add_node('domain');
|
||||
$add = $domain->add_node('add');
|
||||
$gen_setup = $add->add_node('gen_setup');
|
||||
$gen_setup->add_node('name',$service->domain_name);
|
||||
$gen_setup->add_node('owner-login',$this->admin_id);
|
||||
$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',$service->host_username);
|
||||
$property = $vrt_host->add_node('property');
|
||||
$property->add_node('name','ftp_password');
|
||||
$property->add_node('value',$service->host_password);
|
||||
$vrt_host->add_node('ip_address',$host_ip);
|
||||
|
||||
$add->add_node('template-name',$domain_template);
|
||||
|
||||
return $this->server_command($xml);
|
||||
}
|
||||
|
||||
private function render(XML $xml) {
|
||||
return preg_replace('/<\/?plesk>/','',(string)$xml->render(FALSE));
|
||||
}
|
||||
|
||||
public function addclienttohost() {
|
||||
$LOGIN = 'admin';
|
||||
$PASSWD = 'w243550lp';
|
||||
|
||||
$header = array(
|
||||
"HTTP_AUTH_LOGIN: " . $LOGIN,
|
||||
"HTTP_AUTH_PASSWD: " . $PASSWD,
|
||||
"HTTP_PRETTY_PRINT: TRUE",
|
||||
"Content-Type: text/xml",
|
||||
);
|
||||
|
||||
return Remote::get(sprintf('https://%s/%s','w24-1-1.gthost.net:8443',$this->path),array(
|
||||
CURLOPT_SSL_VERIFYHOST => 0,
|
||||
CURLOPT_SSL_VERIFYPEER => FALSE,
|
||||
CURLOPT_HTTPHEADER => $header,
|
||||
CURLOPT_VERBOSE => TRUE,
|
||||
CURLOPT_POSTFIELDS => $this->render(),
|
||||
CURLOPT_RETURNTRANSFER => TRUE));
|
||||
}
|
||||
|
||||
public function adddomaintohost($id) {
|
||||
$this->domain = ORM::factory('hostserver',$id);
|
||||
$this->domain_xml();
|
||||
|
||||
}
|
||||
|
||||
public function get_client($account) {
|
||||
$xml = XML::factory(null,'plesk');
|
||||
$packet = $xml->add_node('packet','',array('version'=>$this->protocol));
|
||||
|
||||
$client = $packet->add_node('client');
|
||||
$get = $client->add_node('get');
|
||||
$filter = $get->add_node('filter');
|
||||
$filter->add_node('login',$this->admin_id);
|
||||
$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($xml);
|
||||
}
|
||||
|
||||
public function get_service($service) {
|
||||
$xml = XML::factory(null,'plesk');
|
||||
$packet = $xml->add_node('packet','',array('version'=>$this->protocol));
|
||||
|
||||
$client = $packet->add_node('domain');
|
||||
$get = $client->add_node('get');
|
||||
$filter = $get->add_node('filter');
|
||||
// @todo this should not be required
|
||||
if ($service->domain_tld)
|
||||
$filter->add_node('domain-name',sprintf('%s.%s',$service->domain_name,$service->domain_tld));
|
||||
else
|
||||
$filter->add_node('domain-name',$service->domain_name);
|
||||
$dataset = $get->add_node('dataset');
|
||||
$dataset->add_node('hosting');
|
||||
$dataset->add_node('limits');
|
||||
|
||||
return $this->server_command($xml);
|
||||
}
|
||||
|
||||
private function server_command(XML $xml) {
|
||||
// @todo Configure this in OSB
|
||||
$LOGIN = 'admin';
|
||||
$PASSWD = 'w243550lp';
|
||||
$SERVER = 'w24-1-1.gthost.net';
|
||||
$PORT = 8443;
|
||||
$PROTO = 'https';
|
||||
|
||||
$header = array(
|
||||
'HTTP_AUTH_LOGIN: '.$LOGIN,
|
||||
'HTTP_AUTH_PASSWD: '.$PASSWD,
|
||||
'HTTP_PRETTY_PRINT: TRUE',
|
||||
'Content-Type: text/xml',
|
||||
);
|
||||
|
||||
//echo (string)$xml;
|
||||
//die();
|
||||
return XML::factory(null,'plesk',Remote::get(sprintf('%s://%s:%s/%s',$PROTO,$SERVER,$PORT,$this->path),array(
|
||||
CURLOPT_SSL_VERIFYHOST => 0,
|
||||
CURLOPT_SSL_VERIFYPEER => FALSE,
|
||||
CURLOPT_HTTPHEADER => $header,
|
||||
CURLOPT_VERBOSE => TRUE,
|
||||
CURLOPT_TIMEOUT => 40,
|
||||
CURLOPT_CONNECTTIMEOUT => 20,
|
||||
CURLOPT_POSTFIELDS => $this->render($xml),
|
||||
CURLOPT_RETURNTRANSFER => TRUE)));
|
||||
}
|
||||
|
||||
public function set_traffic() {
|
||||
$xml = XML::factory(null,'plesk');
|
||||
$packet = $xml->add_node('packet','',array('version'=>$this->protocol));
|
||||
|
||||
$domain = $packet->add_node('domain');
|
||||
$set = $domain->add_node('set');
|
||||
$filter = $set->add_node('filter');
|
||||
|
||||
# foreach (array(
|
||||
# 'absmotorcycles.com.au'
|
||||
# ) as $domain) {
|
||||
# $filter->add_node('domain-name',$domain);
|
||||
# }
|
||||
|
||||
$values = $set->add_node('values');
|
||||
|
||||
// Limits
|
||||
$x = $values->add_node('limits');
|
||||
#foreach ($this->limits as $k=>$v) {
|
||||
$l = $x->add_node('limit');
|
||||
$l->add_node('name','max_traffic');
|
||||
$l->add_node('value',1500*1024*1024);
|
||||
$l = $x->add_node('limit');
|
||||
$l->add_node('name','max_traffic_soft');
|
||||
$l->add_node('value',1300*1024*1024);
|
||||
#}
|
||||
|
||||
//echo (string)$xml;die();
|
||||
return $this->server_command($xml);
|
||||
}
|
||||
}
|
@ -132,11 +132,11 @@
|
||||
<?php }?>
|
||||
<!-- @todo Add discounts -->
|
||||
<tr>
|
||||
<td class="head" colspan="3">Total Invoice:</td>
|
||||
<td class="head" colspan="3">Total This Invoice:</td>
|
||||
<td class="bold-right"><?php echo $io->total(TRUE); ?> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="head" colspan="3">Total Outstanding:</td>
|
||||
<td class="head" colspan="3">Total Outstanding This Account:</td>
|
||||
<td class="bold-right"><?php echo $io->account->invoices_due_total(NULL,TRUE); ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
@ -131,11 +131,11 @@
|
||||
<?php }?>
|
||||
<!-- @todo Add discounts -->
|
||||
<tr>
|
||||
<td class="head" colspan="3">Total Invoice:</td>
|
||||
<td class="head" colspan="3">Total This Invoice:</td>
|
||||
<td class="bold-right"><?php echo $io->total(TRUE); ?> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="head" colspan="3">Total Outstanding:</td>
|
||||
<td class="head" colspan="3">Total Outstanding This Account:</td>
|
||||
<td class="bold-right"><?php echo $io->account->invoices_due_total(NULL,TRUE); ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
@ -131,14 +131,14 @@ class Model_Product extends ORMOSB {
|
||||
* List the number of services using this product
|
||||
*/
|
||||
public function services_count() {
|
||||
return $this->service->find_all()->count();
|
||||
return $this->service->where('active','=',1)->find_all()->count();
|
||||
}
|
||||
|
||||
/**
|
||||
* List the number of invoices using this product
|
||||
*/
|
||||
public function invoices_count() {
|
||||
return $this->invoice->find_all()->count();
|
||||
return $this->invoice->where('status','=',1)->find_all()->count();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -517,7 +517,8 @@ class Controller_Admin_Service extends Controller_TemplateDefault_Admin {
|
||||
));
|
||||
}
|
||||
|
||||
public function action_update($id) {
|
||||
public function action_update() {
|
||||
$id = $this->request->param('id');
|
||||
$so = ORM::factory('service',$id);
|
||||
|
||||
if (! $so->loaded())
|
||||
|
@ -43,6 +43,7 @@ class Controller_User_Service extends Controller_TemplateDefault_User {
|
||||
public function action_view() {
|
||||
$output = '';
|
||||
|
||||
// Check if we are a table view
|
||||
if (! $id = $this->request->param('id')) {
|
||||
if (isset($_POST['id']) AND is_array($_POST['id']))
|
||||
Table::post('service_view','id');
|
||||
|
@ -9,10 +9,14 @@
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*
|
||||
* Fields:
|
||||
* + queue: PROVISION (to be provisioned)
|
||||
*/
|
||||
class Model_Service extends ORMOSB {
|
||||
// Relationships
|
||||
protected $_has_one = array(
|
||||
'affiliate'=>array('far_key'=>'affiliate_id','foreign_key'=>'id'),
|
||||
'service_billing'=>array('far_key'=>'account_billing_id','foreign_key'=>'id'),
|
||||
);
|
||||
protected $_has_many = array(
|
||||
@ -104,17 +108,24 @@ class Model_Service extends ORMOSB {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable the plugin to store data
|
||||
*/
|
||||
public function admin_update() {
|
||||
if (is_null($plugin = $this->plugin()))
|
||||
return NULL;
|
||||
else
|
||||
return $plugin->_admin_update();
|
||||
return $plugin->admin_update();
|
||||
}
|
||||
|
||||
/** LIST FUNCTIONS **/
|
||||
|
||||
private function _list_active() {
|
||||
return $this->where('active','=',1);
|
||||
}
|
||||
|
||||
public function list_active() {
|
||||
return $this->where('active','=','1')->find_all();
|
||||
return $this->_list_active()->find_all();
|
||||
}
|
||||
|
||||
public function list_bylistgroup($cat) {
|
||||
@ -138,14 +149,20 @@ class Model_Service extends ORMOSB {
|
||||
* List services that need to be billed.
|
||||
*/
|
||||
public function list_invoicesoon() {
|
||||
$result = array();
|
||||
// @todo This needs to be configurable
|
||||
$days = 35;
|
||||
|
||||
foreach ($this->list_active() as $so)
|
||||
// @todo This should be configurable (days)
|
||||
if (! $so->suspend_billing AND $so->date_next_invoice < time()+35*86400)
|
||||
array_push($result,$so);
|
||||
return $this->_list_active()
|
||||
->where_open()->where('suspend_billing','IS',NULL)->or_where('suspend_billing','=','0')->where_close()
|
||||
->where('date_next_invoice','<',time()+$days*86400)
|
||||
->find_all();
|
||||
}
|
||||
|
||||
return $result;
|
||||
/**
|
||||
* List services that need to be provisioned
|
||||
*/
|
||||
public function list_provision() {
|
||||
return $this->_list_active()->where('queue','=','PROVISION');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
59
modules/ssl/classes/controller/admin/ssl.php
Normal file
59
modules/ssl/classes/controller/admin/ssl.php
Normal file
@ -0,0 +1,59 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class provides Admin SSL functions
|
||||
*
|
||||
* @package OSB
|
||||
* @subpackage SSL
|
||||
* @category Controllers/Admin
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Controller_Admin_SSL extends Controller_TemplateDefault_Admin {
|
||||
protected $secure_actions = array(
|
||||
'list'=>TRUE,
|
||||
'update'=>TRUE,
|
||||
);
|
||||
|
||||
public function action_list() {
|
||||
Block::add(array(
|
||||
'title'=>_('SSL Services'),
|
||||
'body'=>Table::display(
|
||||
ORM::factory('ssl_ca')->find_all(),
|
||||
25,
|
||||
array(
|
||||
'id'=>array('label'=>'ID','url'=>'admin/ssl/update/'),
|
||||
'sign_cert'=>array('label'=>'Cert'),
|
||||
'issuer()'=>array('label'=>'Issuer'),
|
||||
'expires()'=>array('label'=>'Expires'),
|
||||
),
|
||||
array(
|
||||
'page'=>TRUE,
|
||||
'type'=>'select',
|
||||
'form'=>'admin/ssl/update',
|
||||
)),
|
||||
));
|
||||
}
|
||||
|
||||
public function action_update() {
|
||||
$id = $this->request->param('id');
|
||||
$so = ORM::factory('ssl_ca',$id);
|
||||
|
||||
if (! $so->loaded())
|
||||
Request::current()->redirect('welcome/index');
|
||||
|
||||
if ($_POST) {
|
||||
if (! $so->values($_POST)->update()->saved())
|
||||
throw new Kohana_Exception('Failed to save updates to plugin data for record :record',array(':record'=>$so->id()));
|
||||
}
|
||||
|
||||
Block::add(array(
|
||||
'title'=>sprintf('%s %s:%s',_('Update SSL Service'),$so->id,$so->display('sign_cert')),
|
||||
'body'=>View::factory('ssl/admin/update')
|
||||
->set('so',$so)
|
||||
->set('mediapath',Route::get('default/media'))
|
||||
));
|
||||
}
|
||||
}
|
||||
?>
|
25
modules/ssl/classes/controller/task/ssl.php
Normal file
25
modules/ssl/classes/controller/task/ssl.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class provides OSB SSL task capabilities.
|
||||
*
|
||||
* @package OSB
|
||||
* @subpackage SSL
|
||||
* @category Controllers/Task
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Controller_Task_SSL extends Controller_Task {
|
||||
/**
|
||||
* Renew a certificate
|
||||
*/
|
||||
public function action_renew() {
|
||||
// @todo, Change this to be a SSL id, maybe list all the certs expiring
|
||||
$id = $this->request->param('id');
|
||||
$so = ORM::factory('service',$id);
|
||||
|
||||
$so->plugin()->renew();
|
||||
}
|
||||
}
|
||||
?>
|
51
modules/ssl/classes/controller/user/ssl.php
Normal file
51
modules/ssl/classes/controller/user/ssl.php
Normal file
@ -0,0 +1,51 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class provides User SSL functions
|
||||
*
|
||||
* @package OSB
|
||||
* @subpackage SSL
|
||||
* @category Controllers/Admin
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Controller_User_SSL extends Controller_TemplateDefault_User {
|
||||
protected $secure_actions = array(
|
||||
'download'=>FALSE,
|
||||
);
|
||||
|
||||
public function action_download() {
|
||||
$id = $_POST['sid'];
|
||||
$so = ORM::factory('service',$id);
|
||||
|
||||
if (! $so->loaded())
|
||||
Request::current()->redirect('welcome/index');
|
||||
|
||||
$passwd = $_POST['passwd'];
|
||||
if (strlen($passwd) < Kohana::config('ssl.minpass_length')) {
|
||||
SystemMessage::add(array(
|
||||
'title'=>_('Validation failed'),
|
||||
'type'=>'error',
|
||||
'body'=>_('Your requested password is too short.'),
|
||||
));
|
||||
|
||||
Request::current()->redirect('user/service/view/'.$so->id);
|
||||
}
|
||||
|
||||
if (! $so->loaded() OR ! Auth::instance()->authorised($so->account_id,$so->affiliate_id)) {
|
||||
$this->template->content = 'Unauthorised or doesnt exist?';
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$file = Kohana::config('config.tmpdir').'/'.$so->name().'.pkcs12';
|
||||
openssl_pkcs12_export_to_file($so->plugin()->cert,$file,$so->plugin()->pk,$passwd,array('extracerts'=>$so->plugin()->cacerts()));
|
||||
$x = file_get_contents($file);
|
||||
unlink($file);
|
||||
$this->response->headers('Content-Type','application/pks12');
|
||||
$this->response->headers('Content-Disposition','attachment; filename="'.basename($file).'"');
|
||||
$this->response->body($x);
|
||||
$this->auto_render = FALSE;
|
||||
}
|
||||
}
|
||||
?>
|
23
modules/ssl/classes/model/product/plugin/ssl.php
Normal file
23
modules/ssl/classes/model/product/plugin/ssl.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class supports SSL products
|
||||
*
|
||||
* @package OSB
|
||||
* @subpackage Product/SSL
|
||||
* @category Models
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Model_Product_Plugin_SSL extends Model_Product_Plugin {
|
||||
protected $_table_name = 'ssl';
|
||||
|
||||
// Our required abstract methods
|
||||
public function feature_summary() {
|
||||
// @todo This view should render based on the the results of this::allowance();
|
||||
return View::factory('product/plugin/ssl/feature_summary')
|
||||
->set('po',$this);
|
||||
}
|
||||
}
|
||||
?>
|
145
modules/ssl/classes/model/service/plugin/ssl.php
Normal file
145
modules/ssl/classes/model/service/plugin/ssl.php
Normal file
@ -0,0 +1,145 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class supports Services
|
||||
*
|
||||
* @package OSB
|
||||
* @subpackage SSL
|
||||
* @category Models
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Model_Service_Plugin_SSL extends Model_Service_Plugin {
|
||||
protected $_table_name = 'service__ssl';
|
||||
protected $_updated_column = FALSE;
|
||||
|
||||
// Relationships
|
||||
protected $_belongs_to = array(
|
||||
'service'=>array(),
|
||||
);
|
||||
protected $_has_one = array(
|
||||
'ssl_ca'=>array('far_key'=>'ssl_ca_id','foreign_key'=>'id'),
|
||||
'ssl'=>array('far_key'=>'ssl_id','foreign_key'=>'id'),
|
||||
);
|
||||
|
||||
protected $_display_filters = array(
|
||||
'csr'=>array(
|
||||
array('SSL::csrsubject',array(':value')),
|
||||
),
|
||||
);
|
||||
|
||||
// Required abstract functions
|
||||
public function service_view() {
|
||||
return View::factory('service/user/plugin/ssl/view')
|
||||
->set('so',$this);
|
||||
}
|
||||
|
||||
public function name() {
|
||||
return $this->display('csr');
|
||||
}
|
||||
|
||||
// @todo This needs to be validated for this model
|
||||
public function product() {
|
||||
if ($this->provided_adsl_plan_id)
|
||||
return $this->adsl_plan;
|
||||
else
|
||||
return $this->service->product->plugin();
|
||||
}
|
||||
|
||||
public function valid_from() {
|
||||
return SSL::from($this->cert);
|
||||
}
|
||||
|
||||
public function valid_to() {
|
||||
return SSL::expire($this->cert);
|
||||
}
|
||||
|
||||
public function serial_num() {
|
||||
return SSL::serial($this->cert);
|
||||
}
|
||||
|
||||
public function hash() {
|
||||
return SSL::hash($this->cert);
|
||||
}
|
||||
|
||||
public function version() {
|
||||
return SSL::version($this->cert);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get specific service details for use in other modules
|
||||
* For Example: Invoice
|
||||
*
|
||||
* @todo Make the rendered items configurable
|
||||
* @todo Change this method name, now that it is public
|
||||
*/
|
||||
// @todo This needs to be validated for this model
|
||||
public function _details($type) {
|
||||
switch ($type) {
|
||||
case 'invoice_detail_items':
|
||||
return array(
|
||||
_('Service Address')=>$this->service_address ? $this->display('service_address') : '>NotSet<',
|
||||
_('Contract Until')=>$this->contract_date_end(),
|
||||
);
|
||||
break;
|
||||
default:
|
||||
return parent::$_details($type);
|
||||
}
|
||||
}
|
||||
|
||||
// @todo This needs to be validated for this model
|
||||
public function admin_update() {
|
||||
return View::factory('service/admin/plugin/ssl/update')
|
||||
->set('mediapath',Route::get('default/media'))
|
||||
->set('so',$this);
|
||||
}
|
||||
|
||||
public function download_button() {
|
||||
if (! preg_match('/client/',$this->ssl->extensions))
|
||||
return '';
|
||||
|
||||
// @todo Do some password validation
|
||||
$output = Form::open('user/ssl/download');
|
||||
$output .= Form::hidden('sid',$this->service->id);
|
||||
$output .= _('Choose a password').': '.Form::password('passwd','').'<br/><br/>';
|
||||
$output .= Form::submit('download','Download',array('class'=>'form_button'));
|
||||
return $output;
|
||||
}
|
||||
|
||||
public function cacerts() {
|
||||
$return = array();
|
||||
|
||||
$x = $this->ssl_ca_id;
|
||||
while ($x) {
|
||||
$sco = ORM::factory('ssl_ca',$x);
|
||||
array_push($return,$sco->sign_cert);
|
||||
$x = $sco->parent_ssl_ca_id;
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
public function renew() {
|
||||
$d = SSL::details($this->cert);
|
||||
$ssl_conf = Kohana::config('ssl');
|
||||
|
||||
// If our certificate is not old enough skip
|
||||
if ($d['validTo_time_t'] > time()+$ssl_conf['min_renew_days']*86400)
|
||||
return FALSE;
|
||||
|
||||
$res = openssl_csr_sign($this->csr,$this->ssl_ca->sign_cert,$this->ssl_ca->sign_pk,$this->ssl->days,array(
|
||||
'config'=>$ssl_conf['config'],
|
||||
'x509_extensions'=>$this->ssl->extensions,
|
||||
),time());
|
||||
|
||||
if (openssl_x509_export($res,$cert)) {
|
||||
$this->cert = $cert;
|
||||
$this->save();
|
||||
|
||||
return TRUE;
|
||||
} else
|
||||
throw new Kohana_Exception('Error Creating SSL Certificate :error',array(':error'=>openssl_error_string()));
|
||||
}
|
||||
}
|
||||
?>
|
16
modules/ssl/classes/model/ssl.php
Normal file
16
modules/ssl/classes/model/ssl.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class supports SSL
|
||||
*
|
||||
* @package OSB
|
||||
* @subpackage SSL
|
||||
* @category Models
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Model_SSL extends ORMOSB {
|
||||
protected $_updated_column = FALSE;
|
||||
}
|
||||
?>
|
37
modules/ssl/classes/model/ssl/ca.php
Normal file
37
modules/ssl/classes/model/ssl/ca.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class supports SSL
|
||||
*
|
||||
* @package OSB
|
||||
* @subpackage SSL
|
||||
* @category Models
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Model_SSL_CA extends ORMOSB {
|
||||
protected $_updated_column = FALSE;
|
||||
|
||||
// Relationships
|
||||
protected $_belongs_to = array(
|
||||
);
|
||||
|
||||
protected $_has_one = array(
|
||||
);
|
||||
|
||||
protected $_display_filters = array(
|
||||
'sign_cert'=>array(
|
||||
array('SSL::subject',array(':value')),
|
||||
),
|
||||
);
|
||||
|
||||
public function expires() {
|
||||
return SSL::expire($this->sign_cert);
|
||||
}
|
||||
|
||||
public function issuer() {
|
||||
return SSL::issuer($this->sign_cert);
|
||||
}
|
||||
}
|
||||
?>
|
63
modules/ssl/classes/ssl.php
Normal file
63
modules/ssl/classes/ssl.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class is for access to SSL information
|
||||
*
|
||||
* @package OSB
|
||||
* @subpackage System
|
||||
* @category Helpers
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class SSL {
|
||||
public static function instance() {
|
||||
return new SSL;
|
||||
}
|
||||
|
||||
public static function details($key) {
|
||||
return openssl_x509_parse($key);
|
||||
}
|
||||
|
||||
public static function issuer($key) {
|
||||
$k = static::details($key);
|
||||
return $k['issuer']['CN'];
|
||||
}
|
||||
|
||||
public static function from($key) {
|
||||
$k = static::details($key);
|
||||
return Config::date($k['validFrom_time_t']);
|
||||
}
|
||||
|
||||
public static function expire($key) {
|
||||
$k = static::details($key);
|
||||
return Config::date($k['validTo_time_t']);
|
||||
}
|
||||
|
||||
public static function hash($key) {
|
||||
$k = static::details($key);
|
||||
return $k['hash'];
|
||||
}
|
||||
|
||||
public static function serial($key) {
|
||||
$k = static::details($key);
|
||||
return $k['serialNumber'];
|
||||
}
|
||||
|
||||
public static function subject($key) {
|
||||
$k = static::details($key);
|
||||
return $k['subject']['CN'];
|
||||
}
|
||||
|
||||
public static function version($key) {
|
||||
$k = static::details($key);
|
||||
return $k['version'];
|
||||
}
|
||||
|
||||
public static function csrsubject($csr) {
|
||||
$c = openssl_csr_get_subject($csr);
|
||||
|
||||
return $c['CN'];
|
||||
}
|
||||
}
|
||||
?>
|
23
modules/ssl/config/ssl.php
Normal file
23
modules/ssl/config/ssl.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* OSB Configuration - SSL Config Items
|
||||
*
|
||||
* @package OSB
|
||||
* @subpackage System
|
||||
* @category Configuration
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
return array(
|
||||
// Days before certificates can be renewed.
|
||||
'min_renew_days' => 7,
|
||||
|
||||
// Min password length for exports
|
||||
'minpass_length' => 4,
|
||||
|
||||
// Location to openssl config
|
||||
'config' => 'appliation/config/openssl.cnf',
|
||||
);
|
||||
?>
|
11
modules/ssl/views/product/plugin/ssl/feature_summary.php
Normal file
11
modules/ssl/views/product/plugin/ssl/feature_summary.php
Normal file
@ -0,0 +1,11 @@
|
||||
<!-- //@todo To translate -->
|
||||
<table class="box-full">
|
||||
<tr>
|
||||
<td style="width: 40%;">Validity Days</td>
|
||||
<td class="data" style="width: 60%;" colspan="2"><?php echo $po->display('days'); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Type</td>
|
||||
<td class="data"><?php echo $po->display('extensions'); ?></td>
|
||||
</tr>
|
||||
</table>
|
14
modules/ssl/views/service/admin/plugin/ssl/update.php
Normal file
14
modules/ssl/views/service/admin/plugin/ssl/update.php
Normal file
@ -0,0 +1,14 @@
|
||||
<table border="0">
|
||||
<tr>
|
||||
<td style="width: 40%;">CSR</td>
|
||||
<td style="width: 60%;"><?php echo FORM::textarea('plugin[csr]',$so->service->plugin()->csr,array('cols'=>64,'rows'=>13)); ?></td>
|
||||
</td>
|
||||
<tr>
|
||||
<td>PK</td>
|
||||
<td><?php echo FORM::textarea('plugin[pk]',$so->service->plugin()->pk,array('cols'=>64,'rows'=>13)); ?></td>
|
||||
</td>
|
||||
<tr>
|
||||
<td>Cert</td>
|
||||
<td><?php echo FORM::textarea('plugin[cert]',$so->service->plugin()->cert,array('cols'=>64,'rows'=>13)); ?></td>
|
||||
</td>
|
||||
</table>
|
44
modules/ssl/views/service/user/plugin/ssl/view.php
Normal file
44
modules/ssl/views/service/user/plugin/ssl/view.php
Normal file
@ -0,0 +1,44 @@
|
||||
<!-- //@todo To translate -->
|
||||
<table class="box-full">
|
||||
<tr>
|
||||
<td class="head" colspan="3">Service Details</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td style="width: 25%;">Service Name</td>
|
||||
<td style="width: 75%;" class="data"><?php echo $so->display('csr'); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Valid From</td>
|
||||
<td class="data"><?php echo $so->valid_from(); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Valid To</td>
|
||||
<td class="data"><?php echo $so->valid_to(); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serial Number</td>
|
||||
<td class="data"><?php echo $so->serial_num(); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Version</td>
|
||||
<td class="data"><?php echo $so->version(); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hash</td>
|
||||
<td class="data"><?php echo $so->hash(); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Certificate</td>
|
||||
<td class="data"><pre><?php echo $so->display('cert'); ?></pre></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td style="text-align: right;"><?php echo $so->download_button(); ?></td>
|
||||
</tr>
|
||||
</table>
|
41
modules/ssl/views/ssl/admin/update.php
Normal file
41
modules/ssl/views/ssl/admin/update.php
Normal file
@ -0,0 +1,41 @@
|
||||
<?php echo Form::open(); ?>
|
||||
<table border="0">
|
||||
<tr>
|
||||
<td>Subject</td>
|
||||
<td class="data"><?php echo SSL::subject($so->sign_cert); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Issuer</td>
|
||||
<td class="data"><?php echo SSL::issuer($so->sign_cert); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Valid From</td>
|
||||
<td class="data"><?php echo SSL::from($so->sign_cert); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Valid To</td>
|
||||
<td class="data"><?php echo SSL::expire($so->sign_cert); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serial Num</td>
|
||||
<td class="data"><?php echo SSL::serial($so->sign_cert); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hash</td>
|
||||
<td class="data"><?php echo SSL::hash($so->sign_cert); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Version</td>
|
||||
<td class="data"><?php echo SSL::version($so->sign_cert); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 40%;">Private Key</td>
|
||||
<td style="width: 60%;"><?php echo FORM::textarea('sign_pk',$so->sign_pk,array('cols'=>64,'rows'=>13)); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Certificate</td>
|
||||
<td><?php echo FORM::textarea('sign_cert',$so->sign_cert,array('cols'=>64,'rows'=>13)); ?></td>
|
||||
</tr>
|
||||
<table>
|
||||
<?php echo Form::submit('submit',_('Update'),array('class'=>'form_button')); ?>
|
||||
<?php echo Form::close(); ?>
|
Reference in New Issue
Block a user