Blame vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/results.go

Packit Service 4d2de5
package tokens
Packit Service 4d2de5
Packit Service 4d2de5
import (
Packit Service 4d2de5
	"time"
Packit Service 4d2de5
Packit Service 4d2de5
	"github.com/gophercloud/gophercloud"
Packit Service 4d2de5
)
Packit Service 4d2de5
Packit Service 4d2de5
// Endpoint represents a single API endpoint offered by a service.
Packit Service 4d2de5
// It matches either a public, internal or admin URL.
Packit Service 4d2de5
// If supported, it contains a region specifier, again if provided.
Packit Service 4d2de5
// The significance of the Region field will depend upon your provider.
Packit Service 4d2de5
type Endpoint struct {
Packit Service 4d2de5
	ID        string `json:"id"`
Packit Service 4d2de5
	Region    string `json:"region"`
Packit Service 4d2de5
	RegionID  string `json:"region_id"`
Packit Service 4d2de5
	Interface string `json:"interface"`
Packit Service 4d2de5
	URL       string `json:"url"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// CatalogEntry provides a type-safe interface to an Identity API V3 service
Packit Service 4d2de5
// catalog listing. Each class of service, such as cloud DNS or block storage
Packit Service 4d2de5
// services, could have multiple CatalogEntry representing it (one by interface
Packit Service 4d2de5
// type, e.g public, admin or internal).
Packit Service 4d2de5
//
Packit Service 4d2de5
// Note: when looking for the desired service, try, whenever possible, to key
Packit Service 4d2de5
// off the type field. Otherwise, you'll tie the representation of the service
Packit Service 4d2de5
// to a specific provider.
Packit Service 4d2de5
type CatalogEntry struct {
Packit Service 4d2de5
	// Service ID
Packit Service 4d2de5
	ID string `json:"id"`
Packit Service 4d2de5
Packit Service 4d2de5
	// Name will contain the provider-specified name for the service.
Packit Service 4d2de5
	Name string `json:"name"`
Packit Service 4d2de5
Packit Service 4d2de5
	// Type will contain a type string if OpenStack defines a type for the
Packit Service 4d2de5
	// service. Otherwise, for provider-specific services, the provider may
Packit Service 4d2de5
	// assign their own type strings.
Packit Service 4d2de5
	Type string `json:"type"`
Packit Service 4d2de5
Packit Service 4d2de5
	// Endpoints will let the caller iterate over all the different endpoints that
Packit Service 4d2de5
	// may exist for the service.
Packit Service 4d2de5
	Endpoints []Endpoint `json:"endpoints"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// ServiceCatalog provides a view into the service catalog from a previous,
Packit Service 4d2de5
// successful authentication.
Packit Service 4d2de5
type ServiceCatalog struct {
Packit Service 4d2de5
	Entries []CatalogEntry `json:"catalog"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// Domain provides information about the domain to which this token grants
Packit Service 4d2de5
// access.
Packit Service 4d2de5
type Domain struct {
Packit Service 4d2de5
	ID   string `json:"id"`
Packit Service 4d2de5
	Name string `json:"name"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// User represents a user resource that exists in the Identity Service.
Packit Service 4d2de5
type User struct {
Packit Service 4d2de5
	Domain Domain `json:"domain"`
Packit Service 4d2de5
	ID     string `json:"id"`
Packit Service 4d2de5
	Name   string `json:"name"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// Role provides information about roles to which User is authorized.
Packit Service 4d2de5
type Role struct {
Packit Service 4d2de5
	ID   string `json:"id"`
Packit Service 4d2de5
	Name string `json:"name"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// Project provides information about project to which User is authorized.
Packit Service 4d2de5
type Project struct {
Packit Service 4d2de5
	Domain Domain `json:"domain"`
Packit Service 4d2de5
	ID     string `json:"id"`
Packit Service 4d2de5
	Name   string `json:"name"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// commonResult is the response from a request. A commonResult has various
Packit Service 4d2de5
// methods which can be used to extract different details about the result.
Packit Service 4d2de5
type commonResult struct {
Packit Service 4d2de5
	gophercloud.Result
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// Extract is a shortcut for ExtractToken.
Packit Service 4d2de5
// This function is deprecated and still present for backward compatibility.
Packit Service 4d2de5
func (r commonResult) Extract() (*Token, error) {
Packit Service 4d2de5
	return r.ExtractToken()
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// ExtractToken interprets a commonResult as a Token.
Packit Service 4d2de5
func (r commonResult) ExtractToken() (*Token, error) {
Packit Service 4d2de5
	var s Token
Packit Service 4d2de5
	err := r.ExtractInto(&s)
Packit Service 4d2de5
	if err != nil {
Packit Service 4d2de5
		return nil, err
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	// Parse the token itself from the stored headers.
Packit Service 4d2de5
	s.ID = r.Header.Get("X-Subject-Token")
Packit Service 4d2de5
Packit Service 4d2de5
	return &s, err
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// ExtractTokenID implements the gophercloud.AuthResult interface. The returned
Packit Service 4d2de5
// string is the same as the ID field of the Token struct returned from
Packit Service 4d2de5
// ExtractToken().
Packit Service 4d2de5
func (r CreateResult) ExtractTokenID() (string, error) {
Packit Service 4d2de5
	return r.Header.Get("X-Subject-Token"), r.Err
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// ExtractTokenID implements the gophercloud.AuthResult interface. The returned
Packit Service 4d2de5
// string is the same as the ID field of the Token struct returned from
Packit Service 4d2de5
// ExtractToken().
Packit Service 4d2de5
func (r GetResult) ExtractTokenID() (string, error) {
Packit Service 4d2de5
	return r.Header.Get("X-Subject-Token"), r.Err
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// ExtractServiceCatalog returns the ServiceCatalog that was generated along
Packit Service 4d2de5
// with the user's Token.
Packit Service 4d2de5
func (r commonResult) ExtractServiceCatalog() (*ServiceCatalog, error) {
Packit Service 4d2de5
	var s ServiceCatalog
Packit Service 4d2de5
	err := r.ExtractInto(&s)
Packit Service 4d2de5
	return &s, err
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// ExtractUser returns the User that is the owner of the Token.
Packit Service 4d2de5
func (r commonResult) ExtractUser() (*User, error) {
Packit Service 4d2de5
	var s struct {
Packit Service 4d2de5
		User *User `json:"user"`
Packit Service 4d2de5
	}
Packit Service 4d2de5
	err := r.ExtractInto(&s)
Packit Service 4d2de5
	return s.User, err
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// ExtractRoles returns Roles to which User is authorized.
Packit Service 4d2de5
func (r commonResult) ExtractRoles() ([]Role, error) {
Packit Service 4d2de5
	var s struct {
Packit Service 4d2de5
		Roles []Role `json:"roles"`
Packit Service 4d2de5
	}
Packit Service 4d2de5
	err := r.ExtractInto(&s)
Packit Service 4d2de5
	return s.Roles, err
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// ExtractProject returns Project to which User is authorized.
Packit Service 4d2de5
func (r commonResult) ExtractProject() (*Project, error) {
Packit Service 4d2de5
	var s struct {
Packit Service 4d2de5
		Project *Project `json:"project"`
Packit Service 4d2de5
	}
Packit Service 4d2de5
	err := r.ExtractInto(&s)
Packit Service 4d2de5
	return s.Project, err
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// ExtractDomain returns Domain to which User is authorized.
Packit Service 4d2de5
func (r commonResult) ExtractDomain() (*Domain, error) {
Packit Service 4d2de5
	var s struct {
Packit Service 4d2de5
		Domain *Domain `json:"domain"`
Packit Service 4d2de5
	}
Packit Service 4d2de5
	err := r.ExtractInto(&s)
Packit Service 4d2de5
	return s.Domain, err
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// CreateResult is the response from a Create request. Use ExtractToken()
Packit Service 4d2de5
// to interpret it as a Token, or ExtractServiceCatalog() to interpret it
Packit Service 4d2de5
// as a service catalog.
Packit Service 4d2de5
type CreateResult struct {
Packit Service 4d2de5
	commonResult
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// GetResult is the response from a Get request. Use ExtractToken()
Packit Service 4d2de5
// to interpret it as a Token, or ExtractServiceCatalog() to interpret it
Packit Service 4d2de5
// as a service catalog.
Packit Service 4d2de5
type GetResult struct {
Packit Service 4d2de5
	commonResult
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// RevokeResult is response from a Revoke request.
Packit Service 4d2de5
type RevokeResult struct {
Packit Service 4d2de5
	commonResult
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// Token is a string that grants a user access to a controlled set of services
Packit Service 4d2de5
// in an OpenStack provider. Each Token is valid for a set length of time.
Packit Service 4d2de5
type Token struct {
Packit Service 4d2de5
	// ID is the issued token.
Packit Service 4d2de5
	ID string `json:"id"`
Packit Service 4d2de5
Packit Service 4d2de5
	// ExpiresAt is the timestamp at which this token will no longer be accepted.
Packit Service 4d2de5
	ExpiresAt time.Time `json:"expires_at"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func (r commonResult) ExtractInto(v interface{}) error {
Packit Service 4d2de5
	return r.ExtractIntoStructPtr(v, "token")
Packit Service 4d2de5
}