Slack::getAuthorizedUser()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 3
cts 3
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 1
crap 1
1
<?php
2
3
namespace AdamPaterson\OAuth2\Client\Provider;
4
5
use League\OAuth2\Client\Provider\AbstractProvider;
6
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
7
use League\OAuth2\Client\Token\AccessToken;
8
use Psr\Http\Message\ResponseInterface;
9
10
/**
11
 * Class Slack
12
 *
13
 * @author Adam Paterson <[email protected]>
14
 *
15
 * @package AdamPaterson\OAuth2\Client\Provider
16
 */
17
class Slack extends AbstractProvider
18
{
19
    /**
20
     * Returns the base URL for authorizing a client.
21
     *
22
     * @return string
23
     */
24 6
    public function getBaseAuthorizationUrl()
25
    {
26 6
        return "https://slack.com/oauth/authorize";
27
    }
28
29
    /**
30
     * Returns the base URL for requesting an access token.
31
     *
32
     * @param array $params
33
     *
34
     * @return string
35
     */
36 12
    public function getBaseAccessTokenUrl(array $params)
37
    {
38 12
        return "https://slack.com/api/oauth.access";
39
    }
40
41
    /**
42
     * Returns the URL for requesting the resource owner's details.
43
     *
44
     * @param AccessToken $token
45
     *
46
     * @return string
47
     */
48 3
    public function getResourceOwnerDetailsUrl(AccessToken $token)
49
    {
50 3
        $authorizedUser = $this->getAuthorizedUser($token);
51
52
        $params = [
53 3
            'token' => $token->getToken(),
54 3
            'user'  => $authorizedUser->getId()
55 1
        ];
56
57 3
        $url = 'https://slack.com/api/users.info?'.http_build_query($params);
58
59 3
        return $url;
60
    }
61
62
    /**
63
     * @param $token
64
     *
65
     * @return string
66
     */
67 9
    public function getAuthorizedUserTestUrl($token)
68
    {
69 9
        return "https://slack.com/api/auth.test?token=".$token;
70
    }
71
72
    /**
73
     * Checks a provider response for errors.
74
     *
75
     * @throws IdentityProviderException
76
     *
77
     * @param ResponseInterface $response
78
     * @param array|string      $data     Parsed response data
79
     *
80
     * @return void
81
     */
82 12
    protected function checkResponse(ResponseInterface $response, $data)
83
    {
84 12
    }
85
86
    /**
87
     * Create new resources owner using the generated access token.
88
     *
89
     * @param array       $response
90
     * @param AccessToken $token
91
     *
92
     * @return SlackResourceOwner
93
     */
94 3
    protected function createResourceOwner(array $response, AccessToken $token)
95
    {
96 3
        return new SlackResourceOwner($response);
97
    }
98
99
    /**
100
     * @return array
101
     */
102 6
    protected function getDefaultScopes()
103
    {
104 6
        return [];
105
    }
106
107
    /**
108
     * @param AccessToken $token
109
     *
110
     * @return mixed
111
     */
112 6
    public function fetchAuthorizedUserDetails(AccessToken $token)
113
    {
114 6
        $url = $this->getAuthorizedUserTestUrl($token);
115
116 6
        $request = $this->getAuthenticatedRequest(self::METHOD_GET, $url, $token);
117
118
        // Keep compatibility with League\OAuth2\Client v1
119 6
        if (!method_exists($this, 'getParsedResponse')) {
120
            return $this->getResponse($request);
121
        }
122
123 6
        return $this->getParsedResponse($request);
124
    }
125
126
    /**
127
     * @param AccessToken $token
128
     *
129
     * @return SlackAuthorizedUser
130
     */
131 6
    public function getAuthorizedUser(AccessToken $token)
132
    {
133 6
        $response = $this->fetchAuthorizedUserDetails($token);
134
135 6
        return $this->createAuthorizedUser($response);
136
    }
137
138
    /**
139
     * @param $response
140
     *
141
     * @return SlackAuthorizedUser
142
     */
143 6
    protected function createAuthorizedUser($response)
144
    {
145 6
        return new SlackAuthorizedUser($response);
146
    }
147
}
148