|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // 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
- }
|