| // Copyright 2016 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Package hipchat provides constants for using OAuth2 to access HipChat. |
| package hipchat // import "golang.org/x/oauth2/hipchat" |
| |
| import ( |
| "encoding/json" |
| "errors" |
| |
| "golang.org/x/oauth2" |
| "golang.org/x/oauth2/clientcredentials" |
| ) |
| |
| // Endpoint is HipChat's OAuth 2.0 endpoint. |
| var Endpoint = oauth2.Endpoint{ |
| AuthURL: "https://www.hipchat.com/users/authorize", |
| TokenURL: "https://api.hipchat.com/v2/oauth/token", |
| } |
| |
| // ServerEndpoint returns a new oauth2.Endpoint for a HipChat Server instance |
| // running on the given domain or host. |
| func ServerEndpoint(host string) oauth2.Endpoint { |
| return oauth2.Endpoint{ |
| AuthURL: "https://" + host + "/users/authorize", |
| TokenURL: "https://" + host + "/v2/oauth/token", |
| } |
| } |
| |
| // ClientCredentialsConfigFromCaps generates a Config from a HipChat API |
| // capabilities descriptor. It does not verify the scopes against the |
| // capabilities document at this time. |
| // |
| // For more information see: https://www.hipchat.com/docs/apiv2/method/get_capabilities |
| func ClientCredentialsConfigFromCaps(capsJSON []byte, clientID, clientSecret string, scopes ...string) (*clientcredentials.Config, error) { |
| var caps struct { |
| Caps struct { |
| Endpoint struct { |
| TokenURL string `json:"tokenUrl"` |
| } `json:"oauth2Provider"` |
| } `json:"capabilities"` |
| } |
| |
| if err := json.Unmarshal(capsJSON, &caps); err != nil { |
| return nil, err |
| } |
| |
| // Verify required fields. |
| if caps.Caps.Endpoint.TokenURL == "" { |
| return nil, errors.New("oauth2/hipchat: missing OAuth2 token URL in the capabilities descriptor JSON") |
| } |
| |
| return &clientcredentials.Config{ |
| ClientID: clientID, |
| ClientSecret: clientSecret, |
| Scopes: scopes, |
| TokenURL: caps.Caps.Endpoint.TokenURL, |
| }, nil |
| } |