Skip to content

Commit 2b2fb52

Browse files
committed
Move to eu.contentcloud package namespace
1 parent eca05c6 commit 2b2fb52

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+963
-518
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
group=eu.xenit.contentcloud.abac
1+
group=eu.contentcloud.opa
22

33
lombokVersion=1.18.16
44
slf4jVersion =1.7.30

opa-async-java-client/src/main/java/eu/xenit/contentcloud/abac/opa/client/OpaClient.java renamed to opa-async-java-client/src/main/java/eu/contentcloud/opa/client/OpaClient.java

Lines changed: 41 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,36 @@
1-
package eu.xenit.contentcloud.abac.opa.client;
1+
package eu.contentcloud.opa.client;
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
4-
import eu.xenit.contentcloud.abac.opa.client.api.DataApi;
5-
import eu.xenit.contentcloud.abac.opa.client.impl.PolicyComponent;
6-
import eu.xenit.contentcloud.abac.opa.client.api.CompileApi;
7-
import eu.xenit.contentcloud.abac.opa.client.api.PolicyApi;
8-
import eu.xenit.contentcloud.abac.opa.client.impl.DataComponent;
9-
import eu.xenit.contentcloud.abac.opa.client.impl.CompileComponent;
10-
import eu.xenit.contentcloud.abac.opa.client.rest.OpaHttpClient;
11-
import eu.xenit.contentcloud.abac.opa.client.rest.RestClientConfiguration.LogSpecification;
12-
import eu.xenit.contentcloud.abac.opa.client.rest.client.jdk.DefaultOpaHttpClient;
4+
import eu.contentcloud.opa.client.api.CompileApi;
5+
import eu.contentcloud.opa.client.api.DataApi;
6+
import eu.contentcloud.opa.client.api.PolicyApi;
7+
import eu.contentcloud.opa.client.api.QueryApi;
8+
import eu.contentcloud.opa.client.impl.CompileComponent;
9+
import eu.contentcloud.opa.client.impl.DataComponent;
10+
import eu.contentcloud.opa.client.impl.PolicyComponent;
11+
import eu.contentcloud.opa.client.impl.QueryComponent;
12+
import eu.contentcloud.opa.client.rest.OpaHttpClient;
13+
import eu.contentcloud.opa.client.rest.RestClientConfiguration.LogSpecification;
14+
import eu.contentcloud.opa.client.rest.client.jdk.DefaultOpaHttpClient;
1315
import java.net.http.HttpClient;
1416
import java.net.http.HttpClient.Redirect;
1517
import java.time.Duration;
1618
import java.util.Objects;
1719
import java.util.concurrent.CompletableFuture;
1820
import lombok.extern.slf4j.Slf4j;
1921

20-
public class OpaClient implements PolicyApi, DataApi, CompileApi {
22+
public class OpaClient implements PolicyApi, QueryApi, DataApi, CompileApi {
2123

22-
private final CompileApi compileApi;
23-
private final DataApi dataApi;
24-
private final PolicyApi policyApi;
24+
private final CompileApi compileComponent;
25+
private final QueryApi queryComponent;
26+
private final DataApi dataComponent;
27+
private final PolicyApi policyComponent;
2528

26-
OpaClient(PolicyApi policyApi, DataApi dataApi, CompileApi compileApi) {
27-
this.policyApi = policyApi;
28-
this.dataApi = dataApi;
29-
this.compileApi = compileApi;
29+
OpaClient(PolicyApi policyComponent, QueryApi queryComponent, DataApi dataComponent, CompileApi compileComponent) {
30+
this.policyComponent = policyComponent;
31+
this.queryComponent = queryComponent;
32+
this.dataComponent = dataComponent;
33+
this.compileComponent = compileComponent;
3034
}
3135

3236
/**
@@ -38,37 +42,42 @@ public static Builder builder() {
3842

3943
@Override
4044
public CompletableFuture<PartialEvalResponse> compile(PartialEvaluationRequest request) {
41-
return this.compileApi.compile(request);
45+
return this.compileComponent.compile(request);
4246
}
4347

4448
@Override
4549
public CompletableFuture<ListPoliciesResponse> listPolicies() {
46-
return this.policyApi.listPolicies();
50+
return this.policyComponent.listPolicies();
4751
}
4852

4953
@Override
5054
public CompletableFuture<UpsertPolicyResponse> upsertPolicy(String id, String policy) {
51-
return this.policyApi.upsertPolicy(id, policy);
55+
return this.policyComponent.upsertPolicy(id, policy);
5256
}
5357

5458
@Override
5559
public CompletableFuture<GetPolicyResponse> getPolicy(String id) {
56-
return this.policyApi.getPolicy(id);
60+
return this.policyComponent.getPolicy(id);
5761
}
5862

5963
@Override
6064
public CompletableFuture<DeletePolicyResponse> deletePolicy(String id) {
61-
return this.policyApi.deletePolicy(id);
65+
return this.policyComponent.deletePolicy(id);
6266
}
6367

6468
@Override
65-
public <TData> CompletableFuture<Void> upsertData(String path, TData data) {
66-
return this.dataApi.upsertData(path, data);
69+
public <TData> CompletableFuture<UpsertDataResult> upsertData(String path, TData data) {
70+
return this.dataComponent.upsertData(path, data);
6771
}
6872

6973
@Override
7074
public <TData> CompletableFuture<TData> getData(String path, Class<TData> responseType) {
71-
return this.dataApi.getData(path, responseType);
75+
return this.dataComponent.getData(path, responseType);
76+
}
77+
78+
@Override
79+
public CompletableFuture<QueryResponse> query(String query) {
80+
return this.queryComponent.query(query);
7281
}
7382

7483

@@ -107,16 +116,17 @@ public Builder restClient(OpaHttpClient restClient) {
107116

108117
public OpaClient build() {
109118

110-
var opaRestClient = this.getOrCreateDefaultRestClient();
119+
var opaHttpClient = this.getOrCreateDefaultHttpClient();
111120

112121
return new OpaClient(
113-
new PolicyComponent(opaRestClient),
114-
new DataComponent(opaRestClient),
115-
new CompileComponent(opaRestClient));
122+
new PolicyComponent(opaHttpClient),
123+
new QueryComponent(opaHttpClient),
124+
new DataComponent(opaHttpClient),
125+
new CompileComponent(opaHttpClient));
116126

117127
}
118128

119-
private OpaHttpClient getOrCreateDefaultRestClient() {
129+
private OpaHttpClient getOrCreateDefaultHttpClient() {
120130
var client = this.restClient;
121131

122132
// configure the provided client

opa-async-java-client/src/main/java/eu/xenit/contentcloud/abac/opa/client/OpaConfiguration.java renamed to opa-async-java-client/src/main/java/eu/contentcloud/opa/client/OpaConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package eu.xenit.contentcloud.abac.opa.client;
1+
package eu.contentcloud.opa.client;
22

33
import lombok.Getter;
44
import lombok.RequiredArgsConstructor;
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package eu.contentcloud.opa.client.api;
2+
3+
import com.fasterxml.jackson.annotation.JsonAnySetter;
4+
import eu.contentcloud.abac.opa.rego.ast.QuerySet;
5+
import java.util.List;
6+
import java.util.Map;
7+
import java.util.concurrent.CompletableFuture;
8+
import lombok.Data;
9+
import lombok.Getter;
10+
import lombok.RequiredArgsConstructor;
11+
12+
public interface CompileApi {
13+
14+
CompletableFuture<PartialEvalResponse> compile(PartialEvaluationRequest request);
15+
16+
default CompletableFuture<PartialEvalResponse> compile(String query, Object input, List<String> unknowns) {
17+
return this.compile(new PartialEvaluationRequest(query, input, unknowns));
18+
}
19+
20+
default CompletableFuture<PartialEvalResponse> compile(String query, Object input) {
21+
return this.compile(new PartialEvaluationRequest(query, input, null));
22+
}
23+
24+
@Getter
25+
@RequiredArgsConstructor
26+
class PartialEvaluationRequest {
27+
28+
final String query;
29+
final Object input;
30+
final List<String> unknowns;
31+
32+
}
33+
34+
@Data
35+
class PartialEvalResponse {
36+
PartialEvalResult result;
37+
}
38+
39+
@Data
40+
class PartialEvalResult {
41+
42+
/**
43+
* When partially evaluate a query with the Compile API, OPA returns a new set of queries/conditions.
44+
*
45+
* If ONE of those conditions can be satisfied, the query is true.
46+
* If a query is always true, this QuerySet will contain an empty array.
47+
* If this field is null, that indicates there are NO conditions that could make the query true.
48+
*/
49+
QuerySet queries;
50+
51+
@JsonAnySetter
52+
Map<String, Object> unknown;
53+
}
54+
55+
56+
57+
58+
59+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package eu.contentcloud.opa.client.api;
2+
3+
import java.util.concurrent.CompletableFuture;
4+
import lombok.Data;
5+
6+
public interface DataApi {
7+
8+
<TData> CompletableFuture<UpsertDataResult> upsertData(String path, TData data);
9+
10+
<TData> CompletableFuture<TData> getData(String path, Class<TData> responseType);
11+
12+
@Data
13+
class GetDataResponse<TData> {
14+
TData result;
15+
}
16+
17+
@Data
18+
class UpsertDataResult {
19+
// HTTP 304 - not modified
20+
// HTTP 204 - no content
21+
}
22+
23+
}

opa-async-java-client/src/main/java/eu/xenit/contentcloud/abac/opa/client/api/PolicyApi.java renamed to opa-async-java-client/src/main/java/eu/contentcloud/opa/client/api/PolicyApi.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package eu.xenit.contentcloud.abac.opa.client.api;
1+
package eu.contentcloud.opa.client.api;
22

3-
import eu.xenit.contentcloud.abac.opa.rego.ast.AbstractSyntaxTree;
3+
import eu.contentcloud.abac.opa.rego.ast.AbstractSyntaxTree;
44
import java.util.List;
55
import java.util.concurrent.CompletableFuture;
66
import lombok.Data;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package eu.contentcloud.opa.client.api;
2+
3+
import java.util.HashMap;
4+
import java.util.List;
5+
import java.util.concurrent.CompletableFuture;
6+
import lombok.Data;
7+
8+
public interface QueryApi {
9+
10+
<T> CompletableFuture<QueryResponse> query(String query);
11+
12+
@Data
13+
class QueryResponse {
14+
private List<QueryResultEntry> result;
15+
}
16+
17+
@Data
18+
class QueryResultEntry extends HashMap<String, Object> {
19+
20+
}
21+
}

opa-async-java-client/src/main/java/eu/xenit/contentcloud/abac/opa/client/impl/CompileComponent.java renamed to opa-async-java-client/src/main/java/eu/contentcloud/opa/client/impl/CompileComponent.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package eu.xenit.contentcloud.abac.opa.client.impl;
1+
package eu.contentcloud.opa.client.impl;
22

3-
import eu.xenit.contentcloud.abac.opa.client.api.CompileApi;
4-
import eu.xenit.contentcloud.abac.opa.client.rest.OpaHttpClient;
3+
import eu.contentcloud.opa.client.api.CompileApi;
4+
import eu.contentcloud.opa.client.rest.OpaHttpClient;
55
import java.util.concurrent.CompletableFuture;
66
import lombok.RequiredArgsConstructor;
77

opa-async-java-client/src/main/java/eu/xenit/contentcloud/abac/opa/client/impl/DataComponent.java renamed to opa-async-java-client/src/main/java/eu/contentcloud/opa/client/impl/DataComponent.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
package eu.xenit.contentcloud.abac.opa.client.impl;
1+
package eu.contentcloud.opa.client.impl;
22

3-
import eu.xenit.contentcloud.abac.opa.client.api.DataApi;
4-
import eu.xenit.contentcloud.abac.opa.client.rest.OpaHttpClient;
3+
import eu.contentcloud.opa.client.api.DataApi;
4+
import eu.contentcloud.opa.client.rest.OpaHttpClient;
55
import java.util.concurrent.CompletableFuture;
6+
import lombok.Data;
67
import lombok.RequiredArgsConstructor;
78

89
@RequiredArgsConstructor
@@ -13,8 +14,8 @@ public class DataComponent implements DataApi {
1314
private final OpaHttpClient opaHttpClient;
1415

1516
@Override
16-
public <TData> CompletableFuture<Void> upsertData(String path, TData data) {
17-
return opaHttpClient.put(DATA_ENDPOINT + path, data);
17+
public <TData> CompletableFuture<UpsertDataResult> upsertData(String path, TData data) {
18+
return opaHttpClient.put(DATA_ENDPOINT + path, data).thenApply(nothing -> new UpsertDataResult());
1819
}
1920

2021
@Override
@@ -23,4 +24,5 @@ public <TData> CompletableFuture<TData> getData(String path, Class<TData> respon
2324
}
2425

2526

27+
2628
}

opa-async-java-client/src/main/java/eu/xenit/contentcloud/abac/opa/client/impl/PolicyComponent.java renamed to opa-async-java-client/src/main/java/eu/contentcloud/opa/client/impl/PolicyComponent.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
package eu.xenit.contentcloud.abac.opa.client.impl;
1+
package eu.contentcloud.opa.client.impl;
22

3-
import eu.xenit.contentcloud.abac.opa.client.api.PolicyApi;
4-
import eu.xenit.contentcloud.abac.opa.client.rest.OpaHttpClient;
5-
import eu.xenit.contentcloud.abac.opa.client.rest.http.MediaType;
3+
import eu.contentcloud.opa.client.api.PolicyApi;
4+
import eu.contentcloud.opa.client.rest.OpaHttpClient;
5+
import eu.contentcloud.opa.client.rest.http.MediaType;
66
import java.util.concurrent.CompletableFuture;
77
import lombok.RequiredArgsConstructor;
88

99
@RequiredArgsConstructor
1010
public class PolicyComponent implements PolicyApi {
1111

12-
private static final String POLICY_ENDPOINT = "/v1/policies";
12+
private static final String POLICY_ENDPOINT = "/v1/policies/";
1313

1414
private final OpaHttpClient restClient;
1515

@@ -20,19 +20,19 @@ public CompletableFuture<ListPoliciesResponse> listPolicies() {
2020

2121
@Override
2222
public CompletableFuture<UpsertPolicyResponse> upsertPolicy(String id, String policy) {
23-
return this.restClient.put(POLICY_ENDPOINT + "/" + id,
23+
return this.restClient.put(POLICY_ENDPOINT + id,
2424
headers -> headers.contentType(MediaType.TEXT_PLAIN),
2525
policy, UpsertPolicyResponse.class);
2626

2727
}
2828

2929
@Override
3030
public CompletableFuture<GetPolicyResponse> getPolicy(String id) {
31-
return this.restClient.get(POLICY_ENDPOINT + "/" + id, GetPolicyResponse.class);
31+
return this.restClient.get(POLICY_ENDPOINT + id, GetPolicyResponse.class);
3232
}
3333

3434
@Override
3535
public CompletableFuture<DeletePolicyResponse> deletePolicy(String id) {
36-
return this.restClient.delete(POLICY_ENDPOINT + "/" + id, DeletePolicyResponse.class);
36+
return this.restClient.delete(POLICY_ENDPOINT + id, DeletePolicyResponse.class);
3737
}
3838
}

0 commit comments

Comments
 (0)