Skip to content

Commit f1d8147

Browse files
authored
PI-554 generify claim constraint function, register did as option (#21)
* generify claim constraint function, register did as option * add print when claim is not found
1 parent eff0035 commit f1d8147

File tree

3 files changed

+40
-60
lines changed

3 files changed

+40
-60
lines changed

policy-extension/src/main/java/org/eclipse/edc/extension/possiblepolicy/ConnectorIdConstraintFunction.java policy-extension/src/main/java/org/eclipse/edc/extension/possiblepolicy/ClientClaimConstraintFunction.java

+21-16
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,26 @@
33
import org.eclipse.edc.policy.engine.spi.AtomicConstraintFunction;
44
import org.eclipse.edc.policy.engine.spi.PolicyContext;
55
import org.eclipse.edc.policy.model.Operator;
6-
import org.eclipse.edc.policy.model.Permission;
76
import org.eclipse.edc.policy.model.Rule;
87
import org.eclipse.edc.spi.agent.ParticipantAgent;
98
import org.eclipse.edc.spi.monitor.Monitor;
109

1110
import java.util.Arrays;
12-
import java.util.Collection;
1311
import java.util.Map;
1412
import java.util.Objects;
1513

1614
import static java.lang.String.format;
1715

18-
public class ConnectorIdConstraintFunction<R extends Rule> implements AtomicConstraintFunction<R> {
16+
public class ClientClaimConstraintFunction<R extends Rule> implements AtomicConstraintFunction<R> {
1917

2018
private final Monitor monitor;
19+
private final String clientClaimName;
20+
private final boolean verbose;
2121

22-
public ConnectorIdConstraintFunction(Monitor monitor) {
22+
public ClientClaimConstraintFunction(Monitor monitor, String clientClaimName, boolean verbose) {
2323
this.monitor = monitor;
24+
this.clientClaimName = clientClaimName;
25+
this.verbose = verbose;
2426
}
2527

2628
@Override
@@ -36,27 +38,30 @@ public boolean evaluate(Operator operator, Object rightValue, R rule, PolicyCont
3638
return false;
3739
}
3840

39-
for (Map.Entry<String, Object> e : contextData.getClaims().entrySet()) {
40-
monitor.info(format("Found claim %s : %s", e.getKey(), e.getValue()));
41-
}
41+
if (verbose) {
42+
for (Map.Entry<String, Object> e : contextData.getClaims().entrySet()) {
43+
monitor.info(format("Found claim %s : %s", e.getKey(), e.getValue()));
44+
}
4245

43-
for (Map.Entry<String, String> e : contextData.getAttributes().entrySet()) {
44-
monitor.info(format("Found attribute %s : %s", e.getKey(), e.getValue()));
46+
for (Map.Entry<String, String> e : contextData.getAttributes().entrySet()) {
47+
monitor.info(format("Found attribute %s : %s", e.getKey(), e.getValue()));
48+
}
4549
}
4650

47-
String clientIdClaim = (String) contextData.getClaims().get("client_id");
51+
String clientClaim = (String) contextData.getClaims().get(clientClaimName);
4852

49-
if (clientIdClaim == null) {
53+
if (clientClaim == null) {
54+
monitor.info(format("Required claim %s not found.", clientClaimName));
5055
return false;
5156
}
5257

53-
monitor.info(format("Evaluating constraint: connectorId %s %s %s", clientIdClaim, operator, rightValue));
58+
monitor.info(format("Evaluating constraint: %s %s %s %s", clientClaimName, clientClaim, operator, rightValue));
5459

5560
return switch (operator) {
56-
case EQ -> Objects.equals(clientIdClaim, rightValue);
57-
case NEQ -> !Objects.equals(clientIdClaim, rightValue);
58-
case IN, IS_ANY_OF -> Arrays.asList(((String) rightValue).split(",")).contains(clientIdClaim);
59-
case IS_NONE_OF -> !Arrays.asList(((String) rightValue).split(",")).contains(clientIdClaim);
61+
case EQ -> Objects.equals(clientClaim, rightValue);
62+
case NEQ -> !Objects.equals(clientClaim, rightValue);
63+
case IN, IS_ANY_OF -> Arrays.asList(((String) rightValue).split(",")).contains(clientClaim);
64+
case IS_NONE_OF -> !Arrays.asList(((String) rightValue).split(",")).contains(clientClaim);
6065
default -> false;
6166
};
6267
}

policy-extension/src/main/java/org/eclipse/edc/extension/possiblepolicy/LocationConstraintFunction.java

-37
This file was deleted.

policy-extension/src/main/java/org/eclipse/edc/extension/possiblepolicy/PossiblePolicyExtension.java

+19-7
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,21 @@
2424
import org.eclipse.edc.spi.system.ServiceExtension;
2525
import org.eclipse.edc.spi.system.ServiceExtensionContext;
2626

27+
import java.util.Map;
28+
2729
import static org.eclipse.edc.policy.engine.spi.PolicyEngine.ALL_SCOPES;
2830

29-
@Extension(value = PossiblePolicyExtension.NAME)
31+
@Extension(value = PossiblePolicyExtension.EXTENSION_NAME)
3032
public class PossiblePolicyExtension implements ServiceExtension {
3133

32-
public static final String NAME = "POSSIBLE-POLICY-EXTENSION";
34+
public static final String EXTENSION_NAME = "POSSIBLE-POLICY-EXTENSION";
35+
36+
private static final boolean VERBOSE = true;
3337

34-
private static final String CONNECTORID_CONSTRAINT_KEY = "connectorId";
38+
private static final Map<String, String> CONSTRAINT_KEY_MAP = Map.of(
39+
"connectorId", "client_id",
40+
"did", "did"
41+
);
3542

3643
@Inject
3744
private RuleBindingRegistry ruleBindingRegistry;
@@ -40,16 +47,21 @@ public class PossiblePolicyExtension implements ServiceExtension {
4047

4148
@Override
4249
public String name() {
43-
return "Sample policy functions";
50+
return EXTENSION_NAME;
4451
}
4552

4653
@Override
4754
public void initialize(ServiceExtensionContext context) {
4855
var monitor = context.getMonitor();
4956

5057
ruleBindingRegistry.bind("use", ALL_SCOPES);
51-
ruleBindingRegistry.bind(CONNECTORID_CONSTRAINT_KEY, ALL_SCOPES);
52-
policyEngine.registerFunction(ALL_SCOPES, Permission.class, CONNECTORID_CONSTRAINT_KEY, new ConnectorIdConstraintFunction<>(monitor));
53-
policyEngine.registerFunction(ALL_SCOPES, Prohibition.class, CONNECTORID_CONSTRAINT_KEY, new ConnectorIdConstraintFunction<>(monitor));
58+
59+
for (Map.Entry<String, String> entry : CONSTRAINT_KEY_MAP.entrySet()) {
60+
ruleBindingRegistry.bind(entry.getKey(), ALL_SCOPES);
61+
policyEngine.registerFunction(ALL_SCOPES, Permission.class, entry.getKey(),
62+
new ClientClaimConstraintFunction<>(monitor, entry.getValue(), VERBOSE));
63+
policyEngine.registerFunction(ALL_SCOPES, Prohibition.class, entry.getKey(),
64+
new ClientClaimConstraintFunction<>(monitor, entry.getValue(), VERBOSE));
65+
}
5466
}
5567
}

0 commit comments

Comments
 (0)