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