Viewing File: /usr/local/cpanel/whostmgr/docroot/cgi/ncssl/source/src/Controller/ActivationController.php
<?php
namespace App\Controller;
use App\Entity\Certificate;
use App\Entity\User;
use App\Model\GetActivateRequestDTO;
use App\Model\PostIssueRequestDTO;
use App\Model\ViewHelper;
use App\Service\Certificate\Activate;
use App\Service\Certificate\CertificateTransfer;
use App\Service\Certificate\ProductManager;
use App\Service\Certificate\Certificate as CertificateService;
use App\Service\CpanelHelper;
use App\Service\NcPlugin\InvalidAccessTokenNcApiException;
use App\Service\NcPlugin\NcApiException;
use App\Service\NcPlugin\PluginException;
use App\Service\PluginGateway\NcCoreApi;
use App\Traits\RouteGeneratorTrait;
use Psr\Log\LoggerInterface;
use Symfony\Bridge\Twig\Attribute\Template;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
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 ActivationController extends AbstractController
{
use RouteGeneratorTrait;
/**
* @throws PluginException
*/
#[Route('activation', name: 'activation.get', methods: ['GET'])]
#[Template('issue.html.twig')]
public function getActivation(
#[MapQueryString] GetActivateRequestDTO $activateRequest,
NcCoreApi $ncApi,
LoggerInterface $logger,
CpanelHelper $cpanel,
ProductManager $productManager,
CertificateService $certificateService,
): array
{
try {
$sslInfo = $ncApi->getInfo($activateRequest->id);
$userInfo = $ncApi->getUserInfo();
} catch (NcApiException|InvalidAccessTokenNcApiException $exception) {
$logger->error('We\'ve failed to get info about cert', ['exception' => $exception->getMessage()]);
}
$viewData = [
'actionUrl' => $this->getUrlByName('activation.post'),
'domains' => $cpanel->getDomainsList(),
'freeCertificatesInfo' => $certificateService->getFreeCertificatesInfo(),
'server_requirements' => [
'ssl_domains' => $cpanel->getSslDomains(),
],
'product_data' => [
'nc_id' => $activateRequest->id,
'type' => $sslInfo['type'],
'vendor' => $productManager->getCaName($sslInfo['type']),
'years' => $activateRequest->years,
'status' => strtoupper($sslInfo['status']),
'wildcard' => $productManager->isWildcard($sslInfo['type']),
'common_name' => $sslInfo['common_name'],
],
'form_data' => Activate::getFormPrefilling($userInfo),
'errors' => [],
];
if ($sslInfo['sans_count'] > 0) {
$viewData['errors'][] = 'quickssl_premium_sans';
}
if ($sslInfo['status'] === Certificate::NCSTATUS_NEWPURCHASE) {
$viewData['page'] = [
'backLink' => $_SERVER['SCRIPT_NAME'],
'backLinkTxt' => ViewHelper::TITLE_READY_FOR_INSTALL,
];
} else {
$viewData['page'] = [
'backLink' => $this->getUrlByName('list.installed'),
'backLinkTxt' => ViewHelper::TITLE_INSTALLED_VIA_PLUGIN,
];
}
return $viewData;
}
#[Route('activation', name: 'activation.post', methods: ['POST'])]
public function activation(
#[MapRequestPayload] PostIssueRequestDTO $activateRequestDTO,
#[CurrentUser] User $user,
Activate $activate,
): Response
{
$data = new CertificateTransfer(CertificateTransfer::prepareData($activateRequestDTO->data));
$data->setCPanelUser($user->getName());
$data->setNCUser($user->getNcLogin());
try {
$activate->activate($data, false);
} catch (\Throwable $exception) {
//@TODO Generate message in message keeper
$this->addFlash('danger', sprintf('Can\'t activate certificate for this domain: %s, code: %s', $exception->getMessage(), $exception->getCode()));
}
return $this->redirectToRoute('list.installed');
}
}
Back to Directory
File Manager