RefreshToken uses a refresh token to obtain a new access token.
(refreshToken string)
| 155 | |
| 156 | // RefreshToken uses a refresh token to obtain a new access token. |
| 157 | func (c *Client) RefreshToken(refreshToken string) (*OAuthTokenResponse, error) { |
| 158 | form := url.Values{ |
| 159 | "grant_type": {"refresh_token"}, |
| 160 | "client_id": {c.ClientID}, |
| 161 | "refresh_token": {refreshToken}, |
| 162 | } |
| 163 | |
| 164 | req, err := http.NewRequest( |
| 165 | http.MethodPost, |
| 166 | c.DashboardURL+"/2/oauth/token", |
| 167 | strings.NewReader(form.Encode()), |
| 168 | ) |
| 169 | if err != nil { |
| 170 | return nil, err |
| 171 | } |
| 172 | req.Header.Set("Content-Type", "application/x-www-form-urlencoded") |
| 173 | req.Header.Set("Accept", "application/json") |
| 174 | |
| 175 | resp, err := c.client.Do(req) |
| 176 | if err != nil { |
| 177 | return nil, fmt.Errorf("token refresh request failed: %w", err) |
| 178 | } |
| 179 | defer resp.Body.Close() |
| 180 | |
| 181 | if resp.StatusCode != http.StatusOK { |
| 182 | return nil, parseOAuthError(resp, "token refresh") |
| 183 | } |
| 184 | |
| 185 | var tokenResp OAuthTokenResponse |
| 186 | if err := json.NewDecoder(resp.Body).Decode(&tokenResp); err != nil { |
| 187 | return nil, fmt.Errorf("failed to parse refresh token response: %w", err) |
| 188 | } |
| 189 | |
| 190 | return &tokenResp, nil |
| 191 | } |
| 192 | |
| 193 | // RevokeToken revokes an OAuth access or refresh token via POST /2/oauth/revoke. |
| 194 | func (c *Client) RevokeToken(token string) error { |