From 9686e92810780e2131932729db6cfda7b776e9c1 Mon Sep 17 00:00:00 2001 From: Olivier Lamothe Date: Wed, 30 Jun 2021 12:21:04 -0400 Subject: [PATCH 1/2] WIP --- .../AnySecurityIdentityBuilder.java | 27 +++++++++++++++++++ .../coveo/pushapiclient/DocumentBuilder.java | 8 +++--- .../GroupSecurityIdentityBuilder.java | 21 +++++++++++++++ .../coveo/pushapiclient/SecurityIdentity.java | 14 +++++++--- .../SecurityIdentityBuilder.java | 6 +++++ .../UserSecurityIdentityBuilder.java | 21 +++++++++++++++ .../VirtualGroupSecurityIdentityBuilder.java | 22 +++++++++++++++ 7 files changed, 111 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/coveo/pushapiclient/AnySecurityIdentityBuilder.java create mode 100644 src/main/java/com/coveo/pushapiclient/GroupSecurityIdentityBuilder.java create mode 100644 src/main/java/com/coveo/pushapiclient/SecurityIdentityBuilder.java create mode 100644 src/main/java/com/coveo/pushapiclient/UserSecurityIdentityBuilder.java create mode 100644 src/main/java/com/coveo/pushapiclient/VirtualGroupSecurityIdentityBuilder.java diff --git a/src/main/java/com/coveo/pushapiclient/AnySecurityIdentityBuilder.java b/src/main/java/com/coveo/pushapiclient/AnySecurityIdentityBuilder.java new file mode 100644 index 00000000..b6ee814f --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/AnySecurityIdentityBuilder.java @@ -0,0 +1,27 @@ +package com.coveo.pushapiclient; + +import java.util.Arrays; + +public class AnySecurityIdentityBuilder implements SecurityIdentityBuilder { + private final String[] identities; + private final SecurityIdentityType securityIdentityType; + private final String securityProvider; + + public AnySecurityIdentityBuilder(String identity, SecurityIdentityType securityIdentityType, String securityProvider) { + this.identities = new String[]{identity}; + this.securityIdentityType = securityIdentityType; + this.securityProvider = securityProvider; + } + + public AnySecurityIdentityBuilder(String[] identities, SecurityIdentityType securityIdentityType, String securityProvider) { + this.identities = identities; + this.securityIdentityType = securityIdentityType; + this.securityProvider = securityProvider; + } + + public SecurityIdentity[] build() { + return Arrays.stream(this.identities) + .map(identity -> new SecurityIdentity(identity, this.securityIdentityType, this.securityProvider)) + .toArray(SecurityIdentity[]::new); + } +} diff --git a/src/main/java/com/coveo/pushapiclient/DocumentBuilder.java b/src/main/java/com/coveo/pushapiclient/DocumentBuilder.java index 80a83399..e9735d5f 100644 --- a/src/main/java/com/coveo/pushapiclient/DocumentBuilder.java +++ b/src/main/java/com/coveo/pushapiclient/DocumentBuilder.java @@ -118,13 +118,13 @@ public DocumentBuilder withMetadata(Map metadata) { return this; } - public DocumentBuilder withAllowedPermissions() { - // TODO + public DocumentBuilder withAllowedPermissions(SecurityIdentityBuilder allowedPermissions) { + this.document.permissions.allowedPermissions = allowedPermissions.build(); return this; } - public DocumentBuilder withDeniedPermissions() { - // TODO + public DocumentBuilder withDeniedPermissions(SecurityIdentityBuilder deniedPermissions) { + this.document.permissions.deniedPermissions = deniedPermissions.build(); return this; } diff --git a/src/main/java/com/coveo/pushapiclient/GroupSecurityIdentityBuilder.java b/src/main/java/com/coveo/pushapiclient/GroupSecurityIdentityBuilder.java new file mode 100644 index 00000000..a7b06615 --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/GroupSecurityIdentityBuilder.java @@ -0,0 +1,21 @@ +package com.coveo.pushapiclient; + +public class GroupSecurityIdentityBuilder implements SecurityIdentityBuilder { + private final String[] identities; + private final String securityProvider; + + public GroupSecurityIdentityBuilder(String identity, String securityProvider) { + this.identities = new String[]{identity}; + this.securityProvider = securityProvider; + + } + + public GroupSecurityIdentityBuilder(String[] identities, String securityProvider) { + this.identities = identities; + this.securityProvider = securityProvider; + } + + public SecurityIdentity[] build() { + return new AnySecurityIdentityBuilder(this.identities, SecurityIdentityType.GROUP, this.securityProvider).build(); + } +} diff --git a/src/main/java/com/coveo/pushapiclient/SecurityIdentity.java b/src/main/java/com/coveo/pushapiclient/SecurityIdentity.java index d5b40c36..998cd4e3 100644 --- a/src/main/java/com/coveo/pushapiclient/SecurityIdentity.java +++ b/src/main/java/com/coveo/pushapiclient/SecurityIdentity.java @@ -3,10 +3,10 @@ public class SecurityIdentity { /** * The name of the security identity. - * + *

* Examples: - * - `asmith@example.com` - * - `SampleTeam2` + * - `asmith@example.com` + * - `SampleTeam2` */ public String identity; /** @@ -20,8 +20,14 @@ public class SecurityIdentity { public SecurityIdentityType identityType; /** * The security identity provider through which the security identity is updated. - * + *

* Defaults to the first security identity provider associated with the target Push source. */ public String securityProvider; + + public SecurityIdentity(String identity, SecurityIdentityType securityIdentityType, String securityProvider) { + this.identity = identity; + this.identityType = securityIdentityType; + this.securityProvider = securityProvider; + } } \ No newline at end of file diff --git a/src/main/java/com/coveo/pushapiclient/SecurityIdentityBuilder.java b/src/main/java/com/coveo/pushapiclient/SecurityIdentityBuilder.java new file mode 100644 index 00000000..d32d8662 --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/SecurityIdentityBuilder.java @@ -0,0 +1,6 @@ +package com.coveo.pushapiclient; + +public interface SecurityIdentityBuilder { + SecurityIdentity[] build(); +} + diff --git a/src/main/java/com/coveo/pushapiclient/UserSecurityIdentityBuilder.java b/src/main/java/com/coveo/pushapiclient/UserSecurityIdentityBuilder.java new file mode 100644 index 00000000..d5fb74c9 --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/UserSecurityIdentityBuilder.java @@ -0,0 +1,21 @@ +package com.coveo.pushapiclient; + +public class UserSecurityIdentityBuilder implements SecurityIdentityBuilder { + private final String[] identities; + private final String securityProvider; + + public UserSecurityIdentityBuilder(String identity, String securityProvider) { + this.identities = new String[]{identity}; + this.securityProvider = securityProvider; + + } + + public UserSecurityIdentityBuilder(String[] identities, String securityProvider) { + this.identities = identities; + this.securityProvider = securityProvider; + } + + public SecurityIdentity[] build() { + return new AnySecurityIdentityBuilder(this.identities, SecurityIdentityType.USER, this.securityProvider).build(); + } +} diff --git a/src/main/java/com/coveo/pushapiclient/VirtualGroupSecurityIdentityBuilder.java b/src/main/java/com/coveo/pushapiclient/VirtualGroupSecurityIdentityBuilder.java new file mode 100644 index 00000000..cfd1176a --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/VirtualGroupSecurityIdentityBuilder.java @@ -0,0 +1,22 @@ +package com.coveo.pushapiclient; + +public class VirtualGroupSecurityIdentityBuilder implements SecurityIdentityBuilder { + private final String[] identities; + private final String securityProvider; + + public VirtualGroupSecurityIdentityBuilder(String identity, String securityProvider) { + this.identities = new String[]{identity}; + this.securityProvider = securityProvider; + + } + + public VirtualGroupSecurityIdentityBuilder(String[] identities, String securityProvider) { + this.identities = identities; + this.securityProvider = securityProvider; + } + + public SecurityIdentity[] build() { + return new AnySecurityIdentityBuilder(this.identities, SecurityIdentityType.VIRTUAL_GROUP, this.securityProvider).build(); + } +} + From 6083755850ef36f2892ba40255a7b780aa7bf4f5 Mon Sep 17 00:00:00 2001 From: Olivier Lamothe Date: Wed, 30 Jun 2021 12:37:58 -0400 Subject: [PATCH 2/2] feat: add security identity suport on document push --- .../com/coveo/pushapiclient/DocumentBuilder.java | 9 +++++++-- .../UserSecurityIdentityBuilder.java | 11 +++++++++++ .../com/coveo/testlocally/TestingLocally.java | 16 ++++++++++++---- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/coveo/pushapiclient/DocumentBuilder.java b/src/main/java/com/coveo/pushapiclient/DocumentBuilder.java index 796c79d8..c19d19ba 100644 --- a/src/main/java/com/coveo/pushapiclient/DocumentBuilder.java +++ b/src/main/java/com/coveo/pushapiclient/DocumentBuilder.java @@ -123,12 +123,17 @@ public DocumentBuilder withMetadata(Map metadata) { } public DocumentBuilder withAllowedPermissions(SecurityIdentityBuilder allowedPermissions) { - this.document.permissions.allowedPermissions = allowedPermissions.build(); + this.document.permissions[0].allowedPermissions = allowedPermissions.build(); return this; } public DocumentBuilder withDeniedPermissions(SecurityIdentityBuilder deniedPermissions) { - this.document.permissions.deniedPermissions = deniedPermissions.build(); + this.document.permissions[0].deniedPermissions = deniedPermissions.build(); + return this; + } + + public DocumentBuilder withAllowAnonymousUsers(Boolean allowAnonymous) { + this.document.permissions[0].allowAnonymous = allowAnonymous; return this; } diff --git a/src/main/java/com/coveo/pushapiclient/UserSecurityIdentityBuilder.java b/src/main/java/com/coveo/pushapiclient/UserSecurityIdentityBuilder.java index d5fb74c9..02480ff2 100644 --- a/src/main/java/com/coveo/pushapiclient/UserSecurityIdentityBuilder.java +++ b/src/main/java/com/coveo/pushapiclient/UserSecurityIdentityBuilder.java @@ -10,11 +10,22 @@ public UserSecurityIdentityBuilder(String identity, String securityProvider) { } + public UserSecurityIdentityBuilder(String identity) { + this.identities = new String[]{identity}; + this.securityProvider = "Email Security Provider"; + + } + public UserSecurityIdentityBuilder(String[] identities, String securityProvider) { this.identities = identities; this.securityProvider = securityProvider; } + public UserSecurityIdentityBuilder(String[] identities) { + this.identities = identities; + this.securityProvider = "Email Security Provider"; + } + public SecurityIdentity[] build() { return new AnySecurityIdentityBuilder(this.identities, SecurityIdentityType.USER, this.securityProvider).build(); } diff --git a/src/main/java/com/coveo/testlocally/TestingLocally.java b/src/main/java/com/coveo/testlocally/TestingLocally.java index 650f0582..ed803811 100644 --- a/src/main/java/com/coveo/testlocally/TestingLocally.java +++ b/src/main/java/com/coveo/testlocally/TestingLocally.java @@ -27,14 +27,22 @@ public static void main(String[] args) { } public static void testPushDocument(String sourceId, Source source) { - DocumentBuilder doc = new DocumentBuilder("https://perdu.com", "the title").withData("this is searchable").withDate(new Date()); - System.out.println(doc.marshal()); + DocumentBuilder simpleDoc = new DocumentBuilder("https://perdu.com", "the title").withData("this is searchable").withDate(new Date()); + DocumentBuilder docWithSecurity = new DocumentBuilder("https://perdu.com/2", "the title 2") + .withData("this is searchable also") + .withAllowAnonymousUsers(false) + .withAllowedPermissions(new UserSecurityIdentityBuilder("olamothe@coveo.com")) + .withDeniedPermissions(new UserSecurityIdentityBuilder(new String[]{"lbompart@coveo.com", "ylakhdar@coveo.com"})); + + System.out.println(simpleDoc.marshal()); + System.out.println(docWithSecurity.marshal()); + try { - source.addOrUpdateDocument(sourceId, doc); + source.addOrUpdateDocument(sourceId, simpleDoc); + source.addOrUpdateDocument(sourceId, docWithSecurity); } catch (IOException | InterruptedException e) { System.out.println(e); } - } public static void testManageIdentities(Source source) {