diff --git a/src/main/java/jp/openstandia/connector/github/GitHubEMUGroupHandler.java b/src/main/java/jp/openstandia/connector/github/GitHubEMUGroupHandler.java index 208a065..35f6584 100644 --- a/src/main/java/jp/openstandia/connector/github/GitHubEMUGroupHandler.java +++ b/src/main/java/jp/openstandia/connector/github/GitHubEMUGroupHandler.java @@ -25,6 +25,7 @@ import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; import static jp.openstandia.connector.util.Utils.toZoneDateTimeForISO8601OffsetDateTime; import static org.identityconnectors.framework.common.objects.AttributeInfo.Flags.*; @@ -96,7 +97,7 @@ public static SchemaDefinition.Builder createSchema(AbstractGitHubConfiguration }, (add, dest) -> dest.addMembers(add), (remove, dest) -> dest.removeMembers(remove), - (source) -> source.members.stream().filter(x -> x.ref.contains("/Users/")).map(x -> x.value), + (source) -> source.members != null ? source.members.stream().filter(x -> x.ref.contains("/Users/")).map(x -> x.value) : Stream.empty(), null ); @@ -104,14 +105,14 @@ public static SchemaDefinition.Builder createSchema(AbstractGitHubConfiguration sb.add("meta.created", SchemaDefinition.Types.DATETIME, null, - (source) -> toZoneDateTimeForISO8601OffsetDateTime(source.meta.created), + (source) -> source.meta != null ? toZoneDateTimeForISO8601OffsetDateTime(source.meta.created) : null, null, NOT_CREATABLE, NOT_UPDATEABLE ); sb.add("meta.lastModified", SchemaDefinition.Types.DATETIME, null, - (source) -> toZoneDateTimeForISO8601OffsetDateTime(source.meta.lastModified), + (source) -> source.meta != null ? toZoneDateTimeForISO8601OffsetDateTime(source.meta.lastModified) : null, null, NOT_CREATABLE, NOT_UPDATEABLE ); @@ -166,10 +167,10 @@ public int getByUid(Uid uid, ResultsHandler resultsHandler, OperationOptions opt public int getByName(Name name, ResultsHandler resultsHandler, OperationOptions options, Set returnAttributesSet, Set fetchFieldsSet, boolean allowPartialAttributeValues, int pageSize, int pageOffset) { - SCIMEMUGroup user = client.getEMUGroup(name, options, fetchFieldsSet); + SCIMEMUGroup group = client.getEMUGroup(name, options, fetchFieldsSet); - if (user != null) { - resultsHandler.handle(toConnectorObject(schemaDefinition, user, returnAttributesSet, allowPartialAttributeValues)); + if (group != null) { + resultsHandler.handle(toConnectorObject(schemaDefinition, group, returnAttributesSet, allowPartialAttributeValues)); return 1; } return 0; diff --git a/src/main/java/jp/openstandia/connector/github/GitHubEMUUserHandler.java b/src/main/java/jp/openstandia/connector/github/GitHubEMUUserHandler.java index b737a77..2258eba 100644 --- a/src/main/java/jp/openstandia/connector/github/GitHubEMUUserHandler.java +++ b/src/main/java/jp/openstandia/connector/github/GitHubEMUUserHandler.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.Set; +import java.util.stream.Stream; import static jp.openstandia.connector.util.Utils.toZoneDateTimeForISO8601OffsetDateTime; import static org.identityconnectors.framework.common.objects.AttributeInfo.Flags.*; @@ -200,7 +201,7 @@ public static SchemaDefinition.Builder createSchema(AbstractGitHubConfiguration null, null, null, - (source) -> source.groups.stream().filter(x -> x.ref.contains("/Groups/")).map(x -> x.value), + (source) -> source.groups != null ? source.groups.stream().filter(x -> x.ref.contains("/Groups/")).map(x -> x.value) : Stream.empty(), null, NOT_CREATABLE, NOT_UPDATEABLE, NOT_RETURNED_BY_DEFAULT ); @@ -209,14 +210,14 @@ public static SchemaDefinition.Builder createSchema(AbstractGitHubConfiguration sb.add("meta.created", SchemaDefinition.Types.DATETIME, null, - (source) -> toZoneDateTimeForISO8601OffsetDateTime(source.meta.created), + (source) -> source.meta != null ? toZoneDateTimeForISO8601OffsetDateTime(source.meta.created) : null, null, NOT_CREATABLE, NOT_UPDATEABLE ); sb.add("meta.lastModified", SchemaDefinition.Types.DATETIME, null, - (source) -> toZoneDateTimeForISO8601OffsetDateTime(source.meta.lastModified), + (source) -> source.meta != null ? toZoneDateTimeForISO8601OffsetDateTime(source.meta.lastModified) : null, null, NOT_CREATABLE, NOT_UPDATEABLE ); diff --git a/src/main/java/org/kohsuke/github/GHEnterpriseExt.java b/src/main/java/org/kohsuke/github/GHEnterpriseExt.java index ef5a355..95c0a9a 100644 --- a/src/main/java/org/kohsuke/github/GHEnterpriseExt.java +++ b/src/main/java/org/kohsuke/github/GHEnterpriseExt.java @@ -5,6 +5,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.util.List; /** * GHEnterprise class. @@ -65,12 +66,14 @@ public SCIMEMUUser getSCIMEMUUser(String scimUserId) throws IOException { } public SCIMEMUUser getSCIMEMUUserByUserName(String scimUserName) throws IOException { - SCIMEMUUser u = root.createRequest() - .withHeader(SCIMConstants.HEADER_ACCEPT, SCIMConstants.SCIM_ACCEPT) - .withHeader(SCIMConstants.HEADER_API_VERSION, SCIMConstants.GITHUB_API_VERSION) - .withUrlPath(String.format("/scim/v2/enterprises/%s/Users?filter=userName eq \"%s\"", login, scimUserName)) - .fetch(SCIMEMUUser.class); - return u; + List list = searchSCIMUsers() + .eq("userName", scimUserName) + .list() + .toList(); + if (list.size() != 1) { + return null; + } + return list.get(0); } /** @@ -142,12 +145,14 @@ public SCIMEMUGroup getSCIMEMUGroup(String scimGroupId) throws IOException { } public SCIMEMUGroup getSCIMEMUGroupByDisplayName(String scimGroupDisplayName) throws IOException { - SCIMEMUGroup g = root.createRequest() - .withHeader(SCIMConstants.HEADER_ACCEPT, SCIMConstants.SCIM_ACCEPT) - .withHeader(SCIMConstants.HEADER_API_VERSION, SCIMConstants.GITHUB_API_VERSION) - .withUrlPath(String.format("/scim/v2/enterprises/%s/Groups?filter=displayName eq \"%s\"", login, scimGroupDisplayName)) - .fetch(SCIMEMUGroup.class); - return g; + List list = searchSCIMGroups() + .eq("displayName", scimGroupDisplayName) + .list() + .toList(); + if (list.size() != 1) { + return null; + } + return list.get(0); } /**