/** * @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.'); }
/** * 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; }
/** * 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; }