Browse Source

Store OAuth access token for every user

Jordi Boggiano 12 years ago
parent
commit
6d4307e12a

+ 26 - 0
src/Packagist/WebBundle/Entity/User.php

@@ -56,6 +56,12 @@ class User extends BaseUser
      */
     private $githubId;
 
+    /**
+     * @ORM\Column(type="string", length=255, nullable=true)
+     * @var string
+     */
+    private $githubToken;
+
     public function __construct()
     {
         $this->packages = new ArrayCollection();
@@ -171,4 +177,24 @@ class User extends BaseUser
     {
         $this->githubId = $githubId;
     }
+
+    /**
+     * Get githubId.
+     *
+     * @return string
+     */
+    public function getGithubToken()
+    {
+        return $this->githubToken;
+    }
+
+    /**
+     * Set githubToken.
+     *
+     * @param string $githubToken
+     */
+    public function setGithubToken($githubToken)
+    {
+        $this->githubToken = $githubToken;
+    }
 }

+ 9 - 2
src/Packagist/WebBundle/Security/Provider/UserProvider.php

@@ -45,6 +45,9 @@ class UserProvider implements OAuthAwareUserProviderInterface, UserProviderInter
 
         $previousUser = $this->userManager->findUserBy(array('githubId' => $username));
 
+        $user->setGithubId($username);
+        $user->setGithubToken($response->getAccessToken());
+
         // The account is already connected. Do nothing
         if ($previousUser === $user) {
             return;
@@ -53,11 +56,10 @@ class UserProvider implements OAuthAwareUserProviderInterface, UserProviderInter
         // 'disconnect' a previous account
         if (null !== $previousUser) {
             $previousUser->setGithubId(null);
+            $previousUser->setGithubToken(null);
             $this->userManager->updateUser($previousUser);
         }
 
-        $user->setGithubId($username);
-
         $this->userManager->updateUser($user);
     }
 
@@ -73,6 +75,11 @@ class UserProvider implements OAuthAwareUserProviderInterface, UserProviderInter
             throw new AccountNotLinkedException(sprintf('No user with github username "%s" was found.', $username));
         }
 
+        if (!$user->getGithubToken()) {
+            $user->setGithubToken($response->getAccessToken());
+            $this->userManager->updateUser($user);
+        }
+
         return $user;
     }