Viewing File: /usr/local/cpanel/whostmgr/docroot/cgi/ncssl/source/src/Controller/ReissueController.php

<?php

namespace App\Controller;

use App\Entity\User;
use App\Model\GetReissueRequestDTO;
use App\Model\PostIssueRequestDTO;
use App\Model\ViewHelper;
use App\Repository\CertificateRepository;
use App\Service\Certificate\Activate;
use App\Service\Certificate\CertificateTransfer;
use App\Service\Certificate\ProductManager;
use App\Service\Certificate\Reissue;
use App\Service\CpanelHelper;
use App\Service\NcPlugin\NcApiException;
use App\Service\NcPlugin\PluginException;
use App\Service\PluginGateway\NcCoreApi;
use App\Traits\RouteGeneratorTrait;
use Symfony\Bridge\Twig\Attribute\Template;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Attribute\MapQueryString;
use Symfony\Component\HttpKernel\Attribute\MapRequestPayload;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\CurrentUser;

class ReissueController extends AbstractController
{
    use RouteGeneratorTrait;
    /**
     * @throws PluginException
     * @throws NcApiException
     */
    #[Route('reissue', name: 'reissue.get', methods: ['GET'])]
    #[Template('issue.html.twig')]
    public function getReissue(
        #[MapQueryString] GetReissueRequestDTO $reissueRequest,
        #[CurrentUser] User $user,
        CpanelHelper $cpanelHelper,
        ProductManager $productManager,
        CertificateRepository $certificateRepository,
        NcCoreApi $ncCoreApi,
    ): RedirectResponse|array
    {
        $userInfo = $ncCoreApi->getUserInfo();

        $viewData = [
            'actionUrl' => $this->getUrlByName('reissue.post'),
            'domains' => $cpanelHelper->getDomainsList(),
            'server_requirements' => [
                'ssl_domains' => $cpanelHelper->getSslDomains(),
            ],
            'form_data' => Activate::getFormPrefilling($userInfo),
            'errors' => [],
        ];

        if ($reissueRequest->id) {  //If we do reissue for already installed cert
            $installedCertificate = $certificateRepository->findOneBy([
                'id'=>$reissueRequest->id,
                'ncUser' => $user->getNcLogin()
            ]);

            if ($installedCertificate === null) {
                return $this->redirectToRoute('list.installed');
            }

            $info = $ncCoreApi->getInfo($installedCertificate->getNcId());

            if ($info['sans_count'] > 0) {
                $viewData['errors'][] = 'quickssl_premium_sans';
            }

            $viewData['product_data'] = [
                'nc_id' => $installedCertificate->getNcId(),
                'type' => $installedCertificate->getType(),
                'vendor' => $installedCertificate->getVendor(),
                'years' => $installedCertificate->getYears(),
                'status' => strtoupper($installedCertificate->getStatus()),
                'wildcard' => $productManager->isWildcard($installedCertificate->getType()),
                'reissue' => true,
            ];
        } elseif ($reissueRequest->nc_id) { //Reissue for cert that not installed on cPanel
            $info = $ncCoreApi->getInfo($reissueRequest->nc_id);

            if ($info['sans_count'] > 0) {
                $viewData['errors'][] = 'quickssl_premium_sans';
            }

            $viewData['product_data'] = [
                'nc_id' => $info['id'],
                'type' => $info['type'],
                'vendor' => $productManager->getCaName($info['type']),
                'years' => $reissueRequest->years,
                'status' => strtoupper($info['status']),
                'wildcard' => $productManager->isWildcard($info['type']),
                'reissue' => true,
            ];
        } else {
            return $this->redirectToRoute('list.installed');
        }

        $viewData['page'] = [
            'backLink' => $reissueRequest->nc_id ? $_SERVER['SCRIPT_NAME'] : $this->getUrlByName('list.installed'),
            'backLinkTxt' => $reissueRequest->nc_id ? ViewHelper::TITLE_READY_FOR_INSTALL : ViewHelper::TITLE_INSTALLED_VIA_PLUGIN,
        ];

        return $viewData;
    }

    #[Route('reissue', name: 'reissue.post', methods: ['POST'])]
    public function reissue(
        #[MapRequestPayload] PostIssueRequestDTO $reissueRequestDTO,
        #[CurrentUser] User $user,
        Reissue $reissueService,
    ): Response
    {
        $data = new CertificateTransfer(CertificateTransfer::prepareData($reissueRequestDTO->data));
        $data->setCPanelUser($user->getName());
        $data->setNCUser($user->getNcLogin());

        try {
            $reissueService->reissue($data);
        } catch (\Throwable $exception) {
            //@TODO Generate message in message keeper
            $this->addFlash('danger', sprintf('Can\'t reissue certificate for this domain: %s, code: %s', $exception->getMessage(), $exception->getCode()));
        }

        return $this->redirectToRoute('list.installed');
    }
}
Back to Directory File Manager