Viewing File: /usr/local/cpanel/base/frontend/jupiter/ls_web_cache_manager/core/EcCertSite.php
<?php
/** *********************************************
* LiteSpeed Web Cache Management Plugin for cPanel
*
* @author Michael Alegre
* @copyright 2020-2023 LiteSpeed Technologies, Inc.
* @since 2.1
* *******************************************
*/
namespace LsUserPanel;
use LsUserPanel\Lsc\UserLogger;
use LsUserPanel\Lsc\UserLSCMException;
/**
*
* @since 2.1
*/
class EcCertSite
{
/**
* @since 2.1
* @var string
*/
const FLD_HAS_SSL_VH = 'hasSslVhost';
/**
* @since 2.1
* @var string
*/
const FLD_DOCROOT = 'docroot';
/**
* @since 2.1
* @var string
*/
const FLD_SERVERNAME = 'serverName';
/**
* @since 2.1
* @var string
*/
const FLD_EC_EXISTS = 'ecExists';
/**
* @since 2.1
* @var string
*/
const FLD_EC_CERT_COVERED = 'ecCertCovered';
/**
* @since 2.1
* @var string
*/
const FLD_LAST_GEN_MSG = 'lastGenMsg';
/**
* @since 2.1
* @var array
*/
private $data;
/**
*
* @since 2.1
*
* @param string $docroot
* @param string $domain
* @param bool $sslVh
* @param bool $ecCert
* @param string[] $ecCertCovered,
* @param string $lastGenMsg
*/
public function __construct(
$docroot,
$domain,
$sslVh,
$ecCert,
array $ecCertCovered,
$lastGenMsg )
{
$this->init(
$docroot,
$domain,
$sslVh,
$ecCert,
$ecCertCovered,
$lastGenMsg
);
}
/**
*
* @since 2.1
*
* @param string $docroot
* @param string $domain
* @param bool $sslVh
* @param bool $ecCert
* @param string[] $ecCertCovered
* @param string $lastGenMsg
*/
private function init(
$docroot,
$domain,
$sslVh,
$ecCert,
array $ecCertCovered,
$lastGenMsg )
{
if ( ($realPath = realpath($docroot)) ) {
$docroot = $realPath;
}
$this->data = array(
self::FLD_DOCROOT => $docroot,
self::FLD_SERVERNAME => $domain,
self::FLD_HAS_SSL_VH => $sslVh,
self::FLD_EC_EXISTS => $ecCert,
self::FLD_EC_CERT_COVERED => $ecCertCovered,
self::FLD_LAST_GEN_MSG => $lastGenMsg
);
}
/**
*
* @since 2.1
*
* @return string
*/
public function __toString()
{
return sprintf(
"%s (docroot=%s hasSslVh=%d ecCertExists=%s "
. "coveredDomains=%s lastGenMsg=\"%s\")",
$this->data[self::FLD_SERVERNAME],
$this->data[self::FLD_DOCROOT],
(int)$this->data[self::FLD_HAS_SSL_VH],
(int)$this->data[self::FLD_EC_EXISTS],
implode(',', $this->data[self::FLD_EC_CERT_COVERED]),
$this->data[self::FLD_LAST_GEN_MSG]
);
}
/**
*
* @since 2.1
*
* @param string $field
*
* @return mixed|null
*/
public function getData( $field = '' )
{
if ( !$field ) {
return $this->data;
}
if ( !isset($this->data[$field]) ) {
/**
* Error out
*/
return null;
}
return $this->data[$field];
}
/**
*
* @since 2.1
*
* @return bool
*
* @throws UserLSCMException Thrown indirectly by UserLogger::addUiMsg()
* call.
* @throws UserLSCMException Thrown indirectly by UserLogger::logMsg()
* call.
*/
public function hasValidPath()
{
if ( !is_dir($this->data[self::FLD_DOCROOT]) ) {
UserLogger::addUiMsg(
"{$this->data[self::FLD_SERVERNAME]} - "
. _(
'DocRoot could not be found and has been removed from '
. 'EC Certificate Manger list.'
),
UserLogger::UI_ERR
);
UserLogger::logMsg(
"{$this->data[self::FLD_SERVERNAME]} - DocRoot could not be "
. 'found and has been removed from EC Certificate Manager '
. 'list.',
UserLogger::L_NOTICE
);
return false;
}
return true;
}
/**
*
* @since 2.1
*
* @param string $msg
*/
private function setLastGenerationMessage( $msg )
{
$this->data[self::FLD_LAST_GEN_MSG] =
'[' . date('Y-m-d H:i:s', time()) . "] $msg";
}
/**
*
* @since 2.1
*
* @throws UserLSCMException Thrown indirectly by UserLogger::debug() call.
* @throws UserLSCMException Thrown indirectly by UserLogger::debug() call.
* @throws UserLSCMException Thrown indirectly by UserLogger::addUiMsg()
* call.
* @throws UserLSCMException Thrown indirectly by UserLogger::addUiMsg()
* call.
* @throws UserLSCMException Thrown indirectly by UserLogger::addUiMsg()
* call.
*/
public function generateEcCert()
{
$serverName = $this->getData(self::FLD_SERVERNAME);
$result = CPanelWrapper::getCpanelObj()->uapi(
'lsws',
'generateEcCert',
array( 'domain' => $serverName )
);
$data = $result['cpanelresult']['result']['data'];
$retVar = $data['retVar'];
UserLogger::debug("EcCert command generate=$retVar for $serverName");
if ( !empty(($output = $data['output'])) ) {
UserLogger::debug('output = ' . var_export($output, true));
$this->setLastGenerationMessage($output);
}
$ecCert = (bool)$data['ecCert'];
if ( $retVar == 0 ) {
UserLogger::addUiMsg(
"$serverName - "
. _('Successfully generated a new EC certificate.'),
UserLogger::UI_SUCC
);
}
elseif ( $ecCert ) {
UserLogger::addUiMsg(
"$serverName - "
. _('EC certificate already exists, no need to generate.'),
UserLogger::UI_SUCC
);
}
else {
UserLogger::addUiMsg(
"$serverName - "
. _('Failed to generate a new EC certificate.'),
UserLogger::UI_ERR
);
}
$this->data[self::FLD_HAS_SSL_VH] = (bool)$data['sslVh'];
$this->data[self::FLD_EC_EXISTS] = $ecCert;
$this->data[self::FLD_EC_CERT_COVERED] =
Ls_WebCacheMgr_Util::getCertificateAltNames(
$data['ecCertFingerprint']
)
;
}
/**
*
* @since 2.1
*
* @throws UserLSCMException Thrown indirectly by UserLogger::debug() call.
* @throws UserLSCMException Thrown indirectly by UserLogger::debug() call.
* @throws UserLSCMException Thrown indirectly by UserLogger::addUiMsg()
* call.
* @throws UserLSCMException Thrown indirectly by UserLogger::addUiMsg()
* call.
* @throws UserLSCMException Thrown indirectly by UserLogger::addUiMsg()
* call.
* @throws UserLSCMException Thrown indirectly by UserLogger::addUiMsg()
* call.
*/
public function removeEcCert()
{
$serverName = $this->getData(self::FLD_SERVERNAME);
$result = CPanelWrapper::getCpanelObj()->uapi(
'lsws',
'removeEcCert',
array( 'domain' => $serverName )
);
$data = $result['cpanelresult']['result']['data'];
$retVar = $data['retVar'];
UserLogger::debug("EcCert command remove=$retVar for $serverName");
if ( !empty(($output = $data['output'])) ) {
UserLogger::debug('output = ' . var_export($output, true));
}
switch ( $retVar ) {
case 0:
UserLogger::addUiMsg(
"$serverName - "
. _('Successfully removed EC certificate.'),
UserLogger::UI_SUCC
);
break;
case 100:
UserLogger::addUiMsg(
"$serverName - " . _('Domain not found.'),
UserLogger::UI_ERR
);
break;
case 101:
UserLogger::addUiMsg(
"$serverName - " . _('No EC certificate found.'),
UserLogger::UI_SUCC
);
break;
default:
UserLogger::addUiMsg(
"$serverName - " . _('Failed to remove EC certificate.'),
UserLogger::UI_ERR
);
}
$this->data[self::FLD_HAS_SSL_VH] = (bool)$data['sslVh'];
$this->data[self::FLD_EC_EXISTS] = (bool)$data['ecCert'];
$this->data[self::FLD_EC_CERT_COVERED] =
Ls_WebCacheMgr_Util::getCertificateAltNames(
$data['ecCertFingerprint']
)
;
}
}
Back to Directory
File Manager