OAuthRegistrationFormHandler.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. /*
  3. * This file is part of Packagist.
  4. *
  5. * (c) Jordi Boggiano <j.boggiano@seld.be>
  6. * Nils Adermann <naderman@naderman.de>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Packagist\WebBundle\Form\Handler;
  12. use FOS\UserBundle\Model\UserManagerInterface;
  13. use FOS\UserBundle\Util\TokenGeneratorInterface;
  14. use HWI\Bundle\OAuthBundle\Form\RegistrationFormHandlerInterface;
  15. use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
  16. use Symfony\Component\Form\Form;
  17. use Symfony\Component\HttpFoundation\Request;
  18. /**
  19. * OAuthRegistrationFormHandler
  20. *
  21. * @author Alexander <iam.asm89@gmail.com>
  22. */
  23. class OAuthRegistrationFormHandler implements RegistrationFormHandlerInterface
  24. {
  25. private $userManager;
  26. private $tokenGenerator;
  27. /**
  28. * Constructor.
  29. *
  30. * @param UserManagerInterface $userManager
  31. * @param TokenGeneratorInterface $tokenGenerator
  32. */
  33. public function __construct(UserManagerInterface $userManager, TokenGeneratorInterface $tokenGenerator)
  34. {
  35. $this->tokenGenerator = $tokenGenerator;
  36. $this->userManager = $userManager;
  37. }
  38. /**
  39. * {@inheritDoc}
  40. */
  41. public function process(Request $request, Form $form, UserResponseInterface $userInformation)
  42. {
  43. $user = $this->userManager->createUser();
  44. // Try to get some properties for the initial form when coming from github
  45. if ('GET' === $request->getMethod()) {
  46. $user->setUsername($this->getUniqueUsername($userInformation->getNickname()));
  47. }
  48. $form->setData($user);
  49. if ('POST' === $request->getMethod()) {
  50. $form->bind($request);
  51. if ($form->isValid()) {
  52. $randomPassword = $this->tokenGenerator->generateToken();
  53. $user->setPlainPassword($randomPassword);
  54. $user->setEnabled(true);
  55. $apiToken = substr($this->tokenGenerator->generateToken(), 0, 20);
  56. $user->setApiToken($apiToken);
  57. return true;
  58. }
  59. }
  60. return false;
  61. }
  62. /**
  63. * Attempts to get a unique username for the user.
  64. *
  65. * @param string $name
  66. *
  67. * @return string Name, or empty string if it failed after 10 times
  68. *
  69. * @see HWI\Bundle\OAuthBundle\Form\FOSUBRegistrationHandler
  70. */
  71. protected function getUniqueUserName($name)
  72. {
  73. $i = 0;
  74. $testName = $name;
  75. do {
  76. $user = $this->userManager->findUserByUsername($testName);
  77. } while ($user !== null && $i < 10 && $testName = $name.++$i);
  78. return $user !== null ? '' : $testName;
  79. }
  80. }