/src/AppBundle/Service/OAuth/FacebookService.php
PHP | 111 lines | 57 code | 14 blank | 40 comment | 0 complexity | 5a5704f7c155978d1fe1fc71b053f67c MD5 | raw file
- <?php
- namespace AppBundle\Service\OAuth;
- use AppBundle\Entity\User;
- use Doctrine\ORM\EntityManager;
- use Facebook\Exceptions\FacebookSDKException;
- use Facebook\Facebook;
- use Facebook\GraphNodes\GraphUser;
- use OAuth2\OAuth2;
- use OAuth2\OAuth2ServerException;
- /**
- * Class FacebookService.
- */
- class FacebookService
- {
- /**
- * @var EntityManager
- */
- private $em;
- /**
- * @var Facebook
- */
- private $facebook;
- /**
- * @param string $accessToken
- *
- * @throws OAuth2ServerException
- * @throws FacebookSDKException
- *
- * @return \Facebook\GraphNodes\GraphUser
- */
- public function getUserProfile($accessToken)
- {
- try {
- $response = $this->getFacebook()->get('/me?fields=id,name,first_name,last_name', $accessToken);
- } catch (\Exception $e) {
- throw new OAuth2ServerException(OAuth2::HTTP_UNAUTHORIZED, OAuth2::ERROR_INVALID_REQUEST, sprintf('Error Graph API (%s)', $e->getMessage()));
- }
- return $response->getGraphUser();
- }
- /**
- * @param string $facebookId
- *
- * @return User|null
- */
- public function getUserFromGraph($facebookId)
- {
- $user = $this->getEm()->getRepository(User::class)->findOneBy(['facebookId' => $facebookId]);
- return $user;
- }
- /**
- * @param GraphUser $graphUser
- * @param string $userEmail
- *
- * @return User
- */
- public function createUserFromGraph(GraphUser $graphUser, $userEmail)
- {
- $user = new User();
- $user->setFacebookId($graphUser->getId());
- $user->setProvider(User::PROVIDER_FACEBOOK);
- $user->setPlainPassword(uniqid(md5($graphUser->getId())));
- $user->setRoles(['ROLE_USER']);
- $user->setFirstName($graphUser->getFirstName());
- $user->setLastName($graphUser->getLastName());
- $user->setEmail($userEmail);
- $user->setEnabled(true);
- return $user;
- }
- /**
- * @return EntityManager
- */
- public function getEm(): EntityManager
- {
- return $this->em;
- }
- /**
- * @param EntityManager $em
- */
- public function setEm(EntityManager $em)
- {
- $this->em = $em;
- }
- /**
- * @return Facebook
- */
- public function getFacebook(): Facebook
- {
- return $this->facebook;
- }
- /**
- * @param Facebook $facebook
- */
- public function setFacebook(Facebook $facebook)
- {
- $this->facebook = $facebook;
- }
- }