Skip to content

Commit 3a81004

Browse files
committed
[Fix #1064] Adding Digest authentication
Signed-off-by: fjtirado <[email protected]>
1 parent 3323167 commit 3a81004

File tree

19 files changed

+533
-155
lines changed

19 files changed

+533
-155
lines changed

impl/core/src/main/java/io/serverlessworkflow/impl/auth/AuthProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
import io.serverlessworkflow.impl.TaskContext;
1919
import io.serverlessworkflow.impl.WorkflowContext;
2020
import io.serverlessworkflow.impl.WorkflowModel;
21+
import java.net.URI;
2122

2223
public interface AuthProvider {
2324

24-
String authScheme();
25+
String scheme();
2526

26-
String authParameter(WorkflowContext workflow, TaskContext task, WorkflowModel model);
27+
String content(WorkflowContext workflow, TaskContext task, WorkflowModel model, URI uri);
2728
}

impl/core/src/main/java/io/serverlessworkflow/impl/auth/AuthProviderFactory.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,36 +31,40 @@ public static Optional<AuthProvider> getAuth(
3131
WorkflowDefinition definition, EndpointConfiguration configuration) {
3232
return configuration == null
3333
? Optional.empty()
34-
: getAuth(definition, configuration.getAuthentication());
34+
: getAuth(definition, configuration.getAuthentication(), "GET");
3535
}
3636

3737
public static Optional<AuthProvider> getAuth(
38-
WorkflowDefinition definition, ReferenceableAuthenticationPolicy auth) {
38+
WorkflowDefinition definition, ReferenceableAuthenticationPolicy auth, String method) {
3939
if (auth == null) {
4040
return Optional.empty();
4141
}
4242
if (auth.getAuthenticationPolicyReference() != null) {
4343
return buildFromReference(
4444
definition.application(),
4545
definition.workflow(),
46-
auth.getAuthenticationPolicyReference().getUse());
46+
auth.getAuthenticationPolicyReference().getUse(),
47+
method);
4748
} else if (auth.getAuthenticationPolicy() != null) {
4849
return buildFromPolicy(
49-
definition.application(), definition.workflow(), auth.getAuthenticationPolicy());
50+
definition.application(), definition.workflow(), auth.getAuthenticationPolicy(), method);
5051
}
5152
return Optional.empty();
5253
}
5354

5455
private static Optional<AuthProvider> buildFromReference(
55-
WorkflowApplication app, Workflow workflow, String use) {
56+
WorkflowApplication app, Workflow workflow, String use, String method) {
5657
return workflow.getUse().getAuthentications().getAdditionalProperties().entrySet().stream()
5758
.filter(s -> s.getKey().equals(use))
5859
.findAny()
59-
.flatMap(e -> buildFromPolicy(app, workflow, e.getValue()));
60+
.flatMap(e -> buildFromPolicy(app, workflow, e.getValue(), method));
6061
}
6162

6263
private static Optional<AuthProvider> buildFromPolicy(
63-
WorkflowApplication app, Workflow workflow, AuthenticationPolicyUnion authenticationPolicy) {
64+
WorkflowApplication app,
65+
Workflow workflow,
66+
AuthenticationPolicyUnion authenticationPolicy,
67+
String method) {
6468
if (authenticationPolicy.getBasicAuthenticationPolicy() != null) {
6569
return Optional.of(
6670
new BasicAuthProvider(
@@ -70,8 +74,9 @@ private static Optional<AuthProvider> buildFromPolicy(
7074
new BearerAuthProvider(
7175
app, workflow, authenticationPolicy.getBearerAuthenticationPolicy()));
7276
} else if (authenticationPolicy.getDigestAuthenticationPolicy() != null) {
73-
// TODO implement digest authentication
74-
return Optional.empty();
77+
return Optional.of(
78+
new DigestAuthProvider(
79+
app, workflow, authenticationPolicy.getDigestAuthenticationPolicy(), method));
7580
} else if (authenticationPolicy.getOAuth2AuthenticationPolicy() != null) {
7681
return Optional.of(
7782
new OAuth2AuthProvider(

impl/core/src/main/java/io/serverlessworkflow/impl/auth/AuthUtils.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package io.serverlessworkflow.impl.auth;
1717

18+
import java.util.Random;
19+
1820
public class AuthUtils {
1921

2022
private AuthUtils() {}
@@ -38,7 +40,15 @@ private AuthUtils() {}
3840

3941
private static final String AUTH_HEADER_FORMAT = "%s %s";
4042

43+
private static class RandomHolder {
44+
private static final Random random = new Random();
45+
}
46+
4147
public static String authHeaderValue(String scheme, String parameter) {
4248
return String.format(AUTH_HEADER_FORMAT, scheme, parameter);
4349
}
50+
51+
public static String getRandomHexString() {
52+
return String.format("%08x", RandomHolder.random.nextInt());
53+
}
4454
}

impl/core/src/main/java/io/serverlessworkflow/impl/auth/BasicAuthProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.serverlessworkflow.impl.WorkflowModel;
2929
import io.serverlessworkflow.impl.WorkflowUtils;
3030
import io.serverlessworkflow.impl.WorkflowValueResolver;
31+
import java.net.URI;
3132
import java.util.Base64;
3233

3334
class BasicAuthProvider implements AuthProvider {
@@ -57,7 +58,7 @@ public BasicAuthProvider(
5758
}
5859

5960
@Override
60-
public String authParameter(WorkflowContext workflow, TaskContext task, WorkflowModel model) {
61+
public String content(WorkflowContext workflow, TaskContext task, WorkflowModel model, URI uri) {
6162
return new String(
6263
Base64.getEncoder()
6364
.encode(
@@ -69,7 +70,7 @@ public String authParameter(WorkflowContext workflow, TaskContext task, Workflow
6970
}
7071

7172
@Override
72-
public String authScheme() {
73+
public String scheme() {
7374
return "Basic";
7475
}
7576
}

impl/core/src/main/java/io/serverlessworkflow/impl/auth/BearerAuthProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.serverlessworkflow.impl.WorkflowModel;
2929
import io.serverlessworkflow.impl.WorkflowUtils;
3030
import io.serverlessworkflow.impl.WorkflowValueResolver;
31+
import java.net.URI;
3132

3233
class BearerAuthProvider implements AuthProvider {
3334

@@ -48,12 +49,12 @@ public BearerAuthProvider(
4849
}
4950

5051
@Override
51-
public String authParameter(WorkflowContext workflow, TaskContext task, WorkflowModel model) {
52+
public String content(WorkflowContext workflow, TaskContext task, WorkflowModel model, URI uri) {
5253
return tokenFilter.apply(workflow, task, model);
5354
}
5455

5556
@Override
56-
public String authScheme() {
57+
public String scheme() {
5758
return "Bearer";
5859
}
5960
}

impl/core/src/main/java/io/serverlessworkflow/impl/auth/CommonOAuthProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.serverlessworkflow.impl.WorkflowContext;
2626
import io.serverlessworkflow.impl.WorkflowModel;
2727
import io.serverlessworkflow.impl.WorkflowValueResolver;
28+
import java.net.URI;
2829
import java.util.Arrays;
2930
import java.util.Map;
3031
import java.util.ServiceLoader;
@@ -48,12 +49,12 @@ protected CommonOAuthProvider(WorkflowValueResolver<AccessTokenProvider> tokenPr
4849
}
4950

5051
@Override
51-
public String authParameter(WorkflowContext workflow, TaskContext task, WorkflowModel model) {
52+
public String content(WorkflowContext workflow, TaskContext task, WorkflowModel model, URI uri) {
5253
return tokenProvider.apply(workflow, task, model).validateAndGet(workflow, task, model).token();
5354
}
5455

5556
@Override
56-
public String authScheme() {
57+
public String scheme() {
5758
return "Bearer";
5859
}
5960

0 commit comments

Comments
 (0)