Sindbad~EG File Manager

Current Path : /opt/nginxhttpd_/vendor/extensions-cpanel/cpanel-development-lib/src/Helper/
Upload File :
Current File : //opt/nginxhttpd_/vendor/extensions-cpanel/cpanel-development-lib/src/Helper/SslHelper.php

<?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