summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorØyvind Grønnesby <ogr@ogr.no>2022-09-05 16:32:42 +0200
committerGitHub <noreply@github.com>2022-09-05 16:32:42 +0200
commitd2f4fba91b90a54432bc46409efbb85917c383a7 (patch)
tree01728f498dc4ae3b433e367a2519097803143440 /controller-api
parent0548f6a7180b92083cf248abbfdacb3fe6606e6f (diff)
Revert "Revert "Expose method to find user and their tenants""
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockUserManagement.java19
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/user/UserManagement.java4
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java2
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java2
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 */