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 9e1f902d..4d95aeab 100644 --- a/src/main/java/com/coveo/pushapiclient/DocumentBuilder.java +++ b/src/main/java/com/coveo/pushapiclient/DocumentBuilder.java @@ -136,13 +136,18 @@ public DocumentBuilder withMetadata(Map metadata) { return this; } - public DocumentBuilder withAllowedPermissions() { - // TODO + public DocumentBuilder withAllowedPermissions(SecurityIdentityBuilder allowedPermissions) { + this.document.permissions[0].allowedPermissions = allowedPermissions.build(); return this; } - public DocumentBuilder withDeniedPermissions() { - // TODO + public DocumentBuilder withDeniedPermissions(SecurityIdentityBuilder deniedPermissions) { + 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/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..02480ff2 --- /dev/null +++ b/src/main/java/com/coveo/pushapiclient/UserSecurityIdentityBuilder.java @@ -0,0 +1,32 @@ +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 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/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(); + } +} + diff --git a/src/main/java/com/coveo/testlocally/TestingLocally.java b/src/main/java/com/coveo/testlocally/TestingLocally.java index afdb857d..d21b5d25 100644 --- a/src/main/java/com/coveo/testlocally/TestingLocally.java +++ b/src/main/java/com/coveo/testlocally/TestingLocally.java @@ -27,7 +27,7 @@ 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()); + DocumentBuilder simpleDoc = new DocumentBuilder("https://perdu.com", "the title").withData("this is searchable").withDate(new Date()); DocumentBuilder docWithMetadata = new DocumentBuilder("https://perdu.com/3", "the title 3").withMetadata(new HashMap<>() {{ put("foo", "bar"); put("my_field_1", "1"); @@ -35,11 +35,16 @@ public static void testPushDocument(String sourceId, Source source) { put("my_field_3", 1234); put("my_field_4", new String[]{"a", "b", "c"}); }}); - System.out.println(doc.marshal()); - System.out.println(docWithMetadata.marshal()); + 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"})); + try { - source.addOrUpdateDocument(sourceId, doc); + source.addOrUpdateDocument(sourceId, simpleDoc); source.addOrUpdateDocument(sourceId, docWithMetadata); + source.addOrUpdateDocument(sourceId, docWithSecurity); } catch (IOException | InterruptedException e) { System.out.println(e); }