PageRenderTime 51ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/src/AppBundle/Service/OAuth/FacebookService.php

https://bitbucket.org/vismekhov/etickets-api
PHP | 111 lines | 57 code | 14 blank | 40 comment | 0 complexity | 5a5704f7c155978d1fe1fc71b053f67c MD5 | raw file
  1. <?php
  2. namespace AppBundle\Service\OAuth;
  3. use AppBundle\Entity\User;
  4. use Doctrine\ORM\EntityManager;
  5. use Facebook\Exceptions\FacebookSDKException;
  6. use Facebook\Facebook;
  7. use Facebook\GraphNodes\GraphUser;
  8. use OAuth2\OAuth2;
  9. use OAuth2\OAuth2ServerException;
  10. /**
  11. * Class FacebookService.
  12. */
  13. class FacebookService
  14. {
  15. /**
  16. * @var EntityManager
  17. */
  18. private $em;
  19. /**
  20. * @var Facebook
  21. */
  22. private $facebook;
  23. /**
  24. * @param string $accessToken
  25. *
  26. * @throws OAuth2ServerException
  27. * @throws FacebookSDKException
  28. *
  29. * @return \Facebook\GraphNodes\GraphUser
  30. */
  31. public function getUserProfile($accessToken)
  32. {
  33. try {
  34. $response = $this->getFacebook()->get('/me?fields=id,name,first_name,last_name', $accessToken);
  35. } catch (\Exception $e) {
  36. throw new OAuth2ServerException(OAuth2::HTTP_UNAUTHORIZED, OAuth2::ERROR_INVALID_REQUEST, sprintf('Error Graph API (%s)', $e->getMessage()));
  37. }
  38. return $response->getGraphUser();
  39. }
  40. /**
  41. * @param string $facebookId
  42. *
  43. * @return User|null
  44. */
  45. public function getUserFromGraph($facebookId)
  46. {
  47. $user = $this->getEm()->getRepository(User::class)->findOneBy(['facebookId' => $facebookId]);
  48. return $user;
  49. }
  50. /**
  51. * @param GraphUser $graphUser
  52. * @param string $userEmail
  53. *
  54. * @return User
  55. */
  56. public function createUserFromGraph(GraphUser $graphUser, $userEmail)
  57. {
  58. $user = new User();
  59. $user->setFacebookId($graphUser->getId());
  60. $user->setProvider(User::PROVIDER_FACEBOOK);
  61. $user->setPlainPassword(uniqid(md5($graphUser->getId())));
  62. $user->setRoles(['ROLE_USER']);
  63. $user->setFirstName($graphUser->getFirstName());
  64. $user->setLastName($graphUser->getLastName());
  65. $user->setEmail($userEmail);
  66. $user->setEnabled(true);
  67. return $user;
  68. }
  69. /**
  70. * @return EntityManager
  71. */
  72. public function getEm(): EntityManager
  73. {
  74. return $this->em;
  75. }
  76. /**
  77. * @param EntityManager $em
  78. */
  79. public function setEm(EntityManager $em)
  80. {
  81. $this->em = $em;
  82. }
  83. /**
  84. * @return Facebook
  85. */
  86. public function getFacebook(): Facebook
  87. {
  88. return $this->facebook;
  89. }
  90. /**
  91. * @param Facebook $facebook
  92. */
  93. public function setFacebook(Facebook $facebook)
  94. {
  95. $this->facebook = $facebook;
  96. }
  97. }