src/App/Manager/TokenManager.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Manager;
  3. use App\Entity\Token;
  4. use App\Entity\User;
  5. use App\Traits\Autowired\Manager\UserManagerTrait;
  6. use App\Traits\Autowired\Vendor\RequestStackTrait;
  7. use App\Traits\Autowired\Vendor\TokenStorageTrait;
  8. use Doctrine\ORM\QueryBuilder;
  9. use GollumSF\RestBundle\Model\ApiList;
  10. use Symfony\Component\HttpFoundation\Request;
  11. class TokenManager extends AbstractEntityManager {
  12.     
  13.     use UserManagerTrait;
  14.     use TokenStorageTrait;
  15.     use RequestStackTrait;
  16.     
  17.     private $alreadyClear false;
  18.     /**
  19.      * @return ?Token
  20.      */
  21.     public function find($id) {
  22.         $this->clearOldUnnamedToken();
  23.         return parent::find($id);
  24.     }
  25.     
  26.     public function create(User $userint $lifetime null): ?Token {
  27.         $this->clearOldUnnamedToken();
  28.         return $this->update(new Token(
  29.             $user,
  30.             $this->userManager->getAllRightFromUser($user),
  31.             $lifetime
  32.         ));
  33.     }
  34.     
  35.     public function createFromUser(Token $tokenUser $user): Token {
  36.         return $this->update(new Token(
  37.             $user,
  38.             array_intersect($token->getRights(), $this->userManager->getAllRightFromUser($user)),
  39.             $token->getLifetime(),
  40.             $token->getName()
  41.         ));
  42.     }
  43.     
  44.     public function getTokenIdIdFromRequest(Request $request): string {
  45.         $tokenId $request->query->get('token''');
  46.         if ($tokenId === '') {
  47.             $authorization $request->headers->get('authorization');
  48.             if (strpos($authorization'BEARER ') === 0) {
  49.                 $tokenId substr($authorizationstrlen('BEARER '));
  50.             }
  51.         }
  52.         return $tokenId;
  53.     }
  54.     
  55.     public function clearRequestTokenIfUnnamed(): void {
  56.         $tokenId $this->getTokenIdIdFromRequest($this->requestStack->getMasterRequest());
  57.         if ($tokenId) {
  58.             $token $this->find($tokenId);
  59.             if ($token && !$token->getName()) {
  60.                 $this->delete($token);
  61.             }    
  62.         }
  63.     }
  64.     public function clearUnnamedTokenFromUser(User $user): void {
  65.         $this->getRepository()->clearUnnamedTokenFromUser($user);
  66.     }
  67.     
  68.     public function clearOldUnnamedToken(): void {
  69.         if (!$this->alreadyClear) {
  70.             $this->alreadyClear true;
  71.             $this->getRepository()->clearOldUnnamedToken();
  72.         }
  73.     }
  74.     
  75.     public function apiFindNamedByUser(User $user): ApiList {
  76.         return parent::apiFindBy(function (QueryBuilder $queryBuilder) use ($user) {
  77.             $queryBuilder
  78.                 ->andWhere('t.user = :user')
  79.                 ->andWhere('t.name IS NOT NULL')
  80.                 ->setParameter('user'$user)
  81.             ;
  82.         });
  83.     }
  84. }