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_in'])) {
32            $token->setLifeTime($data['expires_in']);
33            unset($data['expires_in']);
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    /**
49     * We accept arbitrary scopes
50     *
51     * @param string $scope
52     * @return bool
53     */
54    public function isValidScope($scope)
55    {
56        return true;
57    }
58
59}
60