github.com/gophercloud/gophercloud@v1.11.0/auth_result.go (about)

     1  package gophercloud
     2  
     3  /*
     4  AuthResult is the result from the request that was used to obtain a provider
     5  client's Keystone token. It is returned from ProviderClient.GetAuthResult().
     6  
     7  The following types satisfy this interface:
     8  
     9  	github.com/gophercloud/gophercloud/openstack/identity/v2/tokens.CreateResult
    10  	github.com/gophercloud/gophercloud/openstack/identity/v3/tokens.CreateResult
    11  
    12  Usage example:
    13  
    14  	import (
    15  		"github.com/gophercloud/gophercloud"
    16  		tokens2 "github.com/gophercloud/gophercloud/openstack/identity/v2/tokens"
    17  		tokens3 "github.com/gophercloud/gophercloud/openstack/identity/v3/tokens"
    18  	)
    19  
    20  	func GetAuthenticatedUserID(providerClient *gophercloud.ProviderClient) (string, error) {
    21  		r := providerClient.GetAuthResult()
    22  		if r == nil {
    23  			//ProviderClient did not use openstack.Authenticate(), e.g. because token
    24  			//was set manually with ProviderClient.SetToken()
    25  			return "", errors.New("no AuthResult available")
    26  		}
    27  		switch r := r.(type) {
    28  		case tokens2.CreateResult:
    29  			u, err := r.ExtractUser()
    30  			if err != nil {
    31  				return "", err
    32  			}
    33  			return u.ID, nil
    34  		case tokens3.CreateResult:
    35  			u, err := r.ExtractUser()
    36  			if err != nil {
    37  				return "", err
    38  			}
    39  			return u.ID, nil
    40  		default:
    41  			panic(fmt.Sprintf("got unexpected AuthResult type %t", r))
    42  		}
    43  	}
    44  
    45  Both implementing types share a lot of methods by name, like ExtractUser() in
    46  this example. But those methods cannot be part of the AuthResult interface
    47  because the return types are different (in this case, type tokens2.User vs.
    48  type tokens3.User).
    49  */
    50  type AuthResult interface {
    51  	ExtractTokenID() (string, error)
    52  }