/
oauth_token_controller.go
49 lines (42 loc) · 1.28 KB
/
oauth_token_controller.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package controllers
import (
"github.com/BrandonRomano/wrecker"
"github.com/carrot/go-pinterest/models"
)
// OAuthTokenController is the controller that is responsible
// for all /v1/oauth/token endpoints in the Pinterest API.
type OAuthTokenController struct {
wreckerClient *wrecker.Wrecker
}
// newOAuthTokenController instantiates a new OAuthTokenController
func newOAuthTokenController(wc *wrecker.Wrecker) *OAuthTokenController {
return &OAuthTokenController{
wreckerClient: wc,
}
}
// Create generates an access token
// Endpoint: [POST] /v1/oauth/token
func (otc *OAuthTokenController) Create(clientId, clientSecret, accessCode string) (*models.AccessToken, error) {
// Build + execute request
accessToken := new(models.AccessToken)
httpResp, err := otc.wreckerClient.Post("/oauth/token").
URLParam("grant_type", "authorization_code").
URLParam("client_id", clientId).
URLParam("client_secret", clientSecret).
URLParam("code", accessCode).
Into(accessToken).
Execute()
if err != nil {
if _, ok := err.(wrecker.ResponseError); !ok {
return nil, err
}
}
if !(httpResp.StatusCode >= 200 && httpResp.StatusCode < 300) {
return nil, &models.PinterestError{
StatusCode: httpResp.StatusCode,
Message: accessToken.Error,
}
}
// OK
return accessToken, nil
}