diff options
| author | Teddy Wing | 2015-06-06 19:25:17 -0400 |
|---|---|---|
| committer | Teddy Wing | 2015-06-06 19:25:17 -0400 |
| commit | 1135764727f3dc525d0f674c784edbc81cc786f3 (patch) | |
| tree | 5c402c88d3a07a3cde84237ead5829bda28f3e25 /vendor/_nuts/github.com/fabioberger/coinbase-go/oauth.go | |
| download | New-House-on-the-Block-1135764727f3dc525d0f674c784edbc81cc786f3.tar.bz2 | |
Initial commit. Install coinbase-go.
* Use nut for vendored dependencies
* Install coinbase-go to interact with the Coinbase API
Diffstat (limited to 'vendor/_nuts/github.com/fabioberger/coinbase-go/oauth.go')
| -rw-r--r-- | vendor/_nuts/github.com/fabioberger/coinbase-go/oauth.go | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/vendor/_nuts/github.com/fabioberger/coinbase-go/oauth.go b/vendor/_nuts/github.com/fabioberger/coinbase-go/oauth.go new file mode 100644 index 0000000..92bda03 --- /dev/null +++ b/vendor/_nuts/github.com/fabioberger/coinbase-go/oauth.go @@ -0,0 +1,101 @@ +package coinbase + +import ( + "net/http" + "net/url" + "strings" + "time" +) + +// OAuth handles all service oauth related functionality (i.e GetTokens(), RefreshTokens() +type OAuth struct { + ClientId string + ClientSecret string + RedirectUri string + Rpc rpc +} + +// OAuthService Instantiates OAuth Struct in order to send service related OAuth requests +func OAuthService(clientId string, clientSecret string, redirectUri string) (*OAuth, error) { + certFilePath := basePath + "/ca-coinbase.crt" + serviceAuth, err := serviceOAuth(certFilePath) + if err != nil { + return nil, err + } + o := OAuth{ + ClientId: clientId, + ClientSecret: clientSecret, + RedirectUri: redirectUri, + Rpc: rpc{ + auth: serviceAuth, + mock: false, + }, + } + return &o, nil +} + +// CreateAuthorizeUrl create the Authorize Url used to redirect users for +// coinbase app authorization. The scope parameter includes the specific +// permissions one wants to ask from the user +func (o OAuth) CreateAuthorizeUrl(scope []string) string { + Url, _ := url.Parse("https://coinbase.com") + Url.Path += "/oauth/authorize" + + parameters := url.Values{} + parameters.Add("response_type", "code") + parameters.Add("client_id", o.ClientId) + parameters.Add("redirect_uri", o.RedirectUri) + parameters.Add("scope", strings.Join(scope, " ")) + Url.RawQuery = parameters.Encode() + + return Url.String() +} + +// RefreshTokens refreshes a users existing OAuth tokens +func (o OAuth) RefreshTokens(oldTokens map[string]interface{}) (*oauthTokens, error) { + refresh_token := oldTokens["refresh_token"].(string) + return o.GetTokens(refresh_token, "refresh_token") +} + +// NewTokens generates new tokens for an OAuth user +func (o OAuth) NewTokens(code string) (*oauthTokens, error) { + return o.GetTokens(code, "authorization_code") +} + +// NewTokensRequest generates new tokens for OAuth user given an http request +// containing the query parameter 'code' +func (o OAuth) NewTokensFromRequest(req *http.Request) (*oauthTokens, error) { + query := req.URL.Query() + code := query.Get("code") + return o.GetTokens(code, "authorization_code") +} + +// GetTokens gets tokens for an OAuth user specifying a grantType (i.e authorization_code) +func (o OAuth) GetTokens(code string, grantType string) (*oauthTokens, error) { + + postVars := map[string]string{ + "grant_type": grantType, + "redirect_uri": o.RedirectUri, + "client_id": o.ClientId, + "client_secret": o.ClientSecret, + } + + if grantType == "refresh_token" { + postVars["refresh_token"] = code + } else { + postVars["code"] = code + } + holder := tokensHolder{} + err := o.Rpc.Request("POST", "oauth/token", postVars, &holder) + if err != nil { + return nil, err + } + + tokens := oauthTokens{ + AccessToken: holder.AccessToken, + RefreshToken: holder.RefreshToken, + ExpireTime: time.Now().UTC().Unix() + holder.ExpiresIn, + } + + return &tokens, nil +} |
