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