/
user.go
159 lines (137 loc) · 3.96 KB
/
user.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package ccv2
import (
"bytes"
"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
"encoding/json"
"code.cloudfoundry.org/cli/api/cloudcontroller"
"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/internal"
)
// User represents a Cloud Controller User.
type User struct {
// GUID is the unique user identifier.
GUID string
// Username of the user
Username string
}
// UnmarshalJSON helps unmarshal a Cloud Controller User response.
func (user *User) UnmarshalJSON(data []byte) error {
var ccUser struct {
Metadata internal.Metadata `json:"metadata"`
Entity struct {
Username string `json:"username"`
} `json:"entity"`
}
err := cloudcontroller.DecodeJSON(data, &ccUser)
if err != nil {
return err
}
user.GUID = ccUser.Metadata.GUID
user.Username = ccUser.Entity.Username
return nil
}
// CreateUser creates a new Cloud Controller User from the provided UAA user
// ID.
func (client *Client) CreateUser(uaaUserID string) (User, Warnings, error) {
type userRequestBody struct {
GUID string `json:"guid"`
}
bodyBytes, err := json.Marshal(userRequestBody{
GUID: uaaUserID,
})
if err != nil {
return User{}, nil, err
}
request, err := client.newHTTPRequest(requestOptions{
RequestName: internal.PostUserRequest,
Body: bytes.NewReader(bodyBytes),
})
if err != nil {
return User{}, nil, err
}
var user User
response := cloudcontroller.Response{
DecodeJSONResponseInto: &user,
}
err = client.connection.Make(request, &response)
if err != nil {
return User{}, response.Warnings, err
}
return user, response.Warnings, nil
}
// GetUserOrganizations get all organizations available to user
func (client *Client) GetUserOrganizations(uaaUserID string, filters ...Filter) ([]Organization, Warnings, error) {
allQueries := ConvertFilterParameters(filters)
allQueries.Add("order-by", "name")
request, err := client.newHTTPRequest(requestOptions{
RequestName: internal.GetUserOrganizationsRequest,
URIParams: Params{"user_guid": uaaUserID},
Query: allQueries,
})
if err != nil {
return []Organization{}, nil, err
}
var fullOrgsList []Organization
warnings, err := client.paginate(request, Organization{}, func(item interface{}) error {
if org, ok := item.(Organization); ok {
fullOrgsList = append(fullOrgsList, org)
} else {
return ccerror.UnknownObjectInListError{
Expected: Organization{},
Unexpected: item,
}
}
return nil
})
return fullOrgsList, warnings, err
}
// GetUserSpaces get all spaces available to user
func (client *Client) GetUserSpaces(uaaUserID string, filters ...Filter) ([]Space, Warnings, error) {
allQueries := ConvertFilterParameters(filters)
allQueries.Add("order-by", "name")
request, err := client.newHTTPRequest(requestOptions{
RequestName: internal.GetUserSpacesRequest,
URIParams: Params{"user_guid": uaaUserID},
Query: allQueries,
})
if err != nil {
return []Space{}, nil, err
}
var fullSpacesList []Space
warnings, err := client.paginate(request, Space{}, func(item interface{}) error {
if org, ok := item.(Space); ok {
fullSpacesList = append(fullSpacesList, org)
} else {
return ccerror.UnknownObjectInListError{
Expected: Space{},
Unexpected: item,
}
}
return nil
})
return fullSpacesList, warnings, err
}
// GetUsers returns back a list of User based off of the
// provided filters.
func (client *Client) GetUsers(filters ...Filter) ([]User, Warnings, error) {
allQueries := ConvertFilterParameters(filters)
request, err := client.newHTTPRequest(requestOptions{
RequestName: internal.GetUsersRequest,
Query: allQueries,
})
if err != nil {
return nil, nil, err
}
var fullUsersList []User
warnings, err := client.paginate(request, User{}, func(item interface{}) error {
if user, ok := item.(User); ok {
fullUsersList = append(fullUsersList, user)
} else {
return ccerror.UnknownObjectInListError{
Expected: User{},
Unexpected: item,
}
}
return nil
})
return fullUsersList, warnings, err
}