Skip to content

Commit ce936c4

Browse files
committed
WIP on security module
1 parent afc3dd1 commit ce936c4

File tree

10 files changed

+163
-10
lines changed

10 files changed

+163
-10
lines changed

pom.xml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161
<properties>
6262
<scalecube-cluster.version>2.6.7.RC1</scalecube-cluster.version>
6363
<scalecube-commons.version>1.0.13</scalecube-commons.version>
64-
<scalecube-security-tokens.version>1.0.16</scalecube-security-tokens.version>
64+
<scalecube-security-tokens.version>1.0.18</scalecube-security-tokens.version>
65+
<scalecube-config.version>0.4.15</scalecube-config.version>
6566

6667
<reactor.version>2020.0.5</reactor.version>
6768
<jackson.version>2.11.0</jackson.version>
@@ -71,6 +72,7 @@
7172
<log4j.version>2.13.2</log4j.version>
7273
<disruptor.version>3.4.2</disruptor.version>
7374
<netty.version>4.1.60.Final</netty.version>
75+
<snakeyaml.version>1.26</snakeyaml.version>
7476

7577
<jsr305.version>3.0.2</jsr305.version>
7678
<jctools.version>2.1.2</jctools.version>
@@ -85,7 +87,7 @@
8587
<module>services-transport-parent</module>
8688
<module>services-discovery</module>
8789
<module>services-bytebuf-codec</module>
88-
<module>services-security</module>
90+
<module>services-security-parent</module>
8991
<module>services-examples</module>
9092
</modules>
9193

@@ -106,6 +108,13 @@
106108
<version>${scalecube-security-tokens.version}</version>
107109
</dependency>
108110

111+
<!-- Scalecube config -->
112+
<dependency>
113+
<groupId>io.scalecube</groupId>
114+
<artifactId>config-vault</artifactId>
115+
<version>${scalecube-config.version}</version>
116+
</dependency>
117+
109118
<!-- Scalecube cluster -->
110119
<dependency>
111120
<groupId>io.scalecube</groupId>
@@ -206,6 +215,13 @@
206215
<artifactId>netty-common</artifactId>
207216
<version>${netty.version}</version>
208217
</dependency>
218+
219+
<!-- Yaml -->
220+
<dependency>
221+
<groupId>org.yaml</groupId>
222+
<artifactId>snakeyaml</artifactId>
223+
<version>${snakeyaml.version}</version>
224+
</dependency>
209225
</dependencies>
210226
</dependencyManagement>
211227

services-security-parent/pom.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<parent>
8+
<groupId>io.scalecube</groupId>
9+
<artifactId>scalecube-services-parent</artifactId>
10+
<version>2.10.13-SNAPSHOT</version>
11+
</parent>
12+
13+
<artifactId>scalecube-services-security-parent</artifactId>
14+
<packaging>pom</packaging>
15+
16+
<modules>
17+
<module>services-security</module>
18+
<module>services-security-vault</module>
19+
</modules>
20+
21+
</project>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<parent>
8+
<groupId>io.scalecube</groupId>
9+
<artifactId>scalecube-services-security-parent</artifactId>
10+
<version>2.10.13-SNAPSHOT</version>
11+
</parent>
12+
13+
<artifactId>scalecube-services-security-vault</artifactId>
14+
15+
<dependencies>
16+
<dependency>
17+
<groupId>io.scalecube</groupId>
18+
<artifactId>scalecube-services</artifactId>
19+
<version>${project.version}</version>
20+
</dependency>
21+
<!-- Other -->
22+
<dependency>
23+
<groupId>io.scalecube</groupId>
24+
<artifactId>config-vault</artifactId>
25+
</dependency>
26+
<dependency>
27+
<groupId>org.yaml</groupId>
28+
<artifactId>snakeyaml</artifactId>
29+
</dependency>
30+
</dependencies>
31+
32+
</project>

services-security/pom.xml renamed to services-security-parent/services-security/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<parent>
88
<groupId>io.scalecube</groupId>
9-
<artifactId>scalecube-services-parent</artifactId>
9+
<artifactId>scalecube-services-security-parent</artifactId>
1010
<version>2.10.13-SNAPSHOT</version>
1111
</parent>
1212

@@ -18,6 +18,7 @@
1818
<artifactId>scalecube-services</artifactId>
1919
<version>${project.version}</version>
2020
</dependency>
21+
<!-- Other -->
2122
<dependency>
2223
<groupId>io.scalecube</groupId>
2324
<artifactId>scalecube-security-tokens</artifactId>

services-security/src/main/java/io/scalecube/services/security/Credentials.java renamed to services-security-parent/services-security/src/main/java/io/scalecube/services/security/Credentials.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515

1616
public class Credentials {
1717

18+
private Credentials() {
19+
// Do not instantiate
20+
}
21+
1822
/**
1923
* Encodes the given credentials to the given stream.
2024
*
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package io.scalecube.services.security;
2+
3+
import io.scalecube.security.tokens.jwt.KeyNotFoundException;
4+
import java.time.Duration;
5+
import reactor.util.retry.Retry;
6+
import reactor.util.retry.RetryBackoffSpec;
7+
import reactor.util.retry.RetrySpec;
8+
9+
public class RetryStrategies {
10+
11+
private static final int MAX_ATTEMPTS = 20;
12+
private static final Duration MIN_BACKOFF = Duration.ofMillis(200);
13+
private static final Duration MAX_BACKOFF = Duration.ofSeconds(3);
14+
15+
private RetryStrategies() {
16+
// Do not instantiate
17+
}
18+
19+
/**
20+
* Returns zero-retries strategy.
21+
*
22+
* @return {@link Retry} instance
23+
*/
24+
public static Retry noRetriesRetryStrategy() {
25+
return Retry.max(0);
26+
}
27+
28+
/**
29+
* Returns retry-strategy which reacts on {@link KeyNotFoundException}.
30+
*
31+
* @return {@link RetryBackoffSpec} instance
32+
*/
33+
public static RetryBackoffSpec keyNotFoundRetryStrategy() {
34+
return RetrySpec.backoff(MAX_ATTEMPTS, MIN_BACKOFF)
35+
.maxBackoff(MAX_BACKOFF)
36+
.filter(ex -> ex instanceof KeyNotFoundException);
37+
}
38+
39+
/**
40+
* Returns retry-strategy which reacts on {@link KeyNotFoundException}.
41+
*
42+
* @param maxAttempts maxAttempts
43+
* @param minBackoff minBackoff
44+
* @param maxBackoff maxBackoff
45+
* @return {@link RetryBackoffSpec} instance
46+
*/
47+
public static RetryBackoffSpec keyNotFoundRetryStrategy(
48+
int maxAttempts, Duration minBackoff, Duration maxBackoff) {
49+
return RetrySpec.backoff(maxAttempts, minBackoff)
50+
.maxBackoff(maxBackoff)
51+
.filter(ex -> ex instanceof KeyNotFoundException);
52+
}
53+
}

services-security/src/main/java/io/scalecube/services/security/ServiceTokenAuthenticator.java renamed to services-security-parent/services-security/src/main/java/io/scalecube/services/security/ServiceTokenAuthenticator.java

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,38 @@ public final class ServiceTokenAuthenticator implements Authenticator<ServiceCla
2222

2323
private static final Logger LOGGER = LoggerFactory.getLogger(ServiceTokenAuthenticator.class);
2424

25-
private final JwtTokenResolver tokenResolver;
26-
private final Retry retryStrategy;
25+
private JwtTokenResolver tokenResolver;
26+
private Retry retryStrategy = RetryStrategies.noRetriesRetryStrategy();
2727

28-
public ServiceTokenAuthenticator(JwtTokenResolver tokenResolver) {
29-
this(tokenResolver, Retry.max(0));
28+
public ServiceTokenAuthenticator() {}
29+
30+
private ServiceTokenAuthenticator(ServiceTokenAuthenticator other) {
31+
this.tokenResolver = other.tokenResolver;
32+
this.retryStrategy = other.retryStrategy;
33+
}
34+
35+
/**
36+
* Setter for tokenResolver.
37+
*
38+
* @param tokenResolver tokenResolver
39+
* @return new instance with applied setting
40+
*/
41+
public ServiceTokenAuthenticator tokenResolver(JwtTokenResolver tokenResolver) {
42+
final ServiceTokenAuthenticator c = copy();
43+
c.tokenResolver = tokenResolver;
44+
return c;
3045
}
3146

32-
public ServiceTokenAuthenticator(JwtTokenResolver tokenResolver, Retry retryStrategy) {
33-
this.tokenResolver = tokenResolver;
34-
this.retryStrategy = retryStrategy;
47+
/**
48+
* Setter for retryStrategy.
49+
*
50+
* @param retryStrategy retryStrategy
51+
* @return new instance with applied setting
52+
*/
53+
public ServiceTokenAuthenticator retryStrategy(Retry retryStrategy) {
54+
final ServiceTokenAuthenticator c = copy();
55+
c.retryStrategy = retryStrategy;
56+
return c;
3557
}
3658

3759
@Override
@@ -61,4 +83,8 @@ private static ServiceClaims toServiceClaims(Map<String, Object> authData) {
6183
}
6284
return new ServiceClaims(permissionsClaim);
6385
}
86+
87+
private ServiceTokenAuthenticator copy() {
88+
return new ServiceTokenAuthenticator(this);
89+
}
6490
}

0 commit comments

Comments
 (0)