public function testSettingManualRefreshToken() { $subscriber = new Oauth2Subscriber(); $subscriber->setRefreshToken('testRefreshToken'); $this->assertEquals('refresh_token', $subscriber->getRefreshToken()->getType()); $this->assertEquals('testRefreshToken', $subscriber->getRefreshToken()->getToken()); }
/** * @param $url * @return bool|void * @throws AJXP_UserAlertException * @throws Exception */ public static function applyInitPathHook($url) { if (!class_exists('CommerceGuys\\Guzzle\\Oauth2\\Oauth2Subscriber')) { throw new Exception('Oauth plugin not loaded - go to ' . AJXP_BIN_FOLDER . '/guzzle from the command line and run \'composer update\' to install'); } // Repository information $urlParts = AJXP_Utils::safeParseUrl($url); $repository = ConfService::getRepositoryById($urlParts["host"]); if ($repository == null) { throw new Exception("Cannot find repository"); } $repositoryId = $repository->getId(); if (AuthService::usersEnabled()) { $u = AuthService::getLoggedUser(); $userId = $u->getId(); if ($u->getResolveAsParent()) { $userId = $u->getParent(); } } else { $userId = 'shared'; } // User information // Repository params $clientId = $repository->getOption('CLIENT_ID'); $clientSecret = $repository->getOption('CLIENT_SECRET'); $scope = $repository->getOption('SCOPE'); $authUrl = $repository->getOption('AUTH_URL'); $tokenUrl = $repository->getOption('TOKEN_URL'); $redirectUrl = $repository->getOption('REDIRECT_URL'); $authUrl .= '?client_id=' . $clientId . '&scope=' . $scope . '&redirect_uri=' . urlencode($redirectUrl) . '&response_type=code'; // Retrieving context $repoData = self::actualRepositoryWrapperData($urlParts["host"]); $repoProtocol = $repoData['protocol']; $default = stream_context_get_options(stream_context_get_default()); // Retrieving subscriber $oauth2 = $default[$repoProtocol]['oauth2_subscriber']; if (!empty($oauth2)) { // Authentication already made for this request - move on return true; } // Retrieving tokens $tokensKey = self::getTokenKey($repositoryId, $userId); $tokens = self::getTokens($tokensKey); $accessToken = $tokens[0]; $refreshToken = $tokens[1]; // OAuth 2 Tokens $oauth2Client = new GuzzleClient(['base_url' => $tokenUrl]); $config = ['client_id' => $clientId, 'client_secret' => $clientSecret, 'scope' => $scope, 'redirect_uri' => $redirectUrl, 'token_url' => '', 'auth_location' => 'body']; // Setting up the subscriber if (empty($refreshToken) || !empty($_SESSION['oauth_code'])) { // Authorization code $config['code'] = $_SESSION['oauth_code']; $accessToken = new AuthorizationCode($oauth2Client, $config); $refreshToken = new RefreshToken($oauth2Client, $config); $oauth2 = new Oauth2Subscriber($accessToken, $refreshToken); unset($_SESSION['oauth_code']); } else { // Refresh Token $config['refresh_token'] = $refreshToken; $oauth2 = new Oauth2Subscriber(null, new RefreshToken($oauth2Client, $config)); $oauth2->setAccessToken($accessToken); $oauth2->setRefreshToken($refreshToken); } // Retrieving access token and checking access try { $accessToken = $oauth2->getAccessToken(); $refreshToken = $oauth2->getRefreshToken(); } catch (\Exception $e) { throw new AJXP_UserAlertException("Please go to <a style=\"text-decoration:underline;\" href=\"" . $authUrl . "\">" . $authUrl . "</a> to authorize the access to your onedrive. Then try again to switch to this workspace"); } // Saving tokens for later use self::setTokens($tokensKey, $accessToken->getToken(), $refreshToken->getToken()); // Saving subscriber in context $default[$repoProtocol]['oauth2_subscriber'] = $oauth2; // Retrieving client $client = $default[$repoProtocol]['client']; $httpClient = $client->getHttpClient(); $httpClient->getEmitter()->attach($oauth2); stream_context_set_default($default); return true; }