/**
  * @param UserEmailOrigin $origin
  *
  * @return string
  */
 public function getAccessTokenWithCheckingExpiration(UserEmailOrigin $origin)
 {
     $expiresAt = $origin->getAccessTokenExpiresAt();
     $utcTimeZone = new \DateTimeZone('UTC');
     $now = new \DateTime('now', $utcTimeZone);
     $token = $origin->getAccessToken();
     //if token had been expired, the new one must be generated and saved to DB
     if ($now > $expiresAt && $this->configManager->get('oro_imap.enable_google_imap')) {
         $parameters = ['refresh_token' => $origin->getRefreshToken(), 'grant_type' => 'refresh_token'];
         $attemptNumber = 0;
         do {
             $attemptNumber++;
             $response = $this->doHttpRequest($parameters);
             if (!empty($response['access_token'])) {
                 $token = $response['access_token'];
                 $origin->setAccessToken($token);
                 $newExpireDate = new \DateTime('+' . $response['expires_in'] . ' seconds', $utcTimeZone);
                 $origin->setAccessTokenExpiresAt($newExpireDate);
                 $this->doctrine->getManager()->persist($origin);
                 $this->doctrine->getManager()->flush();
             }
         } while ($attemptNumber <= self::RETRY_TIMES && empty($response['access_token']));
     }
     return $token;
 }
Exemplo n.º 2
0
 public function testExtendForm()
 {
     $form = $this->getMockBuilder('Symfony\\Component\\Form\\Form')->disableOriginalConstructor()->getMock();
     $form->expects($this->exactly(2))->method('add')->will($this->returnSelf());
     $form->expects($this->once())->method('remove')->will($this->returnSelf());
     $userEmailOrigin = new UserEmailOrigin();
     $userEmailOrigin->setAccessToken('test_string_token');
     $formEvent = new FormEvent($form, $userEmailOrigin);
     $this->listener->extendForm($formEvent);
 }
Exemplo n.º 3
0
 /**
  * @param string $password
  * @param string $accessToken
  *
  * @dataProvider setDataProviderSmtpConfiguredSuccess
  */
 public function testIsSmtpConfiguredSuccess($password, $accessToken)
 {
     $origin = new UserEmailOrigin();
     $origin->setSmtpHost('host');
     $origin->setSmtpPort(25);
     $origin->setUser('test');
     $origin->setPassword($password);
     $origin->setAccessToken($accessToken);
     $origin->setSmtpEncryption('ssl');
     $this->assertTrue($origin->isSmtpConfigured());
 }
Exemplo n.º 4
0
 /**
  * @param FormEvent $formEvent
  */
 public function setToken(FormEvent $formEvent)
 {
     $form = $formEvent->getForm();
     /** @var UserEmailOrigin $emailOrigin */
     $emailOrigin = $form->getData();
     if (null === $emailOrigin || null === $emailOrigin->getAccessToken()) {
         $data = $formEvent->getData();
         if (null == $data) {
             return;
         }
         $emailOrigin = new UserEmailOrigin();
         $emailOrigin->setAccessToken($data['accessToken']);
     }
     if ($emailOrigin instanceof UserEmailOrigin) {
         $this->updateForm($form, $emailOrigin);
     }
 }
 /**
  * @param UserEmailOrigin $origin
  *
  * @return mixed
  */
 public function getAccessToken(UserEmailOrigin $origin)
 {
     $utcTimeZone = new \DateTimeZone('UTC');
     $parameters = ['refresh_token' => $origin->getRefreshToken(), 'grant_type' => 'refresh_token'];
     $attemptNumber = 0;
     do {
         $attemptNumber++;
         $response = $this->doHttpRequest($parameters);
         if (!empty($response['access_token'])) {
             $token = $response['access_token'];
             $origin->setAccessToken($token);
             $newExpireDate = new \DateTime('+' . ((int) $response['expires_in'] - 5) . ' seconds', $utcTimeZone);
             $origin->setAccessTokenExpiresAt($newExpireDate);
             $this->doctrine->getManager()->persist($origin);
             $this->doctrine->getManager()->flush();
             return $token;
         }
     } while ($attemptNumber <= self::RETRY_TIMES && empty($response['access_token']));
     throw new \Exception('Cannot refresh OAuth2 token for origin.');
 }
 /**
  * @param string $type
  * @param string|null $accessToken
  * @param string $formParentName
  *
  * @return FormInterface
  */
 public function getImapConnectionForm($type, $accessToken, $formParentName)
 {
     $oauthEmailOrigin = new UserEmailOrigin();
     $oauthEmailOrigin->setAccessToken($accessToken);
     if ($type === AccountTypeModel::ACCOUNT_TYPE_GMAIL) {
         $oauthEmailOrigin->setImapHost(GmailImap::DEFAULT_GMAIL_HOST);
         $oauthEmailOrigin->setImapPort(GmailImap::DEFAULT_GMAIL_PORT);
     }
     $accountTypeModel = $this->createAccountModel($type, $oauthEmailOrigin);
     return $this->prepareForm($formParentName, $accountTypeModel);
 }
Exemplo n.º 7
0
 /**
  *  Return UserEmailOrigin entity created with data of $data variable
  */
 protected function getUserEmailOrigin($data)
 {
     $userEmailOrigin = new UserEmailOrigin();
     $userEmailOrigin->setUser($data['user']);
     $userEmailOrigin->setAccessTokenExpiresAt($data['accessTokenExpiresAt']);
     if (isset($data['password'])) {
         $userEmailOrigin->setPassword($data['password']);
     }
     if (isset($data['accessToken'])) {
         $userEmailOrigin->setAccessToken($data['accessToken']);
     }
     if (isset($data['refreshToken'])) {
         $userEmailOrigin->setRefreshToken($data['refreshToken']);
     }
     $organization = $this->getMock('Oro\\Bundle\\OrganizationBundle\\Entity\\Organization');
     $userEmailOrigin->setOrganization($organization);
     return $userEmailOrigin;
 }