<?php
namespace AppBundle\Security;
use AppBundle\Entity\User;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
use Symfony\Component\Security\Http\Authenticator\AbstractAuthenticator;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport;
use Symfony\Component\Security\Core\User\UserProviderInterface;
class LegacyAuthenticator extends AbstractAuthenticator
{
private $userProvider;
public function __construct(UserProviderInterface $userProvider)
{
global $_SESSION;
$this->userProvider = $userProvider;
}
// public function createToken(Passport $passport, $firewallName): TokenInterface
// {
// // Force session load via session access
// $user = null;
// if (!empty($_SESSION['Login'])) {
// if ($_SESSION['Login']['UserType'] === 'admin') {
// $user = array(User::USER_TYPE_ADMIN, $_SESSION['Login']['AdminId']);
// }
// elseif ($_SESSION['Login']['UserType'] === 'employer') {
// $user = array(User::USER_TYPE_EMPLOYER, $_SESSION['Login']['EmployerId']);
// }
// elseif ($_SESSION['Login']['UserType'] === 'participant') {
// $user = array(User::USER_TYPE_PARTICIPANT, $_SESSION['Login']['ParticipantId']);
// }
// elseif ($_SESSION['Login']['UserType'] === 'reseller') {
// $user = array(User::USER_TYPE_RESELLER, $_SESSION['Login']['ResellerId']);
// }
// elseif ($_SESSION['Login']['UserType'] === 'supervisor') {
// $user = array(User::USER_TYPE_SUPERVISOR, $_SESSION['Login']['UserId']); // NOTE: SupervisorId is the top-level supervisor, but UserId is the actual supervisor
// }
// }
// if ($user === null) {
// throw new BadCredentialsException('No credentials');
// }
// return new CustomOauthToken($passport->getUser(), $passport->getAttribute('scope'));
// // dd($user);
// // return $user;
// }
public function supports(Request $request): ?bool
{
$_SESSION = isset($_COOKIE['language']) ? unserialize($_COOKIE['language']) : "";
$t = isset($_COOKIE['language']) ? true : false;
return $t;
}
public function authenticate(Request $request): Passport
{
$apiToken = isset($_SESSION['AdminLogin']['Login']) ? $_SESSION['AdminLogin']['Login'] : $_SESSION['Login'];
if (null === $apiToken) {
throw new CustomUserMessageAuthenticationException('No API token provided');
}
return new SelfValidatingPassport(
new UserBadge($apiToken, function ($userIdentifier) {
$user = $this->userProvider->loadUserByUsername($userIdentifier);
return $user;
})
);
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response
{
// Return null to let the request continue
return null;
}
public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response
{
$data = [
'message' => $exception->getMessage()
];
return new JsonResponse($data, Response::HTTP_UNAUTHORIZED);
}
}