diff --git a/definitions.go b/definitions.go index aff77e4..9e4697a 100644 --- a/definitions.go +++ b/definitions.go @@ -652,6 +652,12 @@ type UserRepresentation struct { Username *string `json:"username,omitempty"` } +// UsersPageRepresentation is used to manage users paging +type UsersPageRepresentation struct { + Count *int `json:"id,omitempty"` + Users []UserRepresentation `json:"users,omitempty"` +} + type UserSessionRepresentation struct { Clients *map[string]interface{} `json:"clients,omitempty"` Id *string `json:"id,omitempty"` @@ -664,4 +670,4 @@ type UserSessionRepresentation struct { type SmsCodeRepresentation struct { Code *string `json:"code,omitempty"` -} \ No newline at end of file +} diff --git a/integration/integration.go b/integration/integration.go index e485a0b..c2c5cc0 100644 --- a/integration/integration.go +++ b/integration/integration.go @@ -12,6 +12,7 @@ import ( const ( tstRealm = "__internal" + reqRealm = "master" user = "version" ) @@ -131,7 +132,7 @@ func main() { var username = strings.ToLower(u.firstname + "." + u.lastname) var email = username + "@cloudtrust.ch" var err error - _, err = client.CreateUser(accessToken, tstRealm, keycloak.UserRepresentation{ + _, err = client.CreateUser(accessToken, reqRealm, tstRealm, keycloak.UserRepresentation{ Username: &username, FirstName: &u.firstname, LastName: &u.lastname, @@ -159,15 +160,15 @@ func main() { { { // No parameters. - var users, err = client.GetUsers(accessToken, tstRealm) + var users, err = client.GetUsers(accessToken, reqRealm, tstRealm) if err != nil { log.Fatalf("could not get users: %v", err) } - if len(users) != 50 { + if len(users.Users) != 50 { log.Fatalf("there should be 50 users") } - user, err := client.GetUser(accessToken, tstRealm, *(users[0].Id)) + user, err := client.GetUser(accessToken, tstRealm, *(users.Users[0].Id)) if err != nil { log.Fatalf("could not get user") } @@ -180,62 +181,62 @@ func main() { } { // email. - var users, err = client.GetUsers(accessToken, tstRealm, "email", "john.doe@cloudtrust.ch") + var users, err = client.GetUsers(accessToken, reqRealm, tstRealm, "email", "john.doe@cloudtrust.ch") if err != nil { log.Fatalf("could not get users: %v", err) } - if len(users) != 1 { + if len(users.Users) != 1 { log.Fatalf("there should be 1 user matched by email") } } { // firstname. - var users, err = client.GetUsers(accessToken, tstRealm, "firstName", "John") + var users, err = client.GetUsers(accessToken, reqRealm, tstRealm, "firstName", "John") if err != nil { log.Fatalf("could not get users: %v", err) } // Match John and Johnny - if len(users) != 2 { + if len(users.Users) != 2 { log.Fatalf("there should be 2 user matched by firstname") } } { // lastname. - var users, err = client.GetUsers(accessToken, tstRealm, "lastName", "Wells") + var users, err = client.GetUsers(accessToken, reqRealm, tstRealm, "lastName", "Wells") if err != nil { log.Fatalf("could not get users: %v", err) } - if len(users) != 3 { + if len(users.Users) != 3 { log.Fatalf("there should be 3 users matched by lastname") } } { // username. - var users, err = client.GetUsers(accessToken, tstRealm, "username", "lucia.nelson") + var users, err = client.GetUsers(accessToken, reqRealm, tstRealm, "username", "lucia.nelson") if err != nil { log.Fatalf("could not get users: %v", err) } - if len(users) != 1 { + if len(users.Users) != 1 { log.Fatalf("there should be 1 user matched by username") } } { // first. - var users, err = client.GetUsers(accessToken, tstRealm, "max", "7") + var users, err = client.GetUsers(accessToken, reqRealm, tstRealm, "max", "7") if err != nil { log.Fatalf("could not get users: %v", err) } - if len(users) != 7 { + if len(users.Users) != 7 { log.Fatalf("there should be 7 users matched by max") } } { // search. - var users, err = client.GetUsers(accessToken, tstRealm, "search", "le") + var users, err = client.GetUsers(accessToken, reqRealm, tstRealm, "search", "le") if err != nil { log.Fatalf("could not get users: %v", err) } - if len(users) != 7 { + if len(users.Users) != 7 { log.Fatalf("there should be 7 users matched by search") } } @@ -248,17 +249,17 @@ func main() { // Get user ID. var userID string { - var users, err = client.GetUsers(accessToken, tstRealm, "search", "Maria") + var users, err = client.GetUsers(accessToken, reqRealm, tstRealm, "search", "Maria") if err != nil { log.Fatalf("could not get Maria: %v", err) } - if len(users) != 1 { + if len(users.Users) != 1 { log.Fatalf("there should be 1 users matched by search Maria") } - if users[0].Id == nil { + if users.Users[0].Id == nil { log.Fatalf("user ID should not be nil") } - userID = *users[0].Id + userID = *users.Users[0].Id } // Update user. var username = "Maria" @@ -275,14 +276,14 @@ func main() { } // Check that user was updated. { - var users, err = client.GetUsers(accessToken, tstRealm, "search", "Maria") + var users, err = client.GetUsers(accessToken, reqRealm, tstRealm, "search", "Maria") if err != nil { log.Fatalf("could not get Maria: %v", err) } - if len(users) != 1 { + if len(users.Users) != 1 { log.Fatalf("there should be 1 users matched by search Maria") } - if users[0].LastName == nil || *users[0].LastName != updatedLastname { + if users.Users[0].LastName == nil || *users.Users[0].LastName != updatedLastname { log.Fatalf("user was not updated") } } @@ -305,17 +306,17 @@ func main() { // Get user ID. var userID string { - var users, err = client.GetUsers(accessToken, tstRealm, "search", "Toni") + var users, err = client.GetUsers(accessToken, reqRealm, tstRealm, "search", "Toni") if err != nil { log.Fatalf("could not get Toni: %v", err) } - if len(users) != 1 { + if len(users.Users) != 1 { log.Fatalf("there should be 1 users matched by search Toni") } - if users[0].Id == nil { + if users.Users[0].Id == nil { log.Fatalf("user ID should not be nil") } - userID = *users[0].Id + userID = *users.Users[0].Id } // Delete user. { diff --git a/users.go b/users.go index 78bdac2..05c8561 100644 --- a/users.go +++ b/users.go @@ -28,12 +28,12 @@ const ( // Parameters: email, first (paging offset, int), firstName, lastName, username, // max (maximum result size, default = 100), // search (string contained in username, firstname, lastname or email) -func (c *Client) GetUsers(accessToken string, reqRealmName, targetRealmName string, paramKV ...string) ([]UserRepresentation, error) { +func (c *Client) GetUsers(accessToken string, reqRealmName, targetRealmName string, paramKV ...string) (UsersPageRepresentation, error) { + var resp UsersPageRepresentation if len(paramKV)%2 != 0 { - return nil, fmt.Errorf("the number of key/val parameters should be even") + return resp, fmt.Errorf("the number of key/val parameters should be even") } - var resp = []UserRepresentation{} var plugins = append(createQueryPlugins(paramKV...), url.Path(usersAdminExtensionApiPath), url.Param("realmReq", reqRealmName), url.Param("realm", targetRealmName)) var err = c.get(accessToken, &resp, plugins...) return resp, err @@ -102,7 +102,7 @@ func (c *Client) ExecuteActionsEmail(accessToken string, realmName string, userI return c.put(accessToken, plugins...) } -// Send a new enrolment code and return it +// SendNewEnrolmentCode sends a new enrolment code and return it func (c *Client) SendNewEnrolmentCode(accessToken string, realmName string, userID string) (SmsCodeRepresentation, error) { var paramKV []string paramKV = append(paramKV, "userid", userID)