Skip to content

Commit 60c42f9

Browse files
authored
Merge pull request #104 from scalecube/enh1
Added async support for vault-token-supplier
2 parents c1aa627 + 4339aeb commit 60c42f9

File tree

2 files changed

+44
-19
lines changed

2 files changed

+44
-19
lines changed

vault/src/main/java/io/scalecube/security/vault/VaultServiceRolesInstaller.java

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import java.util.List;
2020
import java.util.Objects;
2121
import java.util.StringJoiner;
22+
import java.util.concurrent.CompletableFuture;
23+
import java.util.concurrent.TimeUnit;
2224
import java.util.function.Function;
2325
import java.util.function.Supplier;
2426
import org.slf4j.Logger;
@@ -37,14 +39,16 @@ public class VaultServiceRolesInstaller {
3739
new ObjectMapper(new YAMLFactory()).setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
3840

3941
private final String vaultAddress;
40-
private final Supplier<String> vaultTokenSupplier;
42+
private final CompletableFuture<String> vaultTokenSupplier;
4143
private final Supplier<String> keyNameSupplier;
4244
private final Function<String, String> roleNameBuilder;
4345
private final List<Supplier<ServiceRoles>> serviceRolesSources;
4446
private final String keyAlgorithm;
4547
private final String keyRotationPeriod;
4648
private final String keyVerificationTtl;
4749
private final String roleTtl;
50+
private final long timeout;
51+
private final TimeUnit timeUnit;
4852

4953
private VaultServiceRolesInstaller(Builder builder) {
5054
this.vaultAddress = builder.vaultAddress;
@@ -56,6 +60,8 @@ private VaultServiceRolesInstaller(Builder builder) {
5660
this.keyRotationPeriod = builder.keyRotationPeriod;
5761
this.keyVerificationTtl = builder.keyVerificationTtl;
5862
this.roleTtl = builder.roleTtl;
63+
this.timeout = builder.timeout;
64+
this.timeUnit = builder.timeUnit;
5965
}
6066

6167
/**
@@ -74,19 +80,30 @@ public void install() {
7480
return;
7581
}
7682

77-
final String token = vaultTokenSupplier.get();
78-
final Rest rest = new Rest().header(VAULT_TOKEN_HEADER, token);
79-
80-
final String keyName = keyNameSupplier.get();
81-
createVaultIdentityKey(rest.url(buildVaultIdentityKeyUri(keyName)), keyName);
82-
83-
for (Role role : serviceRoles.roles) {
84-
String roleName = roleNameBuilder.apply(role.role);
85-
createVaultIdentityRole(
86-
rest.url(buildVaultIdentityRoleUri(roleName)), keyName, roleName, role.permissions);
83+
try {
84+
vaultTokenSupplier
85+
.thenAcceptAsync(
86+
token -> {
87+
final var rest = new Rest().header(VAULT_TOKEN_HEADER, token);
88+
final var keyName = keyNameSupplier.get();
89+
90+
createVaultIdentityKey(rest.url(buildVaultIdentityKeyUri(keyName)), keyName);
91+
92+
for (var role : serviceRoles.roles) {
93+
String roleName = roleNameBuilder.apply(role.role);
94+
createVaultIdentityRole(
95+
rest.url(buildVaultIdentityRoleUri(roleName)),
96+
keyName,
97+
roleName,
98+
role.permissions);
99+
}
100+
101+
LOGGER.debug("Installed serviceRoles ({})", serviceRoles);
102+
})
103+
.get(timeout, timeUnit);
104+
} catch (Exception e) {
105+
throw new RuntimeException(e);
87106
}
88-
89-
LOGGER.debug("Installed serviceRoles ({})", serviceRoles);
90107
}
91108

92109
private ServiceRoles loadServiceRoles() {
@@ -338,14 +355,16 @@ public String toString() {
338355
public static class Builder {
339356

340357
private String vaultAddress;
341-
private Supplier<String> vaultTokenSupplier;
358+
private CompletableFuture<String> vaultTokenSupplier;
342359
private Supplier<String> keyNameSupplier;
343360
private Function<String, String> roleNameBuilder;
344361
private List<Supplier<ServiceRoles>> serviceRolesSources = DEFAULT_SERVICE_ROLES_SOURCES;
345362
private String keyAlgorithm = "RS256";
346363
private String keyRotationPeriod = "1h";
347364
private String keyVerificationTtl = "1h";
348365
private String roleTtl = "1m";
366+
private long timeout = 10;
367+
private TimeUnit timeUnit = TimeUnit.SECONDS;
349368

350369
public Builder() {}
351370

@@ -354,7 +373,7 @@ public Builder vaultAddress(String vaultAddress) {
354373
return this;
355374
}
356375

357-
public Builder vaultTokenSupplier(Supplier<String> vaultTokenSupplier) {
376+
public Builder vaultTokenSupplier(CompletableFuture<String> vaultTokenSupplier) {
358377
this.vaultTokenSupplier = vaultTokenSupplier;
359378
return this;
360379
}
@@ -399,6 +418,12 @@ public Builder roleTtl(String roleTtl) {
399418
return this;
400419
}
401420

421+
public Builder timeout(long timeout, TimeUnit timeUnit) {
422+
this.timeout = timeout;
423+
this.timeUnit = timeUnit;
424+
return this;
425+
}
426+
402427
public VaultServiceRolesInstaller build() {
403428
return new VaultServiceRolesInstaller(this);
404429
}

vault/src/main/java/io/scalecube/security/vault/VaultServiceTokenSupplier.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import java.util.Map;
88
import java.util.Objects;
99
import java.util.StringJoiner;
10+
import java.util.concurrent.CompletableFuture;
1011
import java.util.function.BiFunction;
11-
import java.util.function.Supplier;
1212
import org.slf4j.Logger;
1313
import org.slf4j.LoggerFactory;
1414

@@ -20,7 +20,7 @@ public class VaultServiceTokenSupplier {
2020

2121
private final String vaultAddress;
2222
private final String serviceRole;
23-
private final Supplier<String> vaultTokenSupplier;
23+
private final CompletableFuture<String> vaultTokenSupplier;
2424
private final BiFunction<String, Map<String, String>, String> serviceTokenNameBuilder;
2525

2626
private VaultServiceTokenSupplier(Builder builder) {
@@ -93,7 +93,7 @@ public static class Builder {
9393

9494
private String vaultAddress;
9595
private String serviceRole;
96-
private Supplier<String> vaultTokenSupplier;
96+
private CompletableFuture<String> vaultTokenSupplier;
9797
private BiFunction<String, Map<String, String>, String> serviceTokenNameBuilder;
9898

9999
public Builder() {}
@@ -108,7 +108,7 @@ public Builder serviceRole(String serviceRole) {
108108
return this;
109109
}
110110

111-
public Builder vaultTokenSupplier(Supplier<String> vaultTokenSupplier) {
111+
public Builder vaultTokenSupplier(CompletableFuture<String> vaultTokenSupplier) {
112112
this.vaultTokenSupplier = vaultTokenSupplier;
113113
return this;
114114
}

0 commit comments

Comments
 (0)