blob: 984d03e53ef9e6a2aeebfcd6594de4b254414877 [file] [log] [blame]
package v3
import (
"time"
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack/identity/v3/tokens"
)
// Client abstracts the connection information necessary to make API calls to Identity v3 resources.
// It exists mainly to adhere to the IdentityService interface.
type Client struct {
gophercloud.ServiceClient
}
// Token models a token acquired from the tokens/ API resource.
type Token struct {
ID string
ExpiresAt time.Time
}
// NewClient creates a new client associated with the v3 identity service of a provider.
func NewClient(provider *gophercloud.ProviderClient) *Client {
return &Client{
ServiceClient: gophercloud.ServiceClient{
ProviderClient: *provider,
Endpoint: provider.IdentityEndpoint,
},
}
}
// Authenticate provides the supplied credentials to an identity v3 endpoint and attempts to acquire a token.
func (c *Client) Authenticate(authOptions gophercloud.AuthOptions) (*Token, error) {
c.ServiceClient.ProviderClient.Options = authOptions
result, err := tokens.Create(&c.ServiceClient, nil)
if err != nil {
return nil, err
}
tokenID, err := result.TokenID()
if err != nil {
return nil, err
}
expiresAt, err := result.ExpiresAt()
if err != nil {
return nil, err
}
return &Token{
ID: tokenID,
ExpiresAt: expiresAt,
}, nil
}