diff options
author | Øyvind Grønnesby <oyving@yahooinc.com> | 2022-09-05 15:35:48 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-05 15:35:48 +0200 |
commit | 5a2114cd8a838a61547c9005b96579158bc3ef85 (patch) | |
tree | 5a9ce298827e0ed0950d43ab2e9a04c86dc66e47 /controller-api | |
parent | 1d5273dfa4da1f625fe8456030288ef5eac634cf (diff) | |
parent | 75f168b3b42db600be8b6e6282ded9535a8c793d (diff) |
Merge pull request #23922 from vespa-engine/ogronnesby/find-user-api
Expose method to find user and their tenants
Diffstat (limited to 'controller-api')
4 files changed, 23 insertions, 4 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 0de51795bc0..468e03bab13 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 @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.api.integration.stubs; +import com.yahoo.component.AbstractComponent; import com.yahoo.jdisc.http.filter.security.misc.User; import com.yahoo.vespa.hosted.controller.api.integration.user.UserId; import com.yahoo.vespa.hosted.controller.api.integration.user.UserManagement; @@ -13,13 +14,14 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; /** * @author jonmv */ -public class MockUserManagement implements UserManagement { +public class MockUserManagement extends AbstractComponent implements UserManagement { private final Map<Role, Set<User>> memberships = new HashMap<>(); @@ -48,7 +50,7 @@ public class MockUserManagement implements UserManagement { public void addUsers(Role role, Collection<UserId> users) { List<User> userObjs = users.stream() .map(id -> new User(id.value(), id.value(), null, null)) - .collect(Collectors.toList()); + .toList(); get(role).addAll(userObjs); } @@ -78,11 +80,22 @@ public class MockUserManagement implements UserManagement { @Override public List<Role> listRoles(UserId userId) { - return List.of(); + return memberships.entrySet().stream() + .filter(entry -> entry.getValue().stream().anyMatch(user -> user.name().equals(userId.value()))) + .map(Map.Entry::getKey) + .toList(); } @Override public List<Role> listRoles() { return new ArrayList<>(memberships.keySet()); } + + @Override + public Optional<User> findUser(String email) { + return memberships.values().stream() + .flatMap(Collection::stream) + .filter(user -> user.email().equals(email)) + .findFirst(); + } } 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 9abd318d085..db0b66bc9db 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 @@ -6,6 +6,7 @@ import com.yahoo.vespa.hosted.controller.api.role.Role; import java.util.Collection; import java.util.List; +import java.util.Optional; /** * Management of {@link UserId}s as members of {@link Role}s. @@ -40,4 +41,7 @@ public interface UserManagement { /** Returns all roles */ List<Role> listRoles(); + + /** Find a user with all attributes */ + Optional<User> findUser(String email); } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java index 43928b31b93..c2682334ce0 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java @@ -90,6 +90,8 @@ enum PathGroup { accountant("/billing/v2/accountant/{*}"), + userSearch("/user/v1/find"), + applicationKeys(Matcher.tenant, Matcher.application, "/application/v4/tenant/{tenant}/application/{application}/key/"), diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java index e7b6f7fe8e5..91eaec53aa4 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java @@ -194,7 +194,7 @@ enum Policy { /** Invoice management */ hostedAccountant(Privilege.grant(Action.all()) - .on(PathGroup.hostedAccountant, PathGroup.accountant) + .on(PathGroup.hostedAccountant, PathGroup.accountant, PathGroup.userSearch) .in(SystemName.PublicCd, SystemName.Public)), /** Listing endpoint certificates and re-requesting certificates */ |