src/Security/User/ApiUserProvider.php line 11

Open in your IDE?
  1. <?php
  2. namespace App\Security\User;
  3. use Es\FootprintBundle\Services\Auth;
  4. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  5. use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
  6. use Symfony\Component\Security\Core\User\UserInterface;
  7. use Symfony\Component\Security\Core\User\UserProviderInterface;
  8. class ApiUserProvider implements UserProviderInterface
  9. {
  10.     private $es_footprint_auth;
  11.     public function __construct(Auth $es_footprint_auth)
  12.     {
  13.         $this->es_footprint_auth $es_footprint_auth;
  14.     }
  15.     public function loadUserByIdentifier($tokenizedUrl): UserInterface
  16.     {
  17.         return $this->loadUserByUsername($tokenizedUrl);
  18.     }
  19.     public function loadUserByUsername(string $tokenizedUrl): UserInterface
  20.     {
  21.         $response $this->es_footprint_auth->checkFootPrint($tokenizedUrl);
  22.         if ('error' == $response['status']) {
  23.             throw new AuthenticationException($response['message']);
  24.         }
  25.         $data $response['data'];
  26.         $username $data["_id"];
  27.         $contactMail = isset($data["email"]) ? $data["email"] : null;
  28.         $displayName = isset($data["displayName"]) ? $data["displayName"] : null;
  29.         $firstName = isset($data["firstName"]) ? $data["firstName"] : null;
  30.         $lastName = isset($data["lastName"]) ? $data["lastName"] : null;
  31.         $roles = ['ROLE_USER'];
  32.         $groups = [];
  33.         $applications = [];
  34.         $companies = [];
  35.         /* We gather user informations (roles, app, groups, companies) */
  36.         if (isset($data["roles"])) {
  37.             foreach ($data["roles"] as $role) {
  38.                 array_push($rolesstrtoupper($role));
  39.             }
  40.         }
  41.         if (isset($data["groups"])) {
  42.             foreach ($data["groups"] as $group) {
  43.                 array_push($groups$group["_id"]);
  44.             }
  45.         }
  46.         if (isset($data["applications"])) {
  47.             foreach ($data["applications"] as $application) {
  48.                 array_push($applications$application["_id"]);
  49.             }
  50.         }
  51.         if (isset($data["companyName"])) {
  52.             array_push($companies$data["companyName"]);
  53.         }
  54.         $apiUser = new ApiUser($username$contactMail$displayName$firstName$lastName$tokenizedUrl$roles$groups$companies$applications);
  55.         return $apiUser;
  56.     }
  57.     public function refreshUser(UserInterface $user)
  58.     {
  59.         if (!$user instanceof ApiUser) {
  60.             throw new UnsupportedUserException(
  61.                 sprintf('Instances of "%s" are not supported.'get_class($user))
  62.             );
  63.         }
  64.         return $this->loadUserByUsername($user->getApiKey());
  65.     }
  66.     public function supportsClass(string $class)
  67.     {
  68.         return ApiUser::class === $class;
  69.     }
  70. }