Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix group exclusion support in plain-group case
Plus change version to 0.4.
mederly committed Jul 29, 2019
1 parent 7dc965e commit 6cf1716
Showing 6 changed files with 77 additions and 63 deletions.
2 changes: 1 addition & 1 deletion pom.xml
@@ -27,7 +27,7 @@
</parent>

<artifactId>connector-grouper-rest</artifactId>
<version>0.3</version>
<version>0.4</version>
<packaging>jar</packaging>

<name>Grouper REST Connector</name>
@@ -131,14 +131,18 @@ private boolean handleGroupJsonObject(Object group, ResultsHandler handler) {
if (group instanceof JSONObject) {
JSONObject gObject = (JSONObject) group;
String name = processor.getStringOrNull(gObject, "name");
String extension = processor.getStringOrNull(gObject, "extension");
String uuid = processor.getStringOrNull(gObject, "uuid");
ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
builder.setObjectClass(getObjectClass());
builder.setUid(uuid);
builder.setName(name);
builder.addAttribute(ATTR_EXTENSION, extension);
return handler.handle(builder.build());
if (processor.groupNameMatches(name)) {
String extension = processor.getStringOrNull(gObject, "extension");
String uuid = processor.getStringOrNull(gObject, "uuid");
ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
builder.setObjectClass(getObjectClass());
builder.setUid(uuid);
builder.setName(name);
builder.addAttribute(ATTR_EXTENSION, extension);
return handler.handle(builder.build());
} else {
return true;
}
} else {
throw new IllegalStateException("Expected group as JSONObject, got " + group);
}
@@ -153,12 +157,16 @@ private boolean handleGroupAsMemberJsonObject(Object group, ResultsHandler handl
return true;
}
String name = processor.getStringOrNull(gObject, "name");
String id = processor.getStringOrNull(gObject, "id");
ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
builder.setObjectClass(getObjectClass());
builder.setUid(id);
builder.setName(name);
return handler.handle(builder.build());
if (processor.groupNameMatches(name)) {
String id = processor.getStringOrNull(gObject, "id");
ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
builder.setObjectClass(getObjectClass());
builder.setUid(id);
builder.setName(name);
return handler.handle(builder.build());
} else {
return true;
}
} else {
throw new IllegalStateException("Expected group as JSONObject, got " + group);
}
@@ -157,7 +157,7 @@ private List<String> selectGroupNames(JSONArray groups) {
if (group instanceof JSONObject) {
JSONObject gObject = (JSONObject) group;
String name = processor.getStringOrNull(gObject, "name");
if (groupNameMatches(name)) {
if (processor.groupNameMatches(name)) {
rv.add(name);
}
} else {
@@ -167,27 +167,6 @@ private List<String> selectGroupNames(JSONArray groups) {
return rv;
}

private boolean groupNameMatches(String name) {
if (name == null) {
return false;
}
return groupNameMatches(name, getConfiguration().getGroupIncludePattern()) &&
!groupNameMatches(name, getConfiguration().getGroupExcludePattern());
}

private boolean groupNameMatches(String name, String[] patterns) {
if (patterns == null) {
return false;
}
for (String pattern : patterns) {
Pattern compiled = Pattern.compile(pattern);
if (compiled.matcher(name).matches()) {
return true;
}
}
return false;
}

private GrouperConfiguration getConfiguration() {
return processor.configuration;
}
@@ -138,34 +138,38 @@ private boolean executeGetGroupWithMembersResponse(HttpPost request, JSONObject

JSONObject gObject = (JSONObject) processor.get(response, WS_GET_MEMBERS_RESULTS, RESULTS, WS_GROUP);
String name = processor.getStringOrNull(gObject, "name");
String extension = processor.getStringOrNull(gObject, "extension");
String uuid = processor.getStringOrNull(gObject, "uuid");
ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
builder.setObjectClass(getObjectClass());
builder.setUid(uuid);
builder.setName(name);
builder.addAttribute(ATTR_EXTENSION, extension);

List<String> subjects = new ArrayList<>();
JSONArray members = processor.getArray(response, false, WS_GET_MEMBERS_RESULTS, RESULTS, WS_SUBJECTS);
if (members != null) {
for (Object memberObject : members) {
JSONObject member = (JSONObject) memberObject;
String sourceId = processor.getStringOrNull(member, "sourceId");
if (sourceId == null || !sourceId.equals(getConfiguration().getSubjectSource())) {
LOG.info("Skipping non-person member (source={0})", sourceId);
continue;
}
String subjectId = processor.getStringOrNull(member, "id");
if (subjectId != null) {
subjects.add(subjectId);
} else {
LOG.info("Skipping unnamed member (source={0})", member);
if (processor.groupNameMatches(name)) {
String extension = processor.getStringOrNull(gObject, "extension");
String uuid = processor.getStringOrNull(gObject, "uuid");
ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
builder.setObjectClass(getObjectClass());
builder.setUid(uuid);
builder.setName(name);
builder.addAttribute(ATTR_EXTENSION, extension);

List<String> subjects = new ArrayList<>();
JSONArray members = processor.getArray(response, false, WS_GET_MEMBERS_RESULTS, RESULTS, WS_SUBJECTS);
if (members != null) {
for (Object memberObject : members) {
JSONObject member = (JSONObject) memberObject;
String sourceId = processor.getStringOrNull(member, "sourceId");
if (sourceId == null || !sourceId.equals(getConfiguration().getSubjectSource())) {
LOG.info("Skipping non-person member (source={0})", sourceId);
continue;
}
String subjectId = processor.getStringOrNull(member, "id");
if (subjectId != null) {
subjects.add(subjectId);
} else {
LOG.info("Skipping unnamed member (source={0})", member);
}
}
builder.addAttribute(ATTR_MEMBER, subjects);
}
builder.addAttribute(ATTR_MEMBER, subjects);
return handler.handle(builder.build());
} else {
return true;
}
return handler.handle(builder.build());
}

@Override
@@ -42,6 +42,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;

/**
* @author surmanek
@@ -506,4 +507,25 @@ public String getStringOrNull(JSONObject object, String item) {
public String getString(JSONObject object, String item) {
return (String) get(object, item); // todo error handling
}

boolean groupNameMatches(String name) {
if (name == null) {
return false;
}
return groupNameMatches(name, configuration.getGroupIncludePattern()) &&
!groupNameMatches(name, configuration.getGroupExcludePattern());
}

private boolean groupNameMatches(String name, String[] patterns) {
if (patterns == null) {
return false;
}
for (String pattern : patterns) {
Pattern compiled = Pattern.compile(pattern);
if (compiled.matcher(name).matches()) {
return true;
}
}
return false;
}
}
@@ -92,7 +92,8 @@ protected GrouperConfiguration getConfiguration() {
config.setUsername(ADMIN_USERNAME);
config.setPassword(new GuardedString(ADMIN_PASSWORD.toCharArray()));
config.setSuperGroup(SUPER_GROUP);
config.setGroupIncludePattern(new String[] { SUPER_GROUP });
config.setGroupIncludePattern(new String[] { ".*" });
config.setGroupExcludePattern(new String[] { ".*_(includes|excludes|systemOfRecord|systemOfRecordAndIncludes)" });
config.setIgnoreSslValidation(true);
config.setSubjectSource(SUBJECT_SOURCE);
config.setExportStem("ref");

0 comments on commit 6cf1716

Please sign in to comment.