1package gophercloud 2 3/* 4AuthResult is the result from the request that was used to obtain a provider 5client's Keystone token. It is returned from ProviderClient.GetAuthResult(). 6 7The 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 12Usage 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 45Both implementing types share a lot of methods by name, like ExtractUser() in 46this example. But those methods cannot be part of the AuthResult interface 47because the return types are different (in this case, type tokens2.User vs. 48type tokens3.User). 49*/ 50type AuthResult interface { 51 ExtractTokenID() (string, error) 52} 53