Blame vendor/github.com/gophercloud/gophercloud/auth_result.go

Packit 63bb0d
package gophercloud
Packit 63bb0d
Packit 63bb0d
/*
Packit 63bb0d
AuthResult is the result from the request that was used to obtain a provider
Packit 63bb0d
client's Keystone token. It is returned from ProviderClient.GetAuthResult().
Packit 63bb0d
Packit 63bb0d
The following types satisfy this interface:
Packit 63bb0d
Packit 63bb0d
	github.com/gophercloud/gophercloud/openstack/identity/v2/tokens.CreateResult
Packit 63bb0d
	github.com/gophercloud/gophercloud/openstack/identity/v3/tokens.CreateResult
Packit 63bb0d
Packit 63bb0d
Usage example:
Packit 63bb0d
Packit 63bb0d
	import (
Packit 63bb0d
		"github.com/gophercloud/gophercloud"
Packit 63bb0d
		tokens2 "github.com/gophercloud/gophercloud/openstack/identity/v2/tokens"
Packit 63bb0d
		tokens3 "github.com/gophercloud/gophercloud/openstack/identity/v3/tokens"
Packit 63bb0d
	)
Packit 63bb0d
Packit 63bb0d
	func GetAuthenticatedUserID(providerClient *gophercloud.ProviderClient) (string, error) {
Packit 63bb0d
		r := providerClient.GetAuthResult()
Packit 63bb0d
		if r == nil {
Packit 63bb0d
			//ProviderClient did not use openstack.Authenticate(), e.g. because token
Packit 63bb0d
			//was set manually with ProviderClient.SetToken()
Packit 63bb0d
			return "", errors.New("no AuthResult available")
Packit 63bb0d
		}
Packit 63bb0d
		switch r := r.(type) {
Packit 63bb0d
		case tokens2.CreateResult:
Packit 63bb0d
			u, err := r.ExtractUser()
Packit 63bb0d
			if err != nil {
Packit 63bb0d
				return "", err
Packit 63bb0d
			}
Packit 63bb0d
			return u.ID, nil
Packit 63bb0d
		case tokens3.CreateResult:
Packit 63bb0d
			u, err := r.ExtractUser()
Packit 63bb0d
			if err != nil {
Packit 63bb0d
				return "", err
Packit 63bb0d
			}
Packit 63bb0d
			return u.ID, nil
Packit 63bb0d
		default:
Packit 63bb0d
			panic(fmt.Sprintf("got unexpected AuthResult type %t", r))
Packit 63bb0d
		}
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
Both implementing types share a lot of methods by name, like ExtractUser() in
Packit 63bb0d
this example. But those methods cannot be part of the AuthResult interface
Packit 63bb0d
because the return types are different (in this case, type tokens2.User vs.
Packit 63bb0d
type tokens3.User).
Packit 63bb0d
*/
Packit 63bb0d
type AuthResult interface {
Packit 63bb0d
	ExtractTokenID() (string, error)
Packit 63bb0d
}