Skip to content

Commit 2f885d6

Browse files
committed
WIP
1 parent d925402 commit 2f885d6

File tree

4 files changed

+80
-6
lines changed

4 files changed

+80
-6
lines changed

services-api/src/main/java/io/scalecube/services/auth/ServiceRolesProcessor.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,16 @@
33
import io.scalecube.services.methods.ServiceRoleDefinition;
44
import java.util.Collection;
55

6+
/**
7+
* Handler for processing of service roles which come out of registered services. Used as
8+
* post-construction step in bootstraping of services.
9+
*/
610
public interface ServiceRolesProcessor {
711

8-
void process(Collection<ServiceRoleDefinition> serviceRoles);
12+
/**
13+
* Function that does processing of service roles.
14+
*
15+
* @param values collection {@link ServiceRoleDefinition} objects
16+
*/
17+
void process(Collection<ServiceRoleDefinition> values);
918
}

services-discovery/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
<dependencies>
1515
<dependency>
1616
<groupId>io.scalecube</groupId>
17-
<artifactId>scalecube-cluster</artifactId>
17+
<artifactId>scalecube-services-api</artifactId>
18+
<version>${project.version}</version>
1819
</dependency>
1920
<dependency>
2021
<groupId>io.scalecube</groupId>
21-
<artifactId>scalecube-services-api</artifactId>
22-
<version>${project.version}</version>
22+
<artifactId>scalecube-cluster</artifactId>
2323
</dependency>
2424
<!-- Tests -->
2525
<dependency>

services-security/pom.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@
1515
<dependencies>
1616
<dependency>
1717
<groupId>io.scalecube</groupId>
18-
<artifactId>scalecube-services</artifactId>
18+
<artifactId>scalecube-services-api</artifactId>
1919
<version>${project.version}</version>
2020
</dependency>
21-
<!-- Other -->
2221
<dependency>
2322
<groupId>io.scalecube</groupId>
2423
<artifactId>scalecube-security-tokens</artifactId>
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package io.scalecube.services.security;
2+
3+
import io.scalecube.security.vault.VaultServiceRolesInstaller;
4+
import io.scalecube.security.vault.VaultServiceRolesInstaller.ServiceRoles;
5+
import io.scalecube.security.vault.VaultServiceRolesInstaller.ServiceRoles.Role;
6+
import io.scalecube.services.auth.ServiceRolesProcessor;
7+
import io.scalecube.services.methods.ServiceRoleDefinition;
8+
import java.util.ArrayList;
9+
import java.util.Collection;
10+
import java.util.List;
11+
import java.util.concurrent.CompletableFuture;
12+
import java.util.function.Function;
13+
import java.util.function.Supplier;
14+
15+
public class VaultServiceRolesProcessor implements ServiceRolesProcessor {
16+
17+
private final String vaultAddress;
18+
private final Supplier<CompletableFuture<String>> vaultTokenSupplier;
19+
private final Supplier<String> keyNameSupplier;
20+
private final Function<String, String> roleNameBuilder;
21+
22+
/**
23+
* Constructor.
24+
*
25+
* @param vaultAddress vaultAddress
26+
* @param vaultTokenSupplier vaultTokenSupplier
27+
* @param keyNameSupplier keyNameSupplier
28+
* @param roleNameBuilder roleNameBuilder
29+
*/
30+
public VaultServiceRolesProcessor(
31+
String vaultAddress,
32+
Supplier<CompletableFuture<String>> vaultTokenSupplier,
33+
Supplier<String> keyNameSupplier,
34+
Function<String, String> roleNameBuilder) {
35+
this.vaultAddress = vaultAddress;
36+
this.vaultTokenSupplier = vaultTokenSupplier;
37+
this.keyNameSupplier = keyNameSupplier;
38+
this.roleNameBuilder = roleNameBuilder;
39+
}
40+
41+
@Override
42+
public void process(Collection<ServiceRoleDefinition> values) {
43+
new VaultServiceRolesInstaller.Builder()
44+
.vaultAddress(vaultAddress)
45+
.vaultTokenSupplier(vaultTokenSupplier)
46+
.serviceRolesSources(List.of(() -> toServiceRoles(values)))
47+
.keyNameSupplier(keyNameSupplier)
48+
.roleNameBuilder(roleNameBuilder)
49+
.build()
50+
.install();
51+
}
52+
53+
private static ServiceRoles toServiceRoles(Collection<ServiceRoleDefinition> values) {
54+
return new ServiceRoles()
55+
.roles(
56+
values.stream()
57+
.map(
58+
roleDefinition -> {
59+
final var role = new Role();
60+
role.role(roleDefinition.role());
61+
role.permissions(new ArrayList<>(roleDefinition.permissions()));
62+
return role;
63+
})
64+
.toList());
65+
}
66+
}

0 commit comments

Comments
 (0)