Current File : //root/panel/modules/ssl_crt/code/controller.ext.php |
<?php
/**
* @copyright 2014-2015 Sentora Project (http://www.sentora.org/)
* Sentora is a GPL fork of the ZPanel Project whose original header follows:
*
* ZPanel - A Cross-Platform Open-Source Web Hosting Control panel.
*
* @package ZPanel
* @version $Id$
* @author Bobby Allen - ballen@bobbyallen.me
* @copyright (c) 2008-2014 ZPanel Group - http://www.zpanelcp.com/
* @license http://opensource.org/licenses/gpl-3.0.html GNU Public License v3
*
* This program (ZPanel) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
class module_controller extends ctrl_module
{
static $complete;
static $nosub;
static $alreadyexists;
static $badname;
static $blank;
static $ok;
static $del;
static $validemail;
static $badpointing;
static $httpcodeerror;
static $uploadcrt;
static $uploadfailed;
static $crtempt;
static $csrfilenotexist;
static $domainnotpointed;
static $invalidcrtfile;
static $crtexists;
static $UpadteSsl;
static $uploadcrtempt;
static $tryagain;
static function get_client_ip()
{
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
static function getCreatedDomain()
{
$currentuser = ctrl_users::GetUserDetail();
return self::ListDomain($currentuser['userid']);
}
static function random_string($length)
{
$key = '';
$keys = array_merge(range(0, 9), range('a', 'z'));
for ($i = 0; $i < $length; $i++) {
$key .= $keys[array_rand($keys)];
}
return $key;
}
static public function doSaveSSL()
{
global $controller;
if (isset($_POST['ca_bundle']))
{
if (self::ExecuteCreateSSL($_POST['ca_bundle'],$_POST['ca_desc']))
{
self::$ok = TRUE;
return true;
}
else
{
return false;
}
}
return;
}
static public function ExecuteCreateSSL($ca_bundle,$ca_desc)
{
global $zdbh;
global $controller;
$time = time();
if($ca_bundle == "")
{
self::$crtempt = TRUE;
return FALSE;
}
else
{
$file_name = self::random_string(10);
$crt_file = "/etc/csr/tmp/".$file_name.".crt";
echo $crt_file."\n";
self::SocketConnect("SslCrtValid",$crt_file);
$file = fopen($crt_file,"w");
fwrite($file,$ca_bundle);
fclose($file);
$fp = fopen($crt_file, "r");
$cert = fread($fp, 8192);
fclose($fp);
$csr_result = openssl_x509_parse($cert);
$csr_domain = trim($csr_result['subject']['CN']);
$currentuser = ctrl_users::GetUserDetail();
$gsql=$zdbh->prepare("select * from x_vhosts where vh_name_vc=:domainName AND vh_acc_fk=:userid AND vh_deleted_ts is NULL");
$gsql->bindParam(':userid', $currentuser['userid']);
$gsql->bindParam(':domainName', $csr_domain);
$gsql->execute();
if($gsql->rowCount() !=0 )
{
$qsql=$zdbh->prepare("select * from x_ssl_crt where ssl_crt_doamin=:domainName AND userid=:userid AND ssl_crt_delete is NULL");
$qsql->bindParam(':userid', $currentuser['userid']);
$qsql->bindParam(':domainName', $csr_domain);
$qsql->execute();
if($qsql->rowCount() ==0 )
{
$let_ssl = $zdbh->prepare("select * from x_ssl where ssl_doamin=:domainName AND userid=:userid AND ssl_delete is NULL");
$let_ssl->bindParam(':userid', $currentuser['userid']);
$let_ssl->bindParam(':domainName', $csr_domain);
$let_ssl->execute();
if($let_ssl->rowCount() != 0)
{
$del_lets = $zdbh->prepare("UPDATE x_ssl SET ssl_delete=:time where ssl_doamin=:domainName AND userid=:userid AND ssl_delete is NULL");
$del_lets->bindParam(':userid', $currentuser['userid']);
$del_lets->bindParam(':domainName', $csr_domain);
$del_lets->bindParam(':time', $time);
$del_lets->execute();
}
$key_file = "/etc/csr/".$csr_domain."/".$csr_domain.".key";
if(file_exists($key_file))
{
$certFile = file_get_contents($crt_file);
$keyFile = file_get_contents($key_file);
$result = openssl_x509_check_private_key($certFile,$keyFile);
if($result == 1)
{
self::SocketConnect("CopyCrt",$crt_file,$csr_domain);
$validFrom_time_t = $csr_result['validFrom_time_t'];
$validTo_time_t = $csr_result['validTo_time_t'];
$ssl_crt_issuer = trim($csr_result['issuer']['O']);
$user_id = $currentuser['userid'];
$ssl_crt_type = "KEY_TEXT";
$sql = "INSERT INTO x_ssl_crt (userid,ssl_crt_doamin,ssl_crt,ssl_crt_desc,ssl_crt_type,ssl_crt_issuer,ssl_crt_status,ssl_crt_valid_from,ssl_crt_valid_to,ssl_crt_create) VALUES ($user_id,'$csr_domain','$ca_bundle','$ca_desc','$ssl_crt_type','$ssl_crt_issuer',0,$validFrom_time_t,$validTo_time_t,$time)";
$sql = $zdbh->prepare($sql);
/*$sql = $zdbh->prepare("INSERT INTO x_ssl_crt (userid,
ssl_crt_doamin,
ssl_crt,
ssl_crt_desc,
ssl_crt_type,
ssl_crt_issuer,
ssl_crt_status,
ssl_crt_valid_from,
ssl_crt_valid_to,
ssl_crt_create)
VALUES (:userid,
:domainName,
:sslcrt,
:ca_desc,
:ssl_crt_type,
:ssl_crt_issuer,
:0,
:ssl_crt_valid_from,
:ssl_crt_valid_to,
:time)");
$sql->bindParam(':userid', $user_id);
$sql->bindParam(':domainName', $csr_domain);
$sql->bindParam(':sslcrt', $ca_bundle);
$sql->bindParam(':ca_desc', $ca_desc);
$sql->bindParam(':ssl_crt_type', $ssl_crt_type);
$sql->bindParam(':ssl_crt_issuer', $ssl_crt_issuer);
$sql->bindParam(':ssl_crt_valid_from', $validFrom_time_t);
$sql->bindParam(':ssl_crt_valid_to', $validTo_time_t);
$sql->bindParam(':time', $time);*/
$sql->execute();
unset($sql);
$sql = $zdbh->prepare("UPDATE x_settings SET so_value_tx='true' WHERE so_name_vc='apache_changed'");
$sql->execute();
unset($sql);
self::SetCallDaemon();
self::$ok = TRUE;
return FALSE;
}
else
{
self::$invalidcrtfile = TRUE;
return FALSE;
}
}
else
{
self::$csrfilenotexist = TRUE;
return FALSE;
}
}
else
{
self::$crtexists = TRUE;
return FALSE;
}
}
else
{
self::$domainnotpointed = TRUE;
return FALSE;
}
}
}
static public function doUploadSSL()
{
global $zdbh;
global $controller;
if (isset($_FILES["ca_file"]))
{
$ca_fdesc = $_POST['ca_fdesc'];
$ca_file = $_FILES["ca_file"]["name"];
if($ca_file == "")
{
self::$uploadcrtempt = TRUE;
return FALSE;
}
$ext = trim(pathinfo($ca_file, PATHINFO_EXTENSION));
if($ext != "crt")
{
self::$uploadcrt = TRUE;
return FALSE;
}
else
{
$target_dir = "/etc/csr/tmp/";
$target_path = $target_dir . basename($ca_file);
if (move_uploaded_file($_FILES["ca_file"]["tmp_name"], $target_path))
{
echo $target_path;
$fp = fopen($target_path, "r");
$cert = fread($fp, 8192);
fclose($fp);
//exit;
$csr_result = openssl_x509_parse($cert);
$csr_domain = trim($csr_result['subject']['CN']);
$currentuser = ctrl_users::GetUserDetail();
$gsql=$zdbh->prepare("select * from x_vhosts where vh_name_vc=:domainName AND vh_acc_fk=:userid AND vh_deleted_ts is NULL");
$gsql->bindParam(':userid', $currentuser['userid']);
$gsql->bindParam(':domainName', $csr_domain);
$gsql->execute();
if($gsql->rowCount() !=0 )
{
$qsql=$zdbh->prepare("select * from x_ssl_crt where ssl_crt_doamin=:domainName AND userid=:userid AND ssl_crt_delete is NULL");
$qsql->bindParam(':userid', $currentuser['userid']);
$qsql->bindParam(':domainName', $csr_domain);
$qsql->execute();
if($qsql->rowCount() ==0 )
{
$let_ssl = $zdbh->prepare("select * from x_ssl where ssl_doamin=:domainName AND userid=:userid AND ssl_delete is NULL");
$let_ssl->bindParam(':userid', $currentuser['userid']);
$let_ssl->bindParam(':domainName', $csr_domain);
$let_ssl->execute();
if($let_ssl->rowCount() != 0)
{
$del_lets = $zdbh->prepare("UPDATE x_ssl SET ssl_delete=:time where ssl_doamin=:domainName AND userid=:userid AND ssl_delete is NULL");
$del_lets->bindParam(':userid', $currentuser['userid']);
$del_lets->bindParam(':domainName', $csr_domain);
$del_lets->bindParam(':time', $time);
$del_lets->execute();
}
$key_file = "/etc/csr/".$csr_domain."/".$csr_domain.".key";
if(file_exists($key_file))
{
$certFile = file_get_contents($target_path);
$keyFile = file_get_contents($key_file);
$result = openssl_x509_check_private_key($certFile,$keyFile);
if($result == 1)
{
self::SocketConnect("CopyCrt",$target_path,$csr_domain);
$validFrom_time_t = $csr_result['validFrom_time_t'];
$validTo_time_t = $csr_result['validTo_time_t'];
$ssl_crt_issuer = trim($csr_result['issuer']['O']);
$time = time();
$crt_path = "/etc/csr/".$csr_domain."/".$csr_domain.".crt";
$fpq = fopen($crt_path, "r");
$ca_bundle = fread($fpq, 8192);
fclose($fpq);
$user_id = $currentuser['userid'];
$ssl_crt_type = "CRT_UPLOAD";
$sql = "INSERT INTO x_ssl_crt (userid,ssl_crt_doamin,ssl_crt,ssl_crt_desc,ssl_crt_type,ssl_crt_issuer,ssl_crt_status,ssl_crt_valid_from,ssl_crt_valid_to,ssl_crt_create)VALUES ('$user_id','$csr_domain','$ca_bundle','$ca_fdesc','$ssl_crt_type','$ssl_crt_issuer',0,'$validFrom_time_t','$validTo_time_t','$time')";
//echo $sql; exit;
/*$sql = $zdbh->prepare("INSERT INTO x_ssl_crt (userid,
ssl_crt_doamin,
ssl_crt,
ssl_crt_desc,
ssl_crt_type,
ssl_crt_issuer,
ssl_crt_status,
ssl_crt_valid_from,
ssl_crt_valid_to,
ssl_crt_create)
VALUES (:userid,
:domainName,
:sslcrt,
:ca_desc,
:ssl_crt_type,
:ssl_crt_issuer,
:0,
:ssl_crt_valid_from,
:ssl_crt_valid_to,
:time)");
$sql->bindParam(':userid', $user_id);
$sql->bindParam(':domainName', $csr_domain);
$sql->bindParam(':sslcrt', $ca_bundle);
$sql->bindParam(':ca_desc', $ca_fdesc);
$sql->bindParam(':ssl_crt_type', $ssl_crt_type);
$sql->bindParam(':ssl_crt_issuer', $ssl_crt_issuer);
$sql->bindParam(':ssl_crt_valid_from', $validFrom_time_t);
$sql->bindParam(':ssl_crt_valid_to', $validTo_time_t);
$sql->bindParam(':time', $time);*/
$sql = $zdbh->prepare($sql);
$sql->execute();
unset($sql);
$sql = $zdbh->prepare("UPDATE x_settings SET so_value_tx='true' WHERE so_name_vc='apache_changed'");
$sql->execute();
unset($sql);
self::SetCallDaemon();
self::$ok = TRUE;
return FALSE;
}
else
{
self::$invalidcrtfile = TRUE;
return FALSE;
}
}
else
{
self::$csrfilenotexist = TRUE;
return FALSE;
}
}
else
{
self::$crtexists = TRUE;
return FALSE;
}
}
else
{
self::$domainnotpointed = TRUE;
return FALSE;
}
}
else
{
self::$uploadfailed = TRUE;
return FALSE;
}
exit;
}
}
else
{
return false;
}
return;
}
static function SocketConnect($command, $crt_file, $csr_domain=null)
{
$crt_file = escapeshellarg($crt_file);
//$org_crt_file = escapeshellarg($org_crt_file);
//echo "crt_file: ".$crt_file; exit;
$service_port = 4444;
$address = gethostbyname('localhost');
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false)
{
//echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
self::$tryagain=true;
return false;
}
//echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false)
{
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
self::$tryagain=true;
return false;
}
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 5, "usec" =>0));
//echo "command $command $vhost_path \n";
if($command == "SslCrtValid")
$in = "command $command $crt_file";
else
$in = "command $command $crt_file $csr_domain";
$out = '';
socket_write($socket, $in, strlen($in));
$output = "" ;
$out = socket_read($socket, 2048);
$output .= $out ;
socket_close($socket);
}
static public function doSslCrtList()
{
global $zdbh;
global $controller;
echo "<h2 style='height:55px;'>Certificates on Server</h2>";
$currentuser = ctrl_users::GetUserDetail();
$sql = "SELECT * FROM x_ssl_crt WHERE ssl_crt_status=1 AND ssl_crt_delete IS NULL AND userid=:userid";
$numrows = $zdbh->prepare($sql);
$numrows->bindParam(':userid', $currentuser['userid']);
$numrows->execute();
if ($numrows->fetchColumn() > 0)
{
$sql = $zdbh->prepare($sql);
$sql->bindParam(':userid', $currentuser['userid']);
$res = array();
$sql->execute();
$line .='<form action="./?module=ssl_crt&action=ConfirmDeleteSsl" method="post">';
$line .= '<table style="width:100%">';
$line .='<tr><td> </td></tr>';
$line .= '<tr><th style="width: 15%;">Domain</th><th style="width: 15%;">Issuer</th><th style="width: 15%;">Expiration</th><th style="width: 15%;">Description</th><th style="width: 15%;">Actions</th></tr>';
while ($rowdomain = $sql->fetch())
{
$listdomain = $rowdomain['ssl_crt_doamin'];
$listdomain = trim($listdomain);
$crtvalid = $rowdomain['ssl_crt_valid_to'];
$crtvalid = date('m/d/Y H:i:s', $crtvalid);
$issuer = $rowdomain['ssl_crt_issuer'];
$crtdesc = $rowdomain['ssl_crt_desc'];
$listid = $rowdomain['ssl_crt_no'];
$line .= '<tr><td>'.$listdomain.'</td><td>'.$issuer.'</td><td>'.$crtvalid.'</td><td>'.$crtdesc.'</td>';
$line .= '<td><button class="button-loader delete btn btn-danger" type="submit" id="button" name="inEdit_'.$listid.'" id="inEdit_'.$listid.'" value="inEdit_'.$listid.'" >Edit</button><button class="button-loader delete btn btn-danger" type="submit" id="button" name="inDelete_'.$listid.'" id="inDelete_'.$listid.'" value="inDelete_'.$listid.'" >Delete</button></td></tr>';
}
$line .= '</table>';
$line .='</form>';
echo $line;
exit;
} else {
echo "You currently do not have any Self Signed SSl Certificate. Upload CRT for create Self Signed SSl Certificate using the form below.";
exit;
}
}
static function SetCallDaemon()
{
$service_port = 4445 ;
$address = gethostbyname('localhost');
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false)
{
/*
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
self::$tryagain=true;
return false;
*/
}
// echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false)
{
/*
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
self::$tryagain=true;
return false;
*/
}
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 2000, "usec" =>0));
$in="command DaemonCall ";
socket_write($socket, $in, strlen($in));
socket_close($socket);
}
static function getisDeleteDomain()
{
global $controller;
$urlvars = $controller->GetAllControllerRequests('URL');
return (isset($urlvars['show'])) && ($urlvars['show'] == 'Delete');
}
static function getisEditDomain()
{
global $controller;
$urlvars = $controller->GetAllControllerRequests('URL');
return (isset($_GET['show'])) && ($_GET['show'] == 'Edit');
}
static function doConfirmDeleteSsl()
{
global $controller;
$currentuser = ctrl_users::GetUserDetail();
$formvars = $controller->GetAllControllerRequests('FORM');
foreach (self::ListDomain($currentuser['userid']) as $row) {
if (isset($formvars['inDelete_' . $row['subid'] . ''])) {
header('location: ./?module=' . $controller->GetCurrentModule() . '&show=Delete&id=' . $row['subid'] . '&domain=' . $row['list']);
exit;
}
else if (isset($formvars['inEdit_' . $row['subid'] . ''])) {
header('location: ./?module=' . $controller->GetCurrentModule() . '&show=Edit&id=' . $row['subid'] . '&domain=' . $row['list']);
exit;
}
}
return false;
}
static function doEditSslDomain()
{
global $controller;
if (isset($_POST['inEdit'])) {
if (self::ExecuteEditSslDomain($_POST['inEdit'],$_POST['inEditDomain'])) {
self::$del = TRUE;
return true;
}
}
return false;
}
static function ExecuteEditSslDomain($id, $domain)
{
global $zdbh;
global $controller;
echo "<h2 style='height:55px;'>Certificates on Server</h2>";
$currentuser = ctrl_users::GetUserDetail();
$sql = "SELECT * FROM x_ssl_crt WHERE ssl_crt_no=:id";
$numrows = $zdbh->prepare($sql);
$numrows->bindParam(':id', $id);
$numrows->execute();
$we = $numrows->fetchColumn();
if ($we > 0)
{
$sql = $zdbh->prepare($sql);
$sql->bindParam(':id', $id);
$sql->execute();
$rowdomain = $sql->fetch();
$crtvalid = $rowdomain['ssl_crt_valid_to'];
$crtvalid = date('m/d/Y H:i:s', $crtvalid);
$line = "";
$line .='<form action="./?module=ssl_crt&action=UpdateSSL" method="post">';
$line .= '<table style="width:100%;border-collapse: collapse;">';
$line .='<tr"><td> </td></tr>';
$line .= '<tr><th style="width: 15%;">Domain</th><td>'.$rowdomain['ssl_crt_doamin'].'</td></tr>';
$line .= '<tr><th style="width: 15%;">Issuer</th><td>'.$rowdomain['ssl_crt_issuer'].'</td></tr>';
$line .= '<tr><th style="width: 15%;">Expiration</th><td>'.$crtvalid.'</td></tr>';
$line .= '<th style="width: 15%;">Description</th><td><textarea style="width:600px;height:130px;" name="ca_desc" id="ca_desc">'.$rowdomain['ssl_crt_desc'].'</textarea></td></tr>';
$line .= '<th></th><tr><td><input type="hidden" Id="inUpdate" name="inUpdate" value="'.$id.'"><button class="button-loader delete btn btn-danger" type="submit" id="UpdateSSL" style="margin-left:77px;margin-top:25px">Update</button></td></tr>';
$line .= "<tr> </tr>";
$line .= '</table>';
$line .= '</form>';
$line .= '<pre>';
$line .= '<table style="width:100%">';
$line .= "<h3 style='height:55px;margin-top:30px;'>Decoded Certificate:</h3>";
$fp = fopen("/etc/csr/frwdtokesav.tk/frwdtokesav.tk.crt", "r");
$cert = fread($fp, 8192);
fclose($fp);
#echo openssl_x509_read($cert);
$cst_info = openssl_x509_parse( openssl_x509_read($cert));
$line .= "Certificate: <br>";
$line .= "Data: <br>";
foreach($cst_info as $key => $value)
{
if($key == "version")
{
$version = $value;
}
elseif($key == "serialNumber")
{
$serialNumber = $value;
}
elseif($key == "signatureTypeLN")
{
$Algorithm = $value;
}
elseif($key == "validFrom_time_t")
{
$validFrom_time_t = $value;
}
elseif($key == "validTo_time_t")
{
$validTo_time_t = $value;
}
elseif($key == "subject")
{
$subject = $value['CN'];
}
elseif($key == "issuer")
{
foreach ($value as $issue_key => $issue_value)
{
//$issuer .= $issue_value.", ";
//$iss_arr[] = $issuer;
$issuer = $issue_key." = ".$issue_value.", ";
}
}
elseif($key == "signatureTypeSN")
{
$signatureTypeSN = $value;
}
elseif($key == "extensions")
{
foreach($value as $ext => $extension)
{
if($ext == "authorityKeyIdentifier")
$authorityKeyIdentifier = $extension;
elseif($ext == "subjectKeyIdentifier")
$subjectKeyIdentifier = $extension;
elseif($ext == "keyUsage")
$keyUsage = $extension;
elseif($ext == "basicConstraints")
$basicConstraints = $extension;
elseif($ext == "extendedKeyUsage")
$extendedKeyUsage = $extension;
elseif($ext == "certificatePolicies")
$certificatePolicies = $extension;
elseif($ext == "crlDistributionPoints")
$crlDistributionPoints = $extension;
elseif($ext == "authorityInfoAccess")
$authorityInfoAccess = $extension;
elseif($ext == "subjectAltName")
$subjectAltName = $extension;
elseif($ext == "ct_precert_scts")
$ct_precert_scts = $extension;
}
}
}
$line .= "<tr style='height:27px;'><td>Version: ".$version."</td></tr>";
$line .= "<tr style='height:27px;'><td>Serial Number: ".$serialNumber."</td></tr>";
$line .= "<tr style='height:27px;'><td>Signature Algorithm: ".$Algorithm."</td></tr>";
$line .= "Issuer: ".$issuer."<br>";
$validFrom = date('m/d/Y H:i:s', $validFrom_time_t);
$validTo = date('m/d/Y H:i:s', $validTo_time_t);
$line .= "<tr style='height:27px;'><td>Validity: </td></tr><tr><td>From: ".$validFrom."<br> To: ".$validTo."</td></tr>";
$line .= "<tr style='height:27px;'><td>Subject: CN = ".$subject."</td></tr>";
$line .= "<tr style='height:27px;'><td>Subject Public Key Info:</td></tr>";
$line .= "<tr style='height:27px;'><td>Public Key Algorithm: ".$signatureTypeSN."</td></tr>";
$line .= "<tr style='height:27px;'><td>X509v3 extensions:</td></tr>";
$line .= "<tr style='height:27px;'><td>X509v3 Authority Key Identifier: <br>".$authorityKeyIdentifier."</td></tr>";
$line .= "<tr style='height:27px;'><td>X509v3 Subject Key Identifier: <br>".$subjectKeyIdentifier."</td></tr>";
$line .= "<tr style='height:27px;'><td>X509v3 Key Usage: <br>".$keyUsage."</td></tr>";
$line .= "<tr style='height:27px;'><td>X509v3 Basic Constraints: <br>".$basicConstraints."</td></tr>";
$line .= "<tr style='height:27px;'><td>X509v3 Extended Key Usage: <br>".$extendedKeyUsage."</td></tr>";
$line .= "<tr style='height:27px;'><td>X509v3 Certificate Policies: <br>".$certificatePolicies."</td></tr>";
$line .= "<tr style='height:27px;'><td>X509v3 CRL Distribution Points: <br>".$crlDistributionPoints."</td></tr>";
$line .= "<tr style='height:27px;'><td>Authority Information Access: <br>".$authorityInfoAccess."</td></tr>";
$line .= "<tr style='height:27px;'><td>X509v3 Subject Alternative Name: ".$subjectAltName."</td></tr>";
$line .= "<tr style='height:27px;'><td>CT Precertificate SCTs: <br>".$ct_precert_scts."</td></tr>";
$line .= '<th></th><tr><td><button class="button-loader btn btn-default" type="button" onclick="window.location.href=\'./?module=ssl_crt\';return false;"style="margin-left:72px;margin-top:20px;!important;">Go Back</button></td></tr>';
$line .= '</table>';
$line .= '</pre>';
echo $line;
exit;
}
else {
echo "You currently do not have any Self Signed SSl Certificate. Upload CRT for create Self Signed SSl Certificate using the form below.";
exit;
}
}
static function doUpdateSSL()
{
global $zdbh;
global $controller;
if (isset($_POST['inUpdate']))
{
$ssl_id = $_POST['inUpdate'];
$ssl_desc = $_POST['ca_desc'];
$sql = $zdbh->prepare("UPDATE x_ssl_crt SET ssl_crt_desc=:ssl_crt_desc WHERE ssl_crt_no=:id");
$sql->bindParam(':ssl_crt_desc', $ssl_desc);
$sql->bindParam(':id', $ssl_id);
$sql->execute();
self::$UpadteSsl = TRUE;
return FALSE;
}
return false;
}
static function doDeleteSslDomain()
{
global $controller;
if (isset($_POST['inDelete'])) {
if (self::ExecuteDeleteSslDomain($_POST['inDelete'])) {
self::$del = TRUE;
return true;
}
}
return false;
}
static function ExecuteDeleteSslDomain($id)
{
global $zdbh;
$sql = $zdbh->prepare("UPDATE x_ssl_crt SET ssl_crt_delete=:time WHERE ssl_crt_no=:id");
$time = time();
$sql->bindParam(':time', $time);
$sql->bindParam(':id', $id);
$sql->execute();
$retval = TRUE;
$sql = $zdbh->prepare("SELECT ssl_crt_doamin FROM x_ssl_crt WHERE ssl_crt_no=:id");
$sql->bindParam(':id', $id);
$sql->execute();
$row = $sql->fetch();
$domain = $row['ssl_crt_doamin'];
/*============================== Socket ==============================*/
$service_port = 4444 ;
$address = gethostbyname('localhost');
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
// echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
self::$tryagain=true;
return false;
}
// echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
// echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
self::$tryagain=true;
return false;
}
$in="command deleteCRT $domain";
$out = '';
socket_write($socket, $in, strlen($in));
$output = "" ;
echo "DONE";
exit;
/*==============================END==============================*/
return $retval;
}
static function doshowLogcontent()
{
$listdomain=$_POST['listdomain'];
echo file_get_contents("/var/log/letsencrypt/letsencrypt.log");
fclose($file);
exit;
}
static function gethelpicon()
{
global $zdbh;
global $controller;
$temp=$controller->GetControllerRequest('URL','module') ;
$val = '/assets/one.txt';
$val1 = '/modules/';
$name=file_get_contents("modules/$temp/assets/helpicon.txt");
return $name;
}
static function ListDomain($uid)
{
global $zdbh;
global $controller;
$currentuser = ctrl_users::GetUserDetail($uid);
$sql = "SELECT * FROM x_ssl_crt WHERE ssl_crt_delete IS NULL AND userid=:userid";
$numrows = $zdbh->prepare($sql);
$numrows->bindParam(':userid', $currentuser['userid']);
$numrows->execute();
if ($numrows->fetchColumn() > 0) {
$sql = $zdbh->prepare($sql);
$sql->bindParam(':userid', $currentuser['userid']);
$res = array();
$sql->execute();
while ($rowdomain = $sql->fetch()) {
$res[] = array('list' => $rowdomain['ssl_crt_doamin'],
'subid' => $rowdomain['ssl_crt_no']);
}
return $res;
} else {
return false;
}
}
static function getCurrentID()
{
global $controller;
$id = $controller->GetControllerRequest('URL', 'id');
return ($id) ? $id : '';
}
static function getCurrentDomain()
{
global $controller;
$domain = $controller->GetControllerRequest('URL', 'domain');
return ($domain) ? $domain : '';
}
/*=============================================================*/
static function CheckCreateForErrors($domain)
{
global $zdbh;
global $controller;
// Check for spaces and remove if found...
$domain = strtolower(str_replace(' ', '', $domain));
// Check to make sure the domain is not blank before we go any further...
if ($domain == '') {
self::$blank = TRUE;
return FALSE;
}
// Check for invalid characters in the domain...
if (!self::IsValidDomainName($domain)) {
self::$badname = TRUE;
return FALSE;
}
$server_ip = ctrl_options::GetSystemOption('server_ip');
$recordresult = dns_get_record($domain , DNS_A);
if(empty($recordresult))
{
echo "BADPOINTING";
exit;
}
foreach($recordresult as $keys=>$values)
{
if(trim($values['ip']) != trim($server_ip))
{
echo "BADPOINTING";
exit;
}
}
/*
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, $domain);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
$http_code = curl_getinfo ($ch, CURLINFO_HTTP_CODE) ;
if($http_code!=200)
{
echo "HTTPCODEERR";
exit;
}
*/
$sock_err=0;
$service_port = 4444 ;
$address = gethostbyname('localhost');
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "SOCKETERR";
$sock_err=1;
self::$tryagain=true;
return false;
}
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "SOCKETERR";
$sock_err=1;
self::$tryagain=true;
return false;
}
socket_close($socket);
if($sock_err==1)
exit;
// Check to see if the domain already exists in Sentora somewhere and redirect if it does....
$sql = "SELECT COUNT(*) FROM x_vhosts WHERE vh_name_vc=:domain AND vh_deleted_ts IS NULL";
$numrows = $zdbh->prepare($sql);
$numrows->bindParam(':domain', $domain);
if ($numrows->execute()) {
if ($numrows->fetchColumn() == 0) {
self::$alreadyexists = TRUE;
return FALSE;
}
}
return TRUE;
}
static function IsValidEmail($email)
{
return preg_match('/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i', $email) == 1;
}
static function IsValidDomainName($a)
{
if (stristr($a, '.')) {
$part = explode(".", $a);
foreach ($part as $check) {
if (!preg_match('/^[a-z\d][a-z\d-]{0,62}$/i', $check) || preg_match('/-$/', $check)) {
return false;
}
}
} else {
return false;
}
return true;
}
static function ListDomains($uid)
{
global $zdbh;
$currentuser = ctrl_users::GetUserDetail($uid);
$sql = "SELECT * FROM x_vhosts WHERE vh_acc_fk=:userid AND vh_enabled_in=1 AND vh_deleted_ts IS NULL AND vh_name_vc NOT IN (select ssl_doamin from x_ssl where ssl_delete IS NULL And userid=:userid) ORDER BY vh_name_vc ASC";
//$sql = "SELECT * FROM x_vhosts WHERE vh_acc_fk=:userid AND vh_enabled_in=1 AND vh_deleted_ts IS NULL AND vh_name_vc IN(SELECT ssl_doamin FROM x_ssl WHERE ssl_delete IS NOT NULL) ORDER BY vh_name_vc ASC";
//$sql = "SELECT x_vhosts.*,x_ssl.ssl_doamin FROM x_vhosts LEFT OUTER JOIN x_ssl ON x_vhosts.vh_name_vc = x_ssl.ssl_doamin";
//$numrows = $zdbh->query($sql);
$numrows = $zdbh->prepare($sql);
$numrows->bindParam(':userid', $currentuser['userid']);
$numrows->execute();
$domaincount = $numrows->fetchColumn();
if ($domaincount > 0) {
$sql = $zdbh->prepare($sql);
$sql->bindParam(':userid', $currentuser['userid']);
$res = array();
$sql->execute();
while ($rowdomains = $sql->fetch()) {
$res[] = array('domain' => ui_language::translate($rowdomains['vh_name_vc']));
}
return $res;
} else {
return false;
}
}
static function getDomainList()
{
$currentuser = ctrl_users::GetUserDetail();
return self::ListDomains($currentuser['userid']);
}
static function getEmailList()
{
$currentuser = ctrl_users::GetUserDetail();
return $currentuser['email'];
// return self::ListEmail($currentuser['userid']);
}
static function getQuotaLimit()
{
$currentuser = ctrl_users::GetUserDetail();
return ($currentuser['mailboxquota'] < 0) or //-1 = unlimited
($currentuser['mailboxquota'] > ctrl_users::GetQuotaUsages('mailboxes', $currentuser['userid']));
}
static function getResult()
{
if (!fs_director::CheckForEmptyValue(self::$tryagain)) {
return ui_sysmessage::shout(ui_language::translate("<strong>Error:</strong> Please try again Later. Server service not available."), "Error");
}
if (!fs_director::CheckForEmptyValue(self::$uploadfailed)) {
return ui_sysmessage::shout(ui_language::translate("Upload failed kindly re-upload your CRT files.."), "zannounceerror");
}
if (!fs_director::CheckForEmptyValue(self::$uploadcrt)) {
return ui_sysmessage::shout(ui_language::translate("Upload CRT files only.."), "zannounceerror");
}
if (!fs_director::CheckForEmptyValue(self::$uploadcrtempt)) {
return ui_sysmessage::shout(ui_language::translate("Kindly Choose CRT file for upload."), "zannounceerror");
}
if (!fs_director::CheckForEmptyValue(self::$crtempt)) {
return ui_sysmessage::shout(ui_language::translate("Kindly paste your CRT key in below TextBox.."), "zannounceerror");
}
if (!fs_director::CheckForEmptyValue(self::$csrfilenotexist)) {
return ui_sysmessage::shout(ui_language::translate("CSR and Key files are not generated. Kindly generate CSR and Key after regenerate CRT.."), "zannounceerror");
}
if (!fs_director::CheckForEmptyValue(self::$domainnotpointed)) {
return ui_sysmessage::shout(ui_language::translate("This CRT which has domain is not pointed with us.."), "zannounceerror");
}
if (!fs_director::CheckForEmptyValue(self::$invalidcrtfile)) {
return ui_sysmessage::shout(ui_language::translate("Your entered CRT is invalid. Kindly upload valid CRT Key.."), "zannounceerror");
}
if (!fs_director::CheckForEmptyValue(self::$crtexists)) {
return ui_sysmessage::shout(ui_language::translate("This CRT which has domain is already configured. If you want new Certificate kindly delete existing."), "zannounceerror");
}
if (!fs_director::CheckForEmptyValue(self::$UpadteSsl)) {
return ui_sysmessage::shout(ui_language::translate("Description Updated."), "zannounceok");
}
if (!fs_director::CheckForEmptyValue(self::$badname)) {
return ui_sysmessage::shout(ui_language::translate("Your Domain name is not valid. Please enter a valid Domain Name: i.e. 'domain.com'"), "zannounceerror");
}
if (!fs_director::CheckForEmptyValue(self::$badpointing)) {
return ui_sysmessage::shout(ui_language::translate("Your Domain name is not pointing to the IP"), "zannounceerror");
}
if (!fs_director::CheckForEmptyValue(self::$alreadyexists)) {
return ui_sysmessage::shout(ui_language::translate("Your Domain name is not registred on this server."), "zannounceerror");
}
if (!fs_director::CheckForEmptyValue(self::$ok)) {
return ui_sysmessage::shout(ui_language::translate("SSL Certificate created successfully."), "zannounceok");
}
if (!fs_director::CheckForEmptyValue(self::$del)) {
return ui_sysmessage::shout(ui_language::translate("SSL Certificate deleted successfully."), "zannounceok");
}
return "";
}
}