src/Security/AppAuth.php line 22

  1. <?php
  2. namespace App\Security;
  3. use App\Repository\UsuarioRepository;
  4. use AXS\Components\Utils\JWT;
  5. use DateInterval;
  6. use DateTime;
  7. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  12. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  13. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  14. use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
  15. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
  16. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
  17. use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
  18. use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
  19. use Symfony\Contracts\Translation\TranslatorInterface;
  20. class AppAuth extends AbstractLoginFormAuthenticator {
  21.     public function __construct(
  22.         private UrlGeneratorInterface $urlGenerator
  23.         private UsuarioRepository $urepo
  24.         private TranslatorInterface $trans,
  25.         private ParameterBagInterface $parameters
  26.     ){}
  27.     protected function getLoginUrl(Request $request): string {
  28.         return $this->urlGenerator->generate("cPanel_login");
  29.     }
  30.     public function authenticate(Request $request): Passport {
  31.         $badge = new UserBadge($request->get("_username"), function(string $userIdentifier){
  32.             return $this->urepo->findOneBy(["username" => $userIdentifier]);
  33.         });
  34.         return new Passport($badge, new PasswordCredentials($request->get("_password")), [new CsrfTokenBadge("inicio_sesión"$request->get("_csrf_token"))]);
  35.     }
  36.     public function onAuthenticationSuccess(Request $requestTokenInterface $tokenstring $firewallName): ?Response {
  37.         $token = new JWT($this->parameters->get("api_secret"));
  38.         $expDate = new DateTime();
  39.         $expDate->add(new DateInterval("P3D"));
  40.         $token->setExp($expDate);
  41.         $token->setNbf(new DateTime());
  42.         $token->setIss("webLogin");
  43.         $request->getSession()->set("apiToken"$token->getToken());
  44.         return new JsonResponse(["success" => true"action" => "redirect""url" => $this->urlGenerator->generate("cPanel_index")]);
  45.     }
  46.     public function onAuthenticationFailure(Request $requestAuthenticationException $exception): Response {
  47.         return new JsonResponse(["success" => false"errno" => $exception->getCode(), "error" => $this->trans->trans($exception->getMessage(), domain"messages"locale"es")], Response::HTTP_BAD_REQUEST);
  48.     }
  49. }