/** * get CREST API "access_token" from OAuth * @return bool|string */ public function getAccessToken() { $accessToken = false; // check if there is already an "accessToken" for this user // check expire timer for stored "accessToken" if (!empty($this->crestAccessToken) && !empty($this->crestAccessTokenUpdated)) { $timezone = new \DateTimeZone($this->getF3()->get('TZ')); $tokenTime = \DateTime::createFromFormat('Y-m-d H:i:s', $this->crestAccessTokenUpdated, $timezone); // add expire time buffer for this "accessToken" // token should be marked as "deprecated" BEFORE it actually expires. $timeBuffer = 2 * 60; $tokenTime->add(new \DateInterval('PT' . (Sso::ACCESS_KEY_EXPIRE_TIME - $timeBuffer) . 'S')); $now = new \DateTime('now', $timezone); if ($tokenTime->getTimestamp() > $now->getTimestamp()) { $accessToken = $this->crestAccessToken; } } // if no "accessToken" was found -> get a fresh one by an existing "refreshToken" if (!$accessToken && !empty($this->crestRefreshToken)) { // no accessToken found OR token is deprecated $ssoController = new Sso(); $accessData = $ssoController->refreshAccessToken($this->crestRefreshToken); if (isset($accessData->accessToken) && isset($accessData->refreshToken)) { $this->crestAccessToken = $accessData->accessToken; $this->save(); $accessToken = $this->crestAccessToken; } } return $accessToken; }