예제 #1
0
 public function testUpdateOAuthAccount()
 {
     $user = new Users\UserAggregate(1);
     $user->addOAuthAccount('facebook', 123, 'access', 'refresh', $time = \Mockery::mock('DateTime'));
     $user->addOAuthAccount('facebook', 123, 'access_updated', 'refresh_updated', $time = \Mockery::mock('DateTime'));
     $account = $user->getOAuthAccount('facebook');
     $this->assertEquals('access_updated', $account->getAccessToken());
     $this->assertEquals('refresh_updated', $account->getRefreshToken());
     $this->assertEquals($time, $account->getTokenExpiration());
     $this->assertNull($user->getOAuthAccount('non'));
 }
예제 #2
0
 /**
  * Find user with OAuth2 account or create new one and update OAuth2 tokens.
  * Persist only. Do not flush!
  *
  * @param $service
  * @param AccessToken $token
  * @param User $userData
  *
  * @return UserAggregate
  * @throws \Doctrine\ORM\NonUniqueResultException
  */
 public function persistOAuthAccount($service, AccessToken $token, User $userData)
 {
     $uid = $userData->uid;
     try {
         $user = $this->entityManager->createQueryBuilder()->select('ua')->from('Facilis\\Users\\UserAggregate', 'ua')->innerJoin('ua.oauthAccounts', 'oaa')->where('oaa.service = :service')->andWhere('oaa.uid = :uid')->setParameter('service', $service)->setParameter('uid', $uid)->setMaxResults(1)->getQuery()->getSingleResult();
     } catch (NoResultException $e) {
         $user = new UserAggregate();
     }
     $user->addOAuthAccount($service, $uid, $token->accessToken, $token->refreshToken, new \DateTime('@' . $token->expires));
     // Start the "circus"
     $this->entityManager->beginTransaction();
     // Assign identity
     $this->entityManager->persist($user);
     $this->entityManager->flush();
     // Callback must have identity assigned
     $this->onPersistOAuthAccount($user, $userData);
     // Update again
     $this->entityManager->persist($user);
     $this->entityManager->flush();
     // Commit the whole "circus"
     $this->entityManager->commit();
     return $user;
 }