/**
  * @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;
 }
 /**
  * @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.');
 }
예제 #3
0
 /**
  * Create object of AccountTypeModel using data of form
  *
  * @param array $data
  *
  * @return AccountTypeModel|null
  */
 protected function createAccountTypeModelFromData($data)
 {
     $imapGmailConfiguration = isset($data['userEmailOrigin']) ? $data['userEmailOrigin'] : [];
     if (empty($imapGmailConfiguration['user'])) {
         return null;
     }
     $accountTypeModel = new AccountTypeModel();
     $accountTypeModel->setAccountType($data['accountType']);
     $userEmailOrigin = new UserEmailOrigin();
     $userEmailOrigin->setImapHost($imapGmailConfiguration['imapHost']);
     $userEmailOrigin->setImapPort($imapGmailConfiguration['imapPort']);
     $userEmailOrigin->setImapEncryption($imapGmailConfiguration['imapEncryption']);
     $userEmailOrigin->setUser($imapGmailConfiguration['user']);
     if (!empty($imapGmailConfiguration['accessTokenExpiresAt'])) {
         $newExpireDate = $imapGmailConfiguration['accessTokenExpiresAt'];
         if (!$newExpireDate instanceof \Datetime) {
             $utcTimeZone = new \DateTimeZone('UTC');
             $accessTokenExpiresAt = $imapGmailConfiguration['accessTokenExpiresAt'];
             $newExpireDate = new \DateTime('+' . $accessTokenExpiresAt . ' seconds', $utcTimeZone);
         }
         $userEmailOrigin->setAccessTokenExpiresAt($newExpireDate);
     }
     $accountTypeModel->setUserEmailOrigin($userEmailOrigin);
     return $accountTypeModel;
 }
예제 #4
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;
 }