Viewing File: /usr/local/cpanel/whostmgr/docroot/cgi/ncssl/source/src/Service/State/StateUser.php
<?php
namespace App\Service\State;
use App\Entity\Certificate;
use App\Entity\User;
use App\Service\CpanelApi\Adapter\CliAdapter;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use KnpU\OAuth2ClientBundle\Client\ClientRegistry;
use League\OAuth2\Client\Token\AccessToken;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\Security\Core\User\UserInterface;
class StateUser
{
private ?UserInterface $user;
public function __construct(
private readonly EntityManagerInterface $entityManager,
private readonly Security $security,
private readonly ClientRegistry $clientRegistry,
private readonly CliAdapter $adapter,
) {
$this->user = $this->security->getUser();
}
public function getAccessToken(): ?AccessToken
{
$user = $this->getUser();
$accessToken = $user->getAccessToken();
if (!$accessToken) {
return null;
}
if ($accessToken->hasExpired()) {
$accessToken = $this->clientRegistry->getClient('namecheap')->refreshAccessToken($accessToken->getRefreshToken(), ['access_token' => $accessToken->getToken()]);
$user->setAccessToken($accessToken);
$this->entityManager->flush();
}
return $user->getAccessToken();
}
/**
* @return UserInterface
*/
public function getUser(): UserInterface
{
return $this->user ?? $this->setUserByName($_SERVER['USER']);
}
/**
* @param User|null $user
*/
public function setUser(?User $user): void
{
if ($user) {
$this->adapter->setUsername($user->getName());
}
$this->user = $user;
}
/**
* @param string $name
*
* @return UserInterface
*/
public function setUserByName(string $name): UserInterface
{
$user = $this->entityManager->getRepository(User::class)->findOneBy(['name' => $name]);
if (!$user) {
$user = new User();
$user->setName($name);
$this->entityManager->persist($user);
$this->entityManager->flush();
}
$this->setUser($user);
return $this->getUser();
}
/**
* @throws Exception
*/
public function setUserByCertificateId(int $certificateId): UserInterface
{
$certificate = $this->entityManager->getRepository(Certificate::class)->find($certificateId);
if (!$certificate) {
throw new \RuntimeException(sprintf('Can\'t find user by certificateId: %s, certificate not found', $certificateId));
}
$user = $certificate->getUser();
$this->setUser($user);
return $this->getUser();
}
}
Back to Directory
File Manager