diff --git a/src/main/java/com/coveo/pushapiclient/AliasMapping.java b/src/main/java/com/coveo/pushapiclient/AliasMapping.java new file mode 100644 index 00000000..b2be0f92 --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/AliasMapping.java @@ -0,0 +1,12 @@ +package com.coveo.pushapiclient; + +import java.util.Map; + +public class AliasMapping extends IdentityModel { + public String provider; + + public AliasMapping(String provider, String name, SecurityIdentityType type, Map additionalInfo) { + super(name, type, additionalInfo); + this.provider = provider; + } +} diff --git a/src/main/java/com/coveo/pushapiclient/IdentityModel.java b/src/main/java/com/coveo/pushapiclient/IdentityModel.java new file mode 100644 index 00000000..beb8c8fb --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/IdentityModel.java @@ -0,0 +1,15 @@ +package com.coveo.pushapiclient; + +import java.util.Map; + +public class IdentityModel { + public Map additionalInfo; + public String name; + public SecurityIdentityType type; + + public IdentityModel(String name, SecurityIdentityType type, Map additionalInfo) { + this.name = name; + this.type = type; + this.additionalInfo = additionalInfo; + } +} diff --git a/src/main/java/com/coveo/pushapiclient/PlatformClient.java b/src/main/java/com/coveo/pushapiclient/PlatformClient.java index f0aaee6a..cedf87d6 100644 --- a/src/main/java/com/coveo/pushapiclient/PlatformClient.java +++ b/src/main/java/com/coveo/pushapiclient/PlatformClient.java @@ -42,24 +42,75 @@ public HttpResponse createSource(String name, SourceVisibility sourceVis return this.httpClient.send(request, HttpResponse.BodyHandlers.ofString()); } - public void createOrUpdateSecurityIdentity(String securityProviderId, Object securityIdentityModel) { - // TODO + public HttpResponse createOrUpdateSecurityIdentity(String securityProviderId, SecurityIdentityModel securityIdentityModel) throws IOException, InterruptedException { + String[] headers = this.getHeaders(this.getAuthorizationHeader(), this.getContentTypeApplicationJSONHeader()); + URI uri = URI.create(this.getBaseProviderURL(securityProviderId) + "/permissions"); + + String json = new Gson().toJson(securityIdentityModel); + + HttpRequest request = HttpRequest.newBuilder() + .headers(headers) + .PUT(HttpRequest.BodyPublishers.ofString(json)) + .uri(uri) + .build(); + + return this.httpClient.send(request, HttpResponse.BodyHandlers.ofString()); } - public void createOrUpdateSecurityIdentityAlias(String securityProviderId, Object securityIdentityAlias) { - // TODO + public HttpResponse createOrUpdateSecurityIdentityAlias(String securityProviderId, SecurityIdentityAliasModel securityIdentityAlias) throws IOException, InterruptedException { + String[] headers = this.getHeaders(this.getAuthorizationHeader(), this.getContentTypeApplicationJSONHeader()); + URI uri = URI.create(this.getBaseProviderURL(securityProviderId) + "/mappings"); + + String json = new Gson().toJson(securityIdentityAlias); + + HttpRequest request = HttpRequest.newBuilder() + .headers(headers) + .PUT(HttpRequest.BodyPublishers.ofString(json)) + .uri(uri) + .build(); + + return this.httpClient.send(request, HttpResponse.BodyHandlers.ofString()); } - public void deleteSecurityIdentity(String securityProviderId, Object securityIdentityToDelete) { - // TODO + public HttpResponse deleteSecurityIdentity(String securityProviderId, SecurityIdentityDelete securityIdentityToDelete) throws IOException, InterruptedException { + String[] headers = this.getHeaders(this.getAuthorizationHeader(), this.getContentTypeApplicationJSONHeader()); + URI uri = URI.create(this.getBaseProviderURL(securityProviderId) + "/permissions"); + + String json = new Gson().toJson(securityIdentityToDelete); + + HttpRequest request = HttpRequest.newBuilder() + .headers(headers) + .method("DELETE", HttpRequest.BodyPublishers.ofString(json)) + .uri(uri) + .build(); + + return this.httpClient.send(request, HttpResponse.BodyHandlers.ofString()); } - public void deleteOldSecurityIdentities(String securityProviderId, Object batchDelete) { - // TODO + public HttpResponse deleteOldSecurityIdentities(String securityProviderId, SecurityIdentityDeleteOptions batchDelete) throws IOException, InterruptedException { + String[] headers = this.getHeaders(this.getAuthorizationHeader(), this.getContentTypeApplicationJSONHeader()); + URI uri = URI.create(this.getBaseProviderURL(securityProviderId) + String.format("/permissions/olderthan?orderingId=%s&queueDelay=%s", batchDelete.orderingId, batchDelete.queueDelay)); + + HttpRequest request = HttpRequest.newBuilder() + .headers(headers) + .DELETE() + .uri(uri) + .build(); + + return this.httpClient.send(request, HttpResponse.BodyHandlers.ofString()); } - public void manageSecurityIdentities(String securityProviderId, Object batchConfig) { - // TODO + public HttpResponse manageSecurityIdentities(String securityProviderId, SecurityIdentityBatchConfig batchConfig) throws IOException, InterruptedException { + String[] headers = this.getHeaders(this.getAuthorizationHeader(), this.getContentTypeApplicationJSONHeader()); + URI uri = URI.create(this.getBaseProviderURL(securityProviderId) + String.format("/permissions/batch?fileId=%s&orderingId=%s", batchConfig.fileId, batchConfig.orderingId)); + + HttpRequest request = HttpRequest.newBuilder() + .headers(headers) + .PUT(HttpRequest.BodyPublishers.ofString("")) + .uri(uri) + .build(); + + return this.httpClient.send(request, HttpResponse.BodyHandlers.ofString()); } public void pushDocument(String sourceId, Document doc) { @@ -90,6 +141,14 @@ private String getBasePlatformURL() { return String.format("https://platform.cloud.coveo.com/rest/organizations/%s", this.organizationId); } + private String getBasePushURL() { + return String.format("https://api.cloud.coveo.com/push/v1/organizations/%s", this.organizationId); + } + + private String getBaseProviderURL(String providerId) { + return String.format("%s/providers/%s", this.getBasePushURL(), providerId); + } + private String[] getHeaders(String[]... headers) { String[] out = new String[]{}; for (String[] header : headers) { diff --git a/src/main/java/com/coveo/pushapiclient/SecurityIdentityAliasModel.java b/src/main/java/com/coveo/pushapiclient/SecurityIdentityAliasModel.java new file mode 100644 index 00000000..39d7dbcf --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/SecurityIdentityAliasModel.java @@ -0,0 +1,10 @@ +package com.coveo.pushapiclient; + +public class SecurityIdentityAliasModel extends SecurityIdentityModelBase { + public AliasMapping[] mappings; + + public SecurityIdentityAliasModel(AliasMapping[] mappings, IdentityModel identity, IdentityModel[] wellKnowns) { + super(identity, wellKnowns); + this.mappings = mappings; + } +} diff --git a/src/main/java/com/coveo/pushapiclient/SecurityIdentityBatchConfig.java b/src/main/java/com/coveo/pushapiclient/SecurityIdentityBatchConfig.java new file mode 100644 index 00000000..8c445ac5 --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/SecurityIdentityBatchConfig.java @@ -0,0 +1,11 @@ +package com.coveo.pushapiclient; + +public class SecurityIdentityBatchConfig { + public String fileId; + public Long orderingId; + + public SecurityIdentityBatchConfig(String fileId, Long orderingId) { + this.fileId = fileId; + this.orderingId = orderingId; + } +} diff --git a/src/main/java/com/coveo/pushapiclient/SecurityIdentityDelete.java b/src/main/java/com/coveo/pushapiclient/SecurityIdentityDelete.java new file mode 100644 index 00000000..3de358c6 --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/SecurityIdentityDelete.java @@ -0,0 +1,9 @@ +package com.coveo.pushapiclient; + +public class SecurityIdentityDelete { + public IdentityModel identity; + + public SecurityIdentityDelete(IdentityModel identity) { + this.identity = identity; + } +} diff --git a/src/main/java/com/coveo/pushapiclient/SecurityIdentityDeleteOptions.java b/src/main/java/com/coveo/pushapiclient/SecurityIdentityDeleteOptions.java new file mode 100644 index 00000000..a46e8aab --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/SecurityIdentityDeleteOptions.java @@ -0,0 +1,11 @@ +package com.coveo.pushapiclient; + +public class SecurityIdentityDeleteOptions { + public Integer queueDelay; + public Long orderingId; + + public SecurityIdentityDeleteOptions(Integer queueDelay, Long orderingId) { + this.queueDelay = queueDelay; + this.orderingId = orderingId; + } +} diff --git a/src/main/java/com/coveo/pushapiclient/SecurityIdentityModel.java b/src/main/java/com/coveo/pushapiclient/SecurityIdentityModel.java new file mode 100644 index 00000000..14d2d817 --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/SecurityIdentityModel.java @@ -0,0 +1,10 @@ +package com.coveo.pushapiclient; + +public class SecurityIdentityModel extends SecurityIdentityModelBase { + public IdentityModel[] members; + + public SecurityIdentityModel(IdentityModel[] members, IdentityModel identity, IdentityModel[] wellKnowns) { + super(identity, wellKnowns); + this.members = members; + } +} diff --git a/src/main/java/com/coveo/pushapiclient/SecurityIdentityModelBase.java b/src/main/java/com/coveo/pushapiclient/SecurityIdentityModelBase.java new file mode 100644 index 00000000..aa55c961 --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/SecurityIdentityModelBase.java @@ -0,0 +1,11 @@ +package com.coveo.pushapiclient; + +public class SecurityIdentityModelBase { + public IdentityModel identity; + public IdentityModel[] wellKnowns; + + public SecurityIdentityModelBase(IdentityModel identity, IdentityModel[] wellKnowns) { + this.identity = identity; + this.wellKnowns = wellKnowns; + } +} diff --git a/src/main/java/com/coveo/pushapiclient/Source.java b/src/main/java/com/coveo/pushapiclient/Source.java index 656c9472..ffc4a3c0 100644 --- a/src/main/java/com/coveo/pushapiclient/Source.java +++ b/src/main/java/com/coveo/pushapiclient/Source.java @@ -13,4 +13,24 @@ public Source(String apiKey, String organizationId) { public HttpResponse create(String name, SourceVisibility sourceVisibility) throws IOException, InterruptedException { return this.platformClient.createSource(name, sourceVisibility); } + + public HttpResponse createOrUpdateSecurityIdentity(String securityProviderId, SecurityIdentityModel securityIdentityModel) throws IOException, InterruptedException { + return this.platformClient.createOrUpdateSecurityIdentity(securityProviderId, securityIdentityModel); + } + + public HttpResponse createOrUpdateSecurityIdentityAlias(String securityProviderId, SecurityIdentityAliasModel securityIdentityAliasModel) throws IOException, InterruptedException { + return this.platformClient.createOrUpdateSecurityIdentityAlias(securityProviderId, securityIdentityAliasModel); + } + + public HttpResponse deleteSecurityIdentity(String securityProviderId, SecurityIdentityDelete securityIdentityDelete) throws IOException, InterruptedException { + return this.platformClient.deleteSecurityIdentity(securityProviderId, securityIdentityDelete); + } + + public HttpResponse deleteOldSecurityIdentities(String securityProviderId, SecurityIdentityDeleteOptions batchDelete) throws IOException, InterruptedException { + return this.platformClient.deleteOldSecurityIdentities(securityProviderId, batchDelete); + } + + public HttpResponse manageSecurityIdentities(String securityProviderId, SecurityIdentityBatchConfig batchConfig) throws IOException, InterruptedException { + return this.platformClient.manageSecurityIdentities(securityProviderId, batchConfig); + } } diff --git a/src/main/java/com/coveo/testlocally/TestingLocally.java b/src/main/java/com/coveo/testlocally/TestingLocally.java index f72a694a..cdf33fba 100644 --- a/src/main/java/com/coveo/testlocally/TestingLocally.java +++ b/src/main/java/com/coveo/testlocally/TestingLocally.java @@ -1,13 +1,13 @@ package com.coveo.testlocally; -import com.coveo.pushapiclient.DocumentBuilder; -import com.coveo.pushapiclient.Source; -import com.coveo.pushapiclient.SourceVisibility; +import com.coveo.pushapiclient.*; +import com.google.gson.Gson; import io.github.cdimascio.dotenv.Dotenv; import java.io.IOException; import java.net.http.HttpResponse; import java.util.Date; +import java.util.HashMap; public class TestingLocally { public static void main(String[] args) { @@ -18,12 +18,51 @@ public static void main(String[] args) { try { HttpResponse res = source.create("testlocaljava", SourceVisibility.SECURED); System.out.println(String.format("Status: %s %s", res.statusCode(), res.body().toString())); - } catch (IOException e) { - e.printStackTrace(); - } catch (InterruptedException e) { + } catch (IOException | InterruptedException e) { e.printStackTrace(); } + IdentityModel identityModel = new IdentityModel("the_name", SecurityIdentityType.USER, new HashMap() { + }); + + IdentityModel[] identityModels = { + identityModel, + }; + + AliasMapping[] aliasMapping = {new AliasMapping("the_provider_name", "the_name", SecurityIdentityType.USER, new HashMap<>())}; + + try { + SecurityIdentityModel securityIdentityModel = new SecurityIdentityModel(identityModels, identityModel, identityModels); + String jsonSecurityIdentityModel = new Gson().toJson(securityIdentityModel); + System.out.println(jsonSecurityIdentityModel); + HttpResponse resCreateOrUpdateSecurityIdentity = source.createOrUpdateSecurityIdentity("the_provider_id", securityIdentityModel); + System.out.println(resCreateOrUpdateSecurityIdentity.body()); + + + SecurityIdentityAliasModel securityIdentityAliasModel = new SecurityIdentityAliasModel(aliasMapping, identityModel, identityModels); + String jsonSecurityIdentityAliasModel = new Gson().toJson(securityIdentityAliasModel); + System.out.println(jsonSecurityIdentityAliasModel); + HttpResponse resCreateOrUpdateSecurityIdentityAlias = source.createOrUpdateSecurityIdentityAlias("the_provider_id_mappings", securityIdentityAliasModel); + System.out.println(resCreateOrUpdateSecurityIdentityAlias.body()); + + + SecurityIdentityDelete securityIdentityDelete = new SecurityIdentityDelete(identityModel); + String jsonSecurityIdentityDelete = new Gson().toJson(securityIdentityDelete); + System.out.println(jsonSecurityIdentityDelete); + HttpResponse resDeleteSecurityIdentity = source.deleteSecurityIdentity("the_provider_id_delete", securityIdentityDelete); + System.out.println(resDeleteSecurityIdentity.body()); + + SecurityIdentityDeleteOptions batchDelete = new SecurityIdentityDeleteOptions(123, 987l); + HttpResponse resDeleteOlderThan = source.deleteOldSecurityIdentities("the_provider_id_delete_older_than", batchDelete); + System.out.println(resDeleteOlderThan.body()); + + SecurityIdentityBatchConfig batchConfig = new SecurityIdentityBatchConfig("the_file_id", 123l); + HttpResponse resBatchConfig = source.manageSecurityIdentities("the_provider_id_batch_config", batchConfig); + System.out.println(resBatchConfig.body()); + + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } } }