From 7fc7de565ad0a09882123316133d46d3fbe5db9a Mon Sep 17 00:00:00 2001 From: John Gasper Date: Thu, 1 Feb 2018 15:51:50 -0800 Subject: [PATCH] Converted to subject.properties; adding bootstrap to add banderson as Grouper admin --- base/Dockerfile | 5 + base/container_files/conf/sources.xml | 295 ------------------- base/container_files/conf/subject.properties | 75 +++++ base/container_files/seed-data/bootstrap.gsh | 3 + 4 files changed, 83 insertions(+), 295 deletions(-) delete mode 100644 base/container_files/conf/sources.xml create mode 100644 base/container_files/conf/subject.properties create mode 100644 base/container_files/seed-data/bootstrap.gsh diff --git a/base/Dockerfile b/base/Dockerfile index afd0ce0..16a4f39 100644 --- a/base/Dockerfile +++ b/base/Dockerfile @@ -45,6 +45,11 @@ RUN cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG \ COPY container_files/conf/* /opt/grouper/grouper.apiBinary/conf/ +RUN rm /opt/grouper/grouper.apiBinary/conf/sources.xml \ + /opt/grouper/grouper.ui/WEB-INF/classes/sources.xml \ + /opt/grouper/grouper.ws/WEB-INF/classes/sources.xml \ + /opt/grouper/grouper.scim/WEB-INF/classes/sources.xml + RUN (/usr/sbin/slapd -h "ldap:/// ldaps:/// ldapi:///" -u ldap &) \ && while ! curl -s ldap://localhost:389 > /dev/null; do echo waiting for ldap to start; sleep 1; done; \ (mysqld_safe & ) \ diff --git a/base/container_files/conf/sources.xml b/base/container_files/conf/sources.xml deleted file mode 100644 index d92123e..0000000 --- a/base/container_files/conf/sources.xml +++ /dev/null @@ -1,295 +0,0 @@ - - - - - - - - - - - - - - - g:gsa - Grouper: Group Source Adapter - group - - - subjectVirtualAttribute_0_searchAttribute0 - ${subject.getAttributeValue('name')},${subject.getAttributeValue('displayName')},${subject.getAttributeValue('alternateName')} - - - sortAttribute0 - displayExtension - - - searchAttribute0 - searchAttribute0 - - - - maxPageSize - 100 - - searchAttribute0 - - - - - - grouperEntities - Grouper: Entity Source Adapter - application - - - subjectVirtualAttribute_0_searchAttribute0 - - ${subject.getAttributeValue('name')},${subject.getAttributeValue('displayName')},${subject.getAttributeValue('alternateName')} - - - sortAttribute0 - name - - - searchAttribute0 - searchAttribute0 - - searchAttribute0 - - - - - - ldap - EDU Ldap - person - - INITIAL_CONTEXT_FACTORY - com.sun.jndi.ldap.LdapCtxFactory - - - PROVIDER_URL - ldap://localhost - - - SECURITY_AUTHENTICATION - simple - - - SECURITY_PRINCIPAL - cn=admin,dc=internet2,dc=edu - - - SECURITY_CREDENTIALS - password - - - SubjectID_AttributeType - uid - - - SubjectID_formatToLowerCase - false - - - Name_AttributeType - cn - - - Description_AttributeType - cn - - - /// Scope Values can be: OBJECT_SCOPE, ONELEVEL_SCOPE, SUBTREE_SCOPE - /// For filter use - - - searchSubject - - filter - - (&(uid=%TERM%)(objectclass=person)) - - - - scope - - SUBTREE_SCOPE - - - - base - - ou=people,dc=internet2,dc=edu - - - - - - searchSubjectByIdentifier - - filter - - (&(uid=%TERM%)(objectclass=person)) - - - - scope - - SUBTREE_SCOPE - - - - base - - ou=people,dc=internet2,dc=edu - - - - - - search - - filter - - (&(|(|(uid=%TERM%)(cn=*%TERM%*))(uid=%TERM%*))(objectclass=person)) - - - - scope - - SUBTREE_SCOPE - - - - base - - ou=people,dc=internet2,dc=edu - - - - - subjectVirtualAttribute_0_searchAttribute0 - ${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('uid'), "")},${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('cn'), "")},${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('exampleEduRegId'), "")} - - - sortAttribute0 - cn - - - searchAttribute0 - searchAttribute0 - - - - - - searchAttribute0 - - ///Attributes you would like to display when doing a search - givenName - sn - uid - - - - - - diff --git a/base/container_files/conf/subject.properties b/base/container_files/conf/subject.properties new file mode 100644 index 0000000..ea015c7 --- /dev/null +++ b/base/container_files/conf/subject.properties @@ -0,0 +1,75 @@ +subject.sources.xml.location = + +subjectApi.source.ldap.id = ldap +subjectApi.source.ldap.name = EDU Ldap +subjectApi.source.ldap.types = person +subjectApi.source.ldap.adapterClass = edu.internet2.middleware.grouper.subj.GrouperJndiSourceAdapter +subjectApi.source.ldap.param.INITIAL_CONTEXT_FACTORY.value = com.sun.jndi.ldap.LdapCtxFactory +subjectApi.source.ldap.param.PROVIDER_URL.value = ldap://localhost:389 +subjectApi.source.ldap.param.SECURITY_AUTHENTICATION.value = simple +subjectApi.source.ldap.param.SECURITY_PRINCIPAL.value = cn=admin,dc=internet2,dc=edu +subjectApi.source.ldap.param.SECURITY_CREDENTIALS.value = password +subjectApi.source.ldap.param.SubjectID_AttributeType.value = uid +subjectApi.source.ldap.param.SubjectID_formatToLowerCase.value = false +subjectApi.source.ldap.param.Name_AttributeType.value = cn +subjectApi.source.ldap.param.Description_AttributeType.value = cn +subjectApi.source.ldap.param.VTLDAP_VALIDATOR.value = ConnectLdapValidator +subjectApi.source.ldap.param.subjectVirtualAttribute_0_searchAttribute0.value = ${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('uid'), "")},${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('cn'), "")},${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('exampleEduRegId'), "")} +subjectApi.source.ldap.param.sortAttribute0.value = cn +subjectApi.source.ldap.param.searchAttribute0.value = searchAttribute0 + +# STATUS SECTION for searches to filter out inactives and allow +# the user to filter by status with e.g. status=all +# this is optional, and advanced +# +# field in database or ldap or endpoint that is the status field +#subjectApi.source.example.param.statusDatastoreFieldName.value = status + +# search string from user which represents the status. e.g. status=active +#subjectApi.source.example.param.statusLabel.value = status + +# available statuses from screen (if not specified, any will be allowed). comma separated list. +# Note, this is optional and you probably dont want to configure it, it is mostly necessary +# when you have multiple sources with statuses... if someone types an invalid status +# and you have this configured, it will not filter by it +#subjectApi.source.example.param.statusesFromUser.value = Active, Inactive, Pending, All + +# all label from the user +#subjectApi.source.example.param.statusAllFromUser.value = All + +# if no status is specified, this will be used (e.g. for active only). Note, the value should be of the +# form the user would type in +#subjectApi.source.example.param.statusSearchDefault.value = status=active + +# translate between screen values of status, and the data store value. Increment the 0 to 1, 2, etc for more translations. +# so the user could enter: status=active, and that could translate to status_col=A. The 'user' is what the user types in, +# the 'datastore' is what is in the datastore. The user part is not case-sensitive. Note, this could be a many to one +#subjectApi.source.example.param.statusTranslateUser0.value = active +#subjectApi.source.example.param.statusTranslateDatastore0.value = A + +# subject identifier to store in grouper's member table. this is used to increase speed of loader and perhaps for provisioning +# you can have up to max 1 subject identifier +#subjectApi.source.example.param.subjectIdentifierAttribute0.value = uid + +#searchSubject: find a subject by ID. ID is generally an opaque and permanent identifier, e.g. 12345678. +# Each subject has one and only on ID. Returns one result when searching for one ID. +subjectApi.source.ldap.search.searchSubject.param.filter.value = (&(uid=%TERM%)(objectclass=person)) +subjectApi.source.ldap.search.searchSubject.param.scope.value = SUBTREE_SCOPE +subjectApi.source.ldap.search.searchSubject.param.base.value = ou=people,dc=internet2,dc=edu + +#searchSubjectByIdentifier: find a subject by identifier. Identifier is anything that uniquely +# identifies the user, e.g. jsmith or jsmith@institution.edu. +# Subjects can have multiple identifiers. Note: it is nice to have if identifiers are unique +# even across sources. Returns one result when searching for one identifier. +subjectApi.source.ldap.search.searchSubjectByIdentifier.param.filter.value = (&(uid=%TERM%)(objectclass=person)) +subjectApi.source.ldap.search.searchSubjectByIdentifier.param.scope.value = SUBTREE_SCOPE +subjectApi.source.ldap.search.searchSubjectByIdentifier.param.base.value = ou=people,dc=internet2,dc=edu + +# search: find subjects by free form search. Returns multiple results. + +subjectApi.source.ldap.search.search.param.filter.value = (&(|(|(uid=%TERM%)(cn=*%TERM%*))(uid=%TERM%*))(objectclass=person)) +subjectApi.source.ldap.search.search.param.scope.value = SUBTREE_SCOPE +subjectApi.source.ldap.search.search.param.base.value = ou=people,dc=internet2,dc=edu + +subjectApi.source.ldap.attributes = givenName, sn, uid, mail +subjectApi.source.ldap.internalAttributes = searchAttribute0 diff --git a/base/container_files/seed-data/bootstrap.gsh b/base/container_files/seed-data/bootstrap.gsh new file mode 100644 index 0000000..e2a018a --- /dev/null +++ b/base/container_files/seed-data/bootstrap.gsh @@ -0,0 +1,3 @@ +gs = GrouperSession.startRootSession() + +addMember("etc:sysadmingroup","banderson");