src/Bidcoz/Bundle/CoreBundle/Security/NvidiaUserProvider.php line 17

Open in your IDE?
  1. <?php
  2. namespace Bidcoz\Bundle\CoreBundle\Security;
  3. use Bidcoz\Bundle\CoreBundle\Entity\Campaign;
  4. use Bidcoz\Bundle\CoreBundle\Entity\Config;
  5. use Bidcoz\Bundle\CoreBundle\Entity\Organization;
  6. use Bidcoz\Bundle\CoreBundle\Entity\Terms\UserTerms;
  7. use Bidcoz\Bundle\CoreBundle\Entity\User;
  8. use Doctrine\Persistence\ObjectManager;
  9. use FOS\UserBundle\Model\UserManagerInterface;
  10. use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
  11. use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\Security\Core\User\UserInterface;
  14. class NvidiaUserProvider extends FOSUBUserProvider
  15. {
  16.     protected ObjectManager $em;
  17.     private RequestStack $requestStack;
  18.     public function __construct(
  19.         UserManagerInterface $userManager,
  20.         array $properties,
  21.         ObjectManager $em,
  22.         RequestStack $requestStack
  23.     )
  24.     {
  25.         parent::__construct($userManager$properties);
  26.         $this->em      $em;
  27.         $this->requestStack $requestStack;
  28.     }
  29.     public function connect(UserInterface $userUserResponseInterface $response)
  30.     {
  31.         $property $this->getProperty($response);
  32.         $username $response->getUsername();
  33.         $existingUser $this->userManager->findUserBy([$property => $username]);
  34.         if (null !== $existingUser) {
  35.             $user->setGoogleId(null);
  36.             $this->userManager->updateUser($existingUser);
  37.         }
  38.         // we connect current user, set current user id and token
  39.         $this->updateUser($user$response);
  40.         $this->userManager->updateUser($user);
  41.     }
  42.     /**
  43.      * {@inheritdoc}
  44.      */
  45.     public function loadUserByOAuthUserResponse(UserResponseInterface $response)
  46.     {
  47.         $userEmail $response->getEmail();
  48.         $user      $this->userManager->findUserByEmail($userEmail);
  49.         // if null just create new user and set it properties
  50.         if (null === $user) {
  51.             $user = new User();
  52.             $user->setTimezone('America/Los_Angeles');
  53.         }
  54.         $this->updateUser($user$response);
  55.         return $user;
  56.     }
  57.     private function updateUser(User $userUserResponseInterface $response)
  58.     {
  59.         // Log this for now
  60.         file_put_contents('/tmp/nvidia.txt'var_export($response->getData(), true), FILE_APPEND);
  61.         $org      $this->getOranization();
  62.         $campaign $this->getCampaign($org);
  63.         $name      $response->getFirstName();
  64.         $nameParts explode(' '$name);
  65.         $firstName count($nameParts) > $nameParts[0] : '';
  66.         $lastName  count($nameParts) > $nameParts[1] : '';
  67.         $username $response->getUsername();
  68.         $user->setUsername($username);
  69.         $user->setEmail($response->getEmail());
  70.         if (count($nameParts) && !$user->hasName()) {
  71.             $user->setFirstName($firstName);
  72.             $user->setLastName($lastName);
  73.         }
  74.         $user->setNvidiaId($response->getUsername());
  75.         $user->setEnabled(true);
  76.         $user->setLoggedIn(true);
  77.         $user->setLastVisitOrganization($org);
  78.         $user->setLastVisitCampaign($campaign);
  79.         // Auto set them to accept the terms
  80.         $user->setUserTerms($this->getCurrentUserTerms());
  81.         $this->userManager->updateUser($user);
  82.         // Set the redirect info into the session
  83.         $routeInfo = [
  84.             'route'       => 'campaign_home',
  85.             'routeParams' => [
  86.                 'orgSlug'      => $org->getSlug(),
  87.                 'campaignSlug' => $campaign->getSlug(),
  88.             ],
  89.         ];
  90.         $this->requestStack->getSession()->set('_redirect_info'$routeInfo);
  91.     }
  92.     protected function getOranization(): Organization
  93.     {
  94.         return $this->em->getRepository(Organization::class)->findOneBySlug('nvidia');
  95.     }
  96.     protected function getCampaign(Organization $organization): Campaign
  97.     {
  98.         return $this->em->getRepository(Campaign::class)->findOrganizationCampaignBySlug($organization'kindness2024');
  99.     }
  100.     private function getCurrentUserTerms(): UserTerms
  101.     {
  102.         return $this->em
  103.             ->getRepository(Config::class)
  104.             ->findActiveConfig()
  105.             ->getUserTerms();
  106.     }
  107. }