blob: 470e495805d3d10225cdfe57be364f6ddf48eecd [file] [log] [blame]
package gophercloud
// ScopeOptsV3 allows a created token to be limited to a specific domain or project.
type ScopeOptsV3 struct {
ProjectID string `json:"scope.project.id,omitempty" not:"ProjectName,DomainID,DomainName"`
ProjectName string `json:"scope.project.name,omitempty"`
DomainID string `json:"scope.project.id,omitempty" not:"ProjectName,ProjectID,DomainName"`
DomainName string `json:"scope.project.id,omitempty"`
}
type ScopeDomainV3 struct {
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
}
type ScopeProjectDomainV3 struct {
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
}
type ScopeProjectV3 struct {
Domain *ScopeProjectDomainV3 `json:"domain,omitempty"`
Name string `json:"name,omitempty"`
ID string `json:"id,omitempty"`
}
type ScopeV3 struct {
Domain *ScopeDomainV3 `json:"domain,omitempty"`
Project *ScopeProjectV3 `json:"project,omitempty"`
}
type DomainV3 struct {
ID string `json:"id,omitempty" xor:"Name"`
Name string `json:"name,omitempty" xor:"ID"`
}
type UserV3 struct {
ID string `json:"id,omitempty" xor:"Name"`
Name string `json:"name,omitempty" xor:"ID"`
Password string `json:"password" required:"true"`
Domain *DomainV3 `json:"domain,omitempty" not:"Domain.ID,Domain.Name"`
}
type PasswordCredentialsV3 struct {
User *UserV3 `json:"user" required:"true"`
}
type TokenCredentialsV3 struct {
ID string `json:"id" required:"true"`
}
type IdentityCredentialsV3 struct {
Methods []string `json:"methods" required:"true"`
PasswordCredentials *PasswordCredentialsV3 `json:"password,omitempty" xor:"TokenCredentials"`
TokenCredentials *TokenCredentialsV3 `json:"token,omitempty" xor:"PasswordCredentials"`
}
type AuthOptionsV3 struct {
Identity *IdentityCredentialsV3 `json:"identity" required:"true"`
Scope *ScopeV3 `json:"scope,omitempty"`
}
func (opts AuthOptionsV3) ToTokenV3CreateMap(scope *ScopeOptsV3) (map[string]interface{}, error) {
if scope != nil {
opts.Scope = &ScopeV3{
Domain: &ScopeDomainV3{
ID: scope.DomainID,
Name: scope.DomainName,
},
Project: &ScopeProjectV3{
Domain: &ScopeProjectDomainV3{
ID: scope.DomainID,
Name: scope.DomainName,
},
ID: scope.ProjectID,
Name: scope.ProjectName,
},
}
}
return BuildRequestBody(opts, "auth")
}