src/App/Controller/Api/TokenController.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\Model\Enum\UserRole;
  4. use App\Security\Voter\BelongUserVoter;
  5. use App\Traits\Autowired\Manager\TokenManagerTrait;
  6. use GollumSF\RestBundle\Annotation\Serialize;
  7. use GollumSF\RestBundle\Annotation\Unserialize;
  8. use GollumSF\RestBundle\Annotation\Validate;
  9. use GollumSF\RestDocBundle\Annotation\ApiDescribe;
  10. use App\Controller\AbstractController;
  11. use App\Entity\Token;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  13. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  16. /**
  17.  * @Route("/api/tokens")
  18.  * @ApiDescribe(Token::class)
  19.  */
  20. class TokenController extends AbstractController {
  21.     
  22.     use TokenManagerTrait;
  23.     /**
  24.      * @Route("/login", methods="POST")
  25.      * @ApiDescribe(
  26.      *     request={
  27.      *         "body"={
  28.      *             "properties"={
  29.      *                 "email":    { "type": "string" },
  30.      *                 "password": { "type": "string" }
  31.      *             }
  32.      *         }
  33.      *     }
  34.      * )
  35.      * @Serialize(groups={"token_get", "token_get_login"})
  36.      */
  37.     public function login() {
  38.         if (!$this->getUser()) {
  39.             throw new BadRequestHttpException('Authentication Required');
  40.         }
  41.         $this->tokenManager->clearRequestTokenIfUnnamed();
  42.         return $this->tokenManager->create($this->getUser(), $this->getParameter('token_lifetime'));
  43.     }
  44.     
  45.     /**
  46.      * @Route("/refresh", methods="PATCH")
  47.      * @IsGranted(UserRole::ROLE_USER)
  48.      * @Serialize(groups={"token_get", "token_get_login"})
  49.      */
  50.     public function refresh() {
  51.         return $this->tokenManager->create($this->getUser(), $this->getParameter('token_lifetime'));
  52.     }
  53.     /**
  54.      * @Route("", methods="GET")
  55.      * @IsGranted(UserRole::ROLE_USER)
  56.      * @Serialize(groups="token_get")
  57.      * @ApiDescribe(summary="Return generated token of current user")
  58.      */
  59.     public function list() {
  60.         return $this->tokenManager->apiFindNamedByUser($this->getUser());
  61.     }
  62.     /**
  63.      * @Route("", methods="POST")
  64.      * @IsGranted(UserRole::ROLE_USER)
  65.      * @Unserialize("token", groups="token_post", save=false)
  66.      * @Validate({ "token_post" })
  67.      * @Serialize(groups="user_get")
  68.      *
  69.      */
  70.     public function post(Token $token) {
  71.         return $this->tokenManager->createFromUser($token$this->getUser());
  72.     }
  73.     /**
  74.      * @Route("/{id}", methods="DELETE")
  75.      * @IsGranted(BelongUserVoter::BELONG, subject="token")
  76.      * @Serialize(groups="user_get")
  77.      *
  78.      */
  79.     public function delete(Token $token) {
  80.         return $this->tokenManager->delete($token);
  81.     }
  82. }