Skip to content

Commit fccb051

Browse files
committed
Cosmetic changes
1 parent e142725 commit fccb051

File tree

10 files changed

+107
-44
lines changed

10 files changed

+107
-44
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package io.scalecube.security.environment;
2+
3+
import java.lang.reflect.Method;
4+
import org.junit.jupiter.api.extension.AfterAllCallback;
5+
import org.junit.jupiter.api.extension.AfterEachCallback;
6+
import org.junit.jupiter.api.extension.BeforeAllCallback;
7+
import org.junit.jupiter.api.extension.BeforeEachCallback;
8+
import org.junit.jupiter.api.extension.ExtensionContext;
9+
import org.slf4j.Logger;
10+
import org.slf4j.LoggerFactory;
11+
12+
public class LoggingExtension
13+
implements AfterEachCallback, BeforeEachCallback, AfterAllCallback, BeforeAllCallback {
14+
15+
private static final Logger LOGGER = LoggerFactory.getLogger(LoggingExtension.class);
16+
17+
@Override
18+
public void beforeAll(ExtensionContext context) {
19+
LOGGER.info(
20+
"***** Setup: " + context.getTestClass().map(Class::getSimpleName).orElse("") + " *****");
21+
}
22+
23+
@Override
24+
public void afterEach(ExtensionContext context) {
25+
LOGGER.info(
26+
"***** Test finished: "
27+
+ context.getTestClass().map(Class::getSimpleName).orElse("")
28+
+ "."
29+
+ context.getTestMethod().map(Method::getName).orElse("")
30+
+ "."
31+
+ context.getDisplayName()
32+
+ " *****");
33+
}
34+
35+
@Override
36+
public void beforeEach(ExtensionContext context) {
37+
LOGGER.info(
38+
"***** Test started: "
39+
+ context.getTestClass().map(Class::getSimpleName).orElse("")
40+
+ "."
41+
+ context.getTestMethod().map(Method::getName).orElse("")
42+
+ "."
43+
+ context.getDisplayName()
44+
+ " *****");
45+
}
46+
47+
@Override
48+
public void afterAll(ExtensionContext context) {
49+
LOGGER.info(
50+
"***** TearDown: "
51+
+ context.getTestClass().map(Class::getSimpleName).orElse("")
52+
+ " *****");
53+
}
54+
}

tests/src/test/java/io/scalecube/security/environment/VaultEnvironment.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,14 @@ public String policiesAclUri(String roleName) {
203203
return vaultAddr + "/v1/sys/policies/acl/" + roleName;
204204
}
205205

206+
public static Throwable getRootCause(Throwable throwable) {
207+
Throwable cause;
208+
while ((cause = throwable.getCause()) != null) {
209+
throwable = cause;
210+
}
211+
return throwable;
212+
}
213+
206214
@Override
207215
public void close() {
208216
vault.stop();

tests/src/test/java/io/scalecube/security/tokens/jwt/VaultIdentityTokenTests.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.scalecube.security.tokens.jwt;
22

3+
import static io.scalecube.security.environment.VaultEnvironment.getRootCause;
34
import static org.junit.jupiter.api.Assertions.assertNotNull;
45
import static org.junit.jupiter.api.Assertions.assertTrue;
56
import static org.junit.jupiter.api.Assertions.fail;
@@ -11,7 +12,6 @@
1112
import io.scalecube.security.environment.VaultEnvironment;
1213
import java.security.Key;
1314
import java.time.Duration;
14-
import java.util.concurrent.ExecutionException;
1515
import java.util.concurrent.TimeUnit;
1616
import org.junit.jupiter.api.AfterAll;
1717
import org.junit.jupiter.api.Assertions;
@@ -55,7 +55,7 @@ void testResolveTokenSuccessfully() throws Exception {
5555
}
5656

5757
@Test
58-
void testJwksKeyLocatorThrowsError() throws Exception {
58+
void testJwksKeyLocatorThrowsError() {
5959
final var token = generateToken();
6060

6161
Locator<Key> keyLocator = mock(Locator.class);
@@ -64,11 +64,11 @@ void testJwksKeyLocatorThrowsError() throws Exception {
6464
try {
6565
new JsonwebtokenResolver(keyLocator).resolve(token).get(3, TimeUnit.SECONDS);
6666
fail("Expected exception");
67-
} catch (ExecutionException e) {
68-
final var ex = e.getCause();
67+
} catch (Exception e) {
68+
final var ex = getRootCause(e);
6969
assertNotNull(ex);
7070
assertNotNull(ex.getMessage());
71-
assertTrue(ex.getMessage().startsWith("Cannot get key"));
71+
assertTrue(ex.getMessage().startsWith("Cannot get key"), "Exception: " + ex);
7272
}
7373
}
7474

tests/src/test/java/io/scalecube/security/vault/VaultServiceTokenTests.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.scalecube.security.vault;
22

3+
import static io.scalecube.security.environment.VaultEnvironment.getRootCause;
34
import static java.util.concurrent.CompletableFuture.completedFuture;
45
import static org.junit.jupiter.api.Assertions.assertNotNull;
56
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -51,7 +52,7 @@ void testGetServiceTokenUsingWrongCredentials() throws Exception {
5152
serviceTokenSupplier.getToken(Collections.emptyMap()).get(3, TimeUnit.SECONDS);
5253
fail("Exception expected");
5354
} catch (ExecutionException e) {
54-
final var ex = e.getCause();
55+
final var ex = getRootCause(e);
5556
assertNotNull(ex);
5657
assertNotNull(ex.getMessage());
5758
assertTrue(
@@ -75,7 +76,7 @@ void testGetNonExistingServiceToken() throws Exception {
7576
serviceTokenSupplier.getToken(Collections.emptyMap()).get(3, TimeUnit.SECONDS);
7677
fail("Exception expected");
7778
} catch (ExecutionException e) {
78-
final var ex = e.getCause();
79+
final var ex = getRootCause(e);
7980
assertNotNull(ex);
8081
assertNotNull(ex.getMessage());
8182
assertTrue(
@@ -119,7 +120,7 @@ void testGetServiceTokenByWrongServiceRole() throws Exception {
119120
serviceTokenSupplier.getToken(Collections.emptyMap()).get(3, TimeUnit.SECONDS);
120121
fail("Exception expected");
121122
} catch (ExecutionException e) {
122-
final var ex = e.getCause();
123+
final var ex = getRootCause(e);
123124
assertNotNull(ex);
124125
assertNotNull(ex.getMessage());
125126
assertTrue(
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.scalecube.security.environment.LoggingExtension
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
junit.jupiter.extensions.autodetection.enabled=true

tokens/src/main/java/io/scalecube/security/tokens/jwt/JsonwebtokenResolver.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,26 @@ public JsonwebtokenResolver(Locator<Key> keyLocator) {
2121
public CompletableFuture<JwtToken> resolve(String token) {
2222
return CompletableFuture.supplyAsync(
2323
() -> {
24-
if (LOGGER.isDebugEnabled()) {
25-
LOGGER.debug("Resolve token: {}", mask(token));
26-
}
27-
2824
final var claimsJws =
2925
Jwts.parser().keyLocator(keyLocator).build().parseSignedClaims(token);
30-
3126
return new JwtToken(claimsJws.getHeader(), claimsJws.getPayload());
3227
})
33-
.whenComplete(
28+
.handle(
3429
(jwtToken, ex) -> {
3530
if (jwtToken != null) {
3631
if (LOGGER.isDebugEnabled()) {
3732
LOGGER.debug("Resolved token: {}", mask(token));
3833
}
34+
return jwtToken;
3935
}
4036
if (ex != null) {
41-
if (LOGGER.isWarnEnabled()) {
42-
LOGGER.warn("Failed to resolve token: {}, cause: {}", mask(token), ex.toString());
37+
if (ex instanceof JwtTokenException) {
38+
throw (JwtTokenException) ex;
39+
} else {
40+
throw new JwtTokenException("Failed to resolve token: " + mask(token), ex);
4341
}
4442
}
43+
return null;
4544
});
4645
}
4746

tokens/src/main/java/io/scalecube/security/tokens/jwt/JwksKeyLocator.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,11 @@ protected Key locate(JwsHeader header) {
5555
kid -> {
5656
final var key = findKeyById(computeKeyList(), kid);
5757
if (key == null) {
58-
throw new JwtTokenException("Cannot find key by kid: " + kid);
58+
throw new RuntimeException("Cannot find key by kid: " + kid);
5959
}
6060
return new CachedKey(key, System.currentTimeMillis() + keyTtl);
6161
})
6262
.key();
63-
} catch (JwtTokenException ex) {
64-
throw ex;
6563
} catch (Exception ex) {
6664
throw new JwtTokenException(ex);
6765
} finally {
@@ -80,12 +78,12 @@ private JwkInfoList computeKeyList() {
8078
HttpRequest.newBuilder(jwksUri).GET().timeout(requestTimeout).build(),
8179
BodyHandlers.ofInputStream());
8280
} catch (Exception e) {
83-
throw new JwtTokenException("Failed to retrive jwk keys", e);
81+
throw new RuntimeException("Failed to retrive jwk keys", e);
8482
}
8583

8684
final var statusCode = httpResponse.statusCode();
8785
if (statusCode != 200) {
88-
throw new JwtTokenException("Failed to retrive jwk keys, status: " + statusCode);
86+
throw new RuntimeException("Failed to retrive jwk keys, status: " + statusCode);
8987
}
9088

9189
return toJwkInfoList(httpResponse.body());

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

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,12 @@ public void install() {
8686
final var rest = new Rest().header(VAULT_TOKEN_HEADER, token);
8787
final var keyName = keyNameSupplier.get();
8888

89-
createVaultIdentityKey(rest.url(buildVaultIdentityKeyUri(keyName)), keyName);
89+
createVaultIdentityKey(rest.url(vaultIdentityKeyUri(keyName)), keyName);
9090

9191
for (var role : serviceRoles.roles) {
9292
String roleName = roleNameBuilder.apply(role.role);
9393
createVaultIdentityRole(
94-
rest.url(buildVaultIdentityRoleUri(roleName)),
94+
rest.url(vaultIdentityRoleUri(roleName)),
9595
keyName,
9696
roleName,
9797
role.permissions);
@@ -127,9 +127,7 @@ private static void awaitSuccess(int status) {
127127
}
128128

129129
private void createVaultIdentityKey(Rest rest, String keyName) {
130-
LOGGER.debug("[createVaultIdentityKey] {}", keyName);
131-
132-
byte[] body =
130+
final byte[] body =
133131
Json.object()
134132
.add("rotation_period", keyRotationPeriod)
135133
.add("verification_ttl", keyVerificationTtl)
@@ -140,16 +138,15 @@ private void createVaultIdentityKey(Rest rest, String keyName) {
140138

141139
try {
142140
awaitSuccess(rest.body(body).post().getStatus());
141+
LOGGER.debug("Created vault identity key: {}", keyName);
143142
} catch (RestException e) {
144-
throw new RuntimeException(e);
143+
throw new RuntimeException("Failed to create vault identity key: " + keyName, e);
145144
}
146145
}
147146

148147
private void createVaultIdentityRole(
149148
Rest rest, String keyName, String roleName, List<String> permissions) {
150-
LOGGER.debug("[createVaultIdentityRole] {}", roleName);
151-
152-
byte[] body =
149+
final byte[] body =
153150
Json.object()
154151
.add("key", keyName)
155152
.add("template", createTemplate(permissions))
@@ -159,8 +156,9 @@ private void createVaultIdentityRole(
159156

160157
try {
161158
awaitSuccess(rest.body(body).post().getStatus());
159+
LOGGER.debug("Created vault identity role: {}", roleName);
162160
} catch (RestException e) {
163-
throw new RuntimeException(e);
161+
throw new RuntimeException("Failed to create vault identity role: " + roleName, e);
164162
}
165163
}
166164

@@ -170,14 +168,14 @@ private static String createTemplate(List<String> permissions) {
170168
Json.object().add("permissions", String.join(",", permissions)).toString().getBytes());
171169
}
172170

173-
private String buildVaultIdentityKeyUri(String keyName) {
171+
private String vaultIdentityKeyUri(String keyName) {
174172
return new StringJoiner("/", vaultAddress, "")
175173
.add("/v1/identity/oidc/key")
176174
.add(keyName)
177175
.toString();
178176
}
179177

180-
private String buildVaultIdentityRoleUri(String roleName) {
178+
private String vaultIdentityRoleUri(String roleName) {
181179
return new StringJoiner("/", vaultAddress, "")
182180
.add("/v1/identity/oidc/role")
183181
.add(roleName)
@@ -338,7 +336,7 @@ public ServiceRoles get() {
338336
try (final FileInputStream fis = new FileInputStream(file)) {
339337
return OBJECT_MAPPER.readValue(fis, ServiceRoles.class);
340338
}
341-
} catch (Exception e) {
339+
} catch (IOException e) {
342340
throw new RuntimeException(e);
343341
}
344342
}

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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,17 @@ public CompletableFuture<String> getToken(Map<String, String> tags) {
4545
.get()
4646
.thenApplyAsync(
4747
vaultToken -> {
48-
final String uri = toServiceTokenUri(tags);
49-
final String token = rpcGetToken(uri, vaultToken);
50-
LOGGER.debug(
51-
"[getToken][success] uri={}, tags={}, result={}", uri, tags, mask(token));
52-
return token;
48+
final var role = serviceTokenNameBuilder.apply(serviceRole, tags);
49+
final var uri = serviceTokenUri(vaultAddress, role);
50+
try {
51+
final var token = rpcGetToken(uri, vaultToken);
52+
if (LOGGER.isDebugEnabled()) {
53+
LOGGER.debug("Got service token: {}, role: {}", mask(token), role);
54+
}
55+
return token;
56+
} catch (Exception ex) {
57+
throw new RuntimeException("Failed to get service token, role: " + role, ex);
58+
}
5359
});
5460
}
5561

@@ -74,11 +80,8 @@ private static String rpcGetToken(String uri, String vaultToken) {
7480
}
7581
}
7682

77-
private String toServiceTokenUri(Map<String, String> tags) {
78-
return new StringJoiner("/", vaultAddress, "")
79-
.add("/v1/identity/oidc/token")
80-
.add(serviceTokenNameBuilder.apply(serviceRole, tags))
81-
.toString();
83+
private static String serviceTokenUri(final String address, final String role) {
84+
return new StringJoiner("/", address, "").add("/v1/identity/oidc/token").add(role).toString();
8285
}
8386

8487
private static String mask(String data) {

0 commit comments

Comments
 (0)