xref: /plugin/oauth/Service/AbstractOAuth2Base.php (revision f87928615958963087a1958e7e402daf513124b0)
1<?php
2
3namespace dokuwiki\plugin\oauth\Service;
4
5use OAuth\Common\Http\Exception\TokenResponseException;
6use OAuth\OAuth2\Service\AbstractService;
7use OAuth\OAuth2\Token\StdOAuth2Token;
8
9/**
10 * Implements the parseAccessTokenResponse like most services do it. Can be used as a base
11 * for custom services.
12 */
13abstract class AbstractOAuth2Base extends AbstractService
14{
15
16    /** @inheritdoc */
17    protected function parseAccessTokenResponse($responseBody)
18    {
19        $data = json_decode($responseBody, true);
20
21        if (null === $data || !is_array($data)) {
22            throw new TokenResponseException('Unable to parse response.');
23        } elseif (isset($data['error'])) {
24            throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"');
25        }
26
27        $token = new StdOAuth2Token();
28        $token->setAccessToken($data['access_token']);
29        unset($data['access_token']);
30
31        if (isset($data['expires'])) {
32            $token->setLifeTime($data['expires']);
33            unset($data['expires']);
34        } else {
35            $token->setEndOfLife(StdOAuth2Token::EOL_NEVER_EXPIRES);
36        }
37
38        if (isset($data['refresh_token'])) {
39            $token->setRefreshToken($data['refresh_token']);
40            unset($data['refresh_token']);
41        }
42
43        $token->setExtraParams($data);
44
45        return $token;
46    }
47}
48