Sindbad~EG File Manager
<?php
namespace O2switch\CpanelLib\Helper;
use O2switch\CpanelLib\Client\CpanelApi;
/**
* This class is used to parse cPanel response from O2switch\Api\cPanel, to detect SSL configuration and extract
* relevant data like the CRT, KEY, Cabundle etc...
* Class Ssl.
*/
class SslHelper
{
/**
* Return the an array with info (main_domain, domains, id) for $domain if present in $data. Otherwise, return false.
* @param array $data ['result'] from UAPI SSL::installed_hosts called with O2switch\cPanel
* @param string $domain
* @return array|null
*/
public static function extractSSL(array $data, string $domain) : ?array
{
$return = null;
foreach ($data as $ssl) {
if (in_array($domain, $ssl['certificate']['domains'])) {
$return = [
'main_domain' => $domain,
'domains' => $ssl['certificate']['domains'],
'id' => $ssl['certificate']['id'],
];
break;
}
}
// Fallback if nothing if found in the certificate, fqdns contains more domain/subdomain
if($return === null){
foreach ($data as $ssl) {
if (in_array($domain, $ssl['fqdns'])) {
$return = [
'main_domain' => $domain,
'domains' => $ssl['fqdns'],
'id' => $ssl['certificate']['id'],
];
break;
}
}
}
return $return;
}
/**
* Return the SSL crt, key, cabundle found in $data or return false.
* @param array $data ['result'] from UAPI SSL::fetch_cert_info called with O2switch\cPanel
* @return array|null
*/
public static function extractSslInfo(array $data, array $moreData = []) : ?array
{
$return = [];
foreach (['certificate', 'cabundle', 'key'] as $k) {
if (array_key_exists($k, $data)) {
$return[$k] = $data[$k];
}
}
if (count($return) === 3) {
if(empty($return['certificate'])){
return null;
}
// Fallback with data from UAPI fetch_key_and_cabundle_for_certificate
if(empty($return['key']) && isset($moreData['key']) && !empty($moreData['key'])){
$return['key'] = $moreData['key'];
if(empty($return['cabundle']) && isset($moreData['cab']) && !empty($moreData['cab'])){
$return['cabundle'] = $moreData['cab'];
}
}
if(empty($return['key'])){
return null;
}
return $return;
}
return null;
}
/**
* Return the Let's Encrypt SSL NVData (containing the SSL stuff for each domain) or false if NVData is empty or an
* error occurred
* @param CpanelApi $cpanel
* @return array|null
*/
public static function getLetsEncryptNVData(CpanelApi $cpanel) : ?array {
$raw = $cpanel->uapi('NVData', 'get', ['names'=>'letsencrypt-cpanel']);
if ($raw['errors'] !== null || $raw['status'] !== 1) {
return null;
}
if(!isset($raw['result']) || !isset($raw['result'][0]) || !isset($raw['result'][0]['value'])){
return null;
}
if($raw['result'][0]['value'] === null){
return null;
}
$data = json_decode($raw['result'][0]['value'], true);
if(!is_array($data) || json_last_error() !== JSON_ERROR_NONE){
return null;
}
if(isset($data['certs'])){
return $data['certs'];
}
return null;
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists