github.com/gophercloud/gophercloud@v1.11.0/openstack/identity/v2/users/requests.go (about) 1 package users 2 3 import ( 4 "github.com/gophercloud/gophercloud" 5 "github.com/gophercloud/gophercloud/pagination" 6 ) 7 8 // List lists the existing users. 9 func List(client *gophercloud.ServiceClient) pagination.Pager { 10 return pagination.NewPager(client, rootURL(client), func(r pagination.PageResult) pagination.Page { 11 return UserPage{pagination.SinglePageBase(r)} 12 }) 13 } 14 15 // CommonOpts are the parameters that are shared between CreateOpts and 16 // UpdateOpts 17 type CommonOpts struct { 18 // Either a name or username is required. When provided, the value must be 19 // unique or a 409 conflict error will be returned. If you provide a name but 20 // omit a username, the latter will be set to the former; and vice versa. 21 Name string `json:"name,omitempty"` 22 Username string `json:"username,omitempty"` 23 24 // TenantID is the ID of the tenant to which you want to assign this user. 25 TenantID string `json:"tenantId,omitempty"` 26 27 // Enabled indicates whether this user is enabled or not. 28 Enabled *bool `json:"enabled,omitempty"` 29 30 // Email is the email address of this user. 31 Email string `json:"email,omitempty"` 32 } 33 34 // CreateOpts represents the options needed when creating new users. 35 type CreateOpts CommonOpts 36 37 // CreateOptsBuilder allows extensions to add additional parameters to the 38 // Create request. 39 type CreateOptsBuilder interface { 40 ToUserCreateMap() (map[string]interface{}, error) 41 } 42 43 // ToUserCreateMap assembles a request body based on the contents of a 44 // CreateOpts. 45 func (opts CreateOpts) ToUserCreateMap() (map[string]interface{}, error) { 46 if opts.Name == "" && opts.Username == "" { 47 err := gophercloud.ErrMissingInput{} 48 err.Argument = "users.CreateOpts.Name/users.CreateOpts.Username" 49 err.Info = "Either a Name or Username must be provided" 50 return nil, err 51 } 52 return gophercloud.BuildRequestBody(opts, "user") 53 } 54 55 // Create is the operation responsible for creating new users. 56 func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) { 57 b, err := opts.ToUserCreateMap() 58 if err != nil { 59 r.Err = err 60 return 61 } 62 resp, err := client.Post(rootURL(client), b, &r.Body, &gophercloud.RequestOpts{ 63 OkCodes: []int{200, 201}, 64 }) 65 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 66 return 67 } 68 69 // Get requests details on a single user, either by ID or Name. 70 func Get(client *gophercloud.ServiceClient, id string) (r GetResult) { 71 resp, err := client.Get(ResourceURL(client, id), &r.Body, nil) 72 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 73 return 74 } 75 76 // UpdateOptsBuilder allows extensions to add additional parameters to the 77 // Update request. 78 type UpdateOptsBuilder interface { 79 ToUserUpdateMap() (map[string]interface{}, error) 80 } 81 82 // UpdateOpts specifies the base attributes that may be updated on an 83 // existing server. 84 type UpdateOpts CommonOpts 85 86 // ToUserUpdateMap formats an UpdateOpts structure into a request body. 87 func (opts UpdateOpts) ToUserUpdateMap() (map[string]interface{}, error) { 88 return gophercloud.BuildRequestBody(opts, "user") 89 } 90 91 // Update is the operation responsible for updating exist users by their ID. 92 func Update(client *gophercloud.ServiceClient, id string, opts UpdateOptsBuilder) (r UpdateResult) { 93 b, err := opts.ToUserUpdateMap() 94 if err != nil { 95 r.Err = err 96 return 97 } 98 resp, err := client.Put(ResourceURL(client, id), &b, &r.Body, &gophercloud.RequestOpts{ 99 OkCodes: []int{200}, 100 }) 101 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 102 return 103 } 104 105 // Delete is the operation responsible for permanently deleting a User. 106 func Delete(client *gophercloud.ServiceClient, id string) (r DeleteResult) { 107 resp, err := client.Delete(ResourceURL(client, id), nil) 108 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 109 return 110 } 111 112 // ListRoles lists the existing roles that can be assigned to users. 113 func ListRoles(client *gophercloud.ServiceClient, tenantID, userID string) pagination.Pager { 114 return pagination.NewPager(client, listRolesURL(client, tenantID, userID), func(r pagination.PageResult) pagination.Page { 115 return RolePage{pagination.SinglePageBase(r)} 116 }) 117 }