func v2auth(client *gophercloud.ProviderClient, endpoint string, options gophercloud.AuthOptions) error { v2Client := NewIdentityV2(client) if endpoint != "" { v2Client.Endpoint = endpoint } result := tokens2.Create(v2Client, tokens2.AuthOptions{AuthOptions: options}) token, err := result.ExtractToken() if err != nil { return err } catalog, err := result.ExtractServiceCatalog() if err != nil { return err } if options.AllowReauth { client.ReauthFunc = func() error { client.TokenID = "" return AuthenticateV2(client, options) } } client.TokenID = token.ID client.EndpointLocator = func(opts gophercloud.EndpointOpts) (string, error) { return V2EndpointURL(catalog, opts) } return nil }
func v3auth(client *gophercloud.ProviderClient, endpoint string, options gophercloud.AuthOptions) error { // Override the generated service endpoint with the one returned by the version endpoint. v3Client := NewIdentityV3(client) if endpoint != "" { v3Client.Endpoint = endpoint } // copy the auth options to a local variable that we can change. `options` // needs to stay as-is for reauth purposes v3Options := options var scope *tokens3.Scope if options.TenantID != "" { scope = &tokens3.Scope{ ProjectID: options.TenantID, } v3Options.TenantID = "" v3Options.TenantName = "" } else { if options.TenantName != "" { scope = &tokens3.Scope{ ProjectName: options.TenantName, DomainID: options.DomainID, DomainName: options.DomainName, } v3Options.TenantName = "" } } result := tokens3.Create(v3Client, v3Options, scope) token, err := result.ExtractToken() if err != nil { return err } catalog, err := result.ExtractServiceCatalog() if err != nil { return err } client.TokenID = token.ID if options.AllowReauth { client.ReauthFunc = func() error { client.TokenID = "" return v3auth(client, endpoint, options) } } client.EndpointLocator = func(opts gophercloud.EndpointOpts) (string, error) { return V3EndpointURL(catalog, opts) } return nil }
func v3auth(client *gophercloud.ProviderClient, endpoint string, options gophercloud.AuthOptions) error { // Override the generated service endpoint with the one returned by the version endpoint. v3Client := NewIdentityV3(client) if endpoint != "" { v3Client.Endpoint = endpoint } var scope *tokens3.Scope if options.TenantID != "" { scope = &tokens3.Scope{ ProjectID: options.TenantID, } options.TenantID = "" options.TenantName = "" } else { if options.TenantName != "" { scope = &tokens3.Scope{ ProjectName: options.TenantName, DomainID: options.DomainID, DomainName: options.DomainName, } options.TenantName = "" } } result := tokens3.Create(v3Client, options, scope) token, err := result.ExtractToken() if err != nil { return err } catalog, err := result.ExtractServiceCatalog() if err != nil { return err } client.TokenID = token.ID if options.AllowReauth { client.ReauthFunc = func() error { return AuthenticateV3(client, options) } } client.EndpointLocator = func(opts gophercloud.EndpointOpts) (string, error) { return V3EndpointURL(catalog, opts) } return nil }
func trustv3auth(client *gophercloud.ProviderClient, endpoint string, options AuthOptionsExt) error { //In case of Trust TokenId would be Provided so we have to populate the value in service client //to not throw password error,also if it is not provided it will be empty which maintains //the current implementation. client.TokenID = options.AuthOptions.TokenID // Override the generated service endpoint with the one returned by the version endpoint. v3Client := openstack.NewIdentityV3(client) if endpoint != "" { v3Client.Endpoint = endpoint } // copy the auth options to a local variable that we can change. `options` // needs to stay as-is for reauth purposes v3Options := options var scope *token3.Scope result := token3.Create(v3Client, v3Options, scope) token, err := result.ExtractToken() if err != nil { return err } catalog, err := result.ExtractServiceCatalog() if err != nil { return err } client.TokenID = token.ID if options.AuthOptions.AllowReauth { client.ReauthFunc = func() error { client.TokenID = "" return trustv3auth(client, endpoint, options) } } client.EndpointLocator = func(opts gophercloud.EndpointOpts) (string, error) { return openstack.V3EndpointURL(catalog, opts) } return nil }
func v3auth(client *gophercloud.ProviderClient, endpoint string, options gophercloud.AuthOptions) error { // Override the generated service endpoint with the one returned by the version endpoint. v3Client := NewIdentityV3(client) if endpoint != "" { v3Client.Endpoint = endpoint } token, err := tokens3.Create(v3Client, options, nil).Extract() if err != nil { return err } client.TokenID = token.ID if options.AllowReauth { client.ReauthFunc = func() error { return AuthenticateV3(client, options) } } client.EndpointLocator = func(opts gophercloud.EndpointOpts) (string, error) { return V3EndpointURL(v3Client, opts) } return nil }