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