aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortoby <smorgrav@yahoo-inc.com>2019-11-07 16:35:22 +0100
committertoby <smorgrav@yahoo-inc.com>2019-11-07 16:35:22 +0100
commit5c53251ef2d984d9dc201e4db4fc65adfe77201a (patch)
tree24166715894452c19f7a47a9e5963bb203ee975e
parent7b07a0e1ae676c764d404aa13e62cc8bb2877257 (diff)
Add method and use this in already supported restapi
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockUserManagement.java8
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/user/UserManagement.java3
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java3
3 files changed, 13 insertions, 1 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockUserManagement.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockUserManagement.java
index 03eda33233d..145b468688c 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockUserManagement.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockUserManagement.java
@@ -6,6 +6,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.user.UserManagement;
import com.yahoo.vespa.hosted.controller.api.role.Role;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -42,6 +43,13 @@ public class MockUserManagement implements UserManagement {
}
@Override
+ public void addRoles(UserId user, Collection<Role> roles) {
+ for (Role role : roles) {
+ addUsers(role, Collections.singletonList(user));
+ }
+ }
+
+ @Override
public void removeUsers(Role role, Collection<UserId> users) {
memberships.get(role).removeIf(user -> users.contains(new UserId(user.email())));
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/user/UserManagement.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/user/UserManagement.java
index f56a9f66288..efe31f6f118 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/user/UserManagement.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/user/UserManagement.java
@@ -21,6 +21,9 @@ public interface UserManagement {
/** Ensures the given users exist, and are part of the given role, or throws if the role does not exist. */
void addUsers(Role role, Collection<UserId> users);
+ /** Ensures the given user exist, and are part of the given roles, or throws if the roles does not exist. */
+ void addRoles(UserId user, Collection<Role> roles);
+
/** Ensures none of the given users are part of the given role, or throws if the role does not exist. */
void removeUsers(Role role, Collection<UserId> users);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java
index 752409d5694..e9ca79e2b86 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java
@@ -191,8 +191,9 @@ public class UserApiHandler extends LoggingRequestHandler {
var user = new UserId(require("user", Inspector::asString, requestObject));
var roles = SlimeStream.fromArray(requestObject.field("roles"), Inspector::asString)
.map(roleName -> Roles.toRole(tenant, roleName))
- .peek(role -> users.addUsers(role, List.of(user)))
.collect(Collectors.toUnmodifiableList());
+
+ users.addRoles(user, roles);
return new MessageResponse(user + " is now a member of " + roles.stream().map(Role::toString).collect(Collectors.joining(", ")));
}