Getting started with hooks
Hooks Introduction
Proof of concept (A veto hook)
Hooks Example - Assign a Unix id to each new group
Instructions to get started with Grouper and hooks.
Install postgres, add a grouper user with a pass.
Download the latest grouper 1.4 branch
cvs -d:pserver:anoncvs@anoncvs.internet2.edu:/home/cvs/i2mi login
cvs -d:pserver:anoncvs@anoncvs.internet2.edu:/home/cvs/i2mi export -r GROUPER_1_4_BRANCH grouper
cvs -d:pserver:anoncvs@anoncvs.internet2.edu:/home/cvs/i2mi export -r GROUPER_UI_1_4_BRANCH grouper-ui
In grouper dir, run: ant dist
Change these settings in conf/grouper.hibernate.properties
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.driver_class =org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost:5433/grouper
hibernate.connection.username = grouper
hibernate.connection.password = whateverYouSet
Copy the grouper_home/lib/jdbcSamples/postgresql.jar to grouper_home/lib/custom
cp lib/jdbcSamples/postgresql.jar lib/custom
Change this in conf/grouper.properties so ddl can be done:
db.change.allow.user.1=grouper
db.change.allow.url.1=jdbc:postgresql://localhost:5432/grouperAdd tables: bin/gsh.sh -registry -runscript
You should now be able to browse the DB with pgAdmin or whatever tool you use to admin the db
Check tables: bin/gsh.sh -registry -check
Should output: NOTE: database table/object structure (ddl) is up to date
Start gsh and add a subject: bin/gsh.sh
gsh 0% addSubject("mchyzer", "person", "Chris Hyzer")
gsh 1% exitIn grouper.properties, I will change/add these settings:
groups.wheel.use = true
groups.wheel.group = etc:sysadmingroup
configuration.autocreate.group.name.0 = etc:sysadmingroup
configuration.autocreate.group.description.0 = super users
configuration.autocreate.group.subjects.0 = mchyzerStart gsh again: bin/gsh.sh see if the user is in the groups. Make a stem. Add a type, and an attribute
gsh 0% grouperSession = GrouperSession.startRootSession();
edu.internet2.middleware.grouper.GrouperSession: f802d876-b876-4315-b76e-0586bcc561b1,'GrouperSystem','application'
gsh 1% subject = findSubject("mchyzer");
subject: id='mchyzer' type='person' source='jdbc' name='Chris Hyzer'
gsh 2% member = MemberFinder.findBySubject(grouperSession, subject);
member: id='mchyzer' type='person' source='jdbc' uuid='1324c75e-9435-4c45-97e9-af40f2b71046'
gsh 3% member.getGroups();
group: name='etc:sysadmingroup' displayName='etc:sysadmingroup' uuid='e8cf5974-97ea-4865-9ac9-719fe3a13134'
gsh 4% addRootStem("aStem", "aStem");
stem: name='aStem' displayName='aStem' uuid='3e1c5e6e-6dd4-43f0-8b6c-20cb39f01ac8'
gsh 5% typeAdd("fubGroup");
type: 'fubGroup'
gsh 5% typeAddAttr("fubGroup", "gid", AccessPrivilege.READ, AccessPrivilege.ADMIN, false);
attribute: 'gid'Lets add the hook and try in gsh. Just add in grouper source tree for simplicity sake
package test;
import edu.internet2.middleware.grouper.Group;
import edu.internet2.middleware.grouper.GroupType;
import edu.internet2.middleware.grouper.GroupTypeFinder;
import edu.internet2.middleware.grouper.hooks.beans.HooksContext;
import edu.internet2.middleware.grouper.hooks.beans.HooksGroupBean;
/**
* add a type after a group insert
*/
public class GroupAddFubHook extends
edu.internet2.middleware.grouper.hooks.GroupHooks {
/**
*
* @see edu.internet2.middleware.grouper.hooks.GroupHooks#groupPostInsert(edu.internet2.middleware.grouper.hooks.beans.HooksContext, edu.internet2.middleware.grouper.hooks.beans.HooksGroupBean)
*/
@SuppressWarnings("unchecked")
@Override
public void groupPostInsert(HooksContext hooksContext,
HooksGroupBean postInsertBean) {
super.groupPostInsert(hooksContext, postInsertBean);
try {
Group group = postInsertBean.getGroup();
GroupType fubGroup = GroupTypeFinder.find("fubGroup");
group.addType(fubGroup);
group.setAttribute("gid", "2");
group.store();
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
}
[mchyzer@flash2 grouper]$ ant dist
Add this line to the hooks section in conf/grouper.properties
hooks.group.class=test.GroupAddFubHookSee hook work, see new type and new attribute: bin\gsh.sh
gsh 0% group = addGroup("aStem", "aGroup5", "aGroup5");
group: name='aStem:aGroup5' displayName='aStem:aGroup5' uuid='b5552545-2ad2-462c-b5df-67586c987992'
gsh 1% group.getTypes();
type: 'base'
type: 'fubGroup'
gsh 2% group.getAttributes();
java.util.HashMap: {extension=aGroup5, displayExtension=aGroup5, gid=2, name=aStem:aGroup5, displayName=aStem:aGroup5}
gsh 3%
*
Grouper UI
Download or unzip grouper-ui
Run ant - exit
Edit the build.properties,
set the grouper.folder if not ../grouper
Run ant - dist
Edit your tomcat_home/conf/server.xml, add a context for the UI
<Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
<Context docBase="/home/mchyzer/grouper_v1_4/grouper-ui/dist/grouper" path="/grouper" reloadable="false"/>
</Host>
</Engine>Add a user to your tomcat-users.xml file:
<tomcat-users>
<role rolename="grouper_user"/>
<user username="mchyzer" password="whateveryouwant" roles="grouper_user"/>
</tomcat-users>
If you are using mod_jk, hook up the url with the tomcat:
JkMount /grouper/* tomcat_mchyzerStop and start apache and tomcat:
[mchyzer@flash2 grouper]$ /home/mchyzer/apache2_0/bin/apachectl stop
[mchyzer@flash2 grouper]$ /home/mchyzer/apache2_0/bin/apachectl start
[mchyzer@flash2 grouper]$ /home/mchyzer/tomcat/bin/shutdown.sh
Using CATALINA_BASE: /home/mchyzer/tomcat
Using CATALINA_HOME: /home/mchyzer/tomcat
Using CATALINA_TMPDIR: /home/mchyzer/tomcat/temp
Using JRE_HOME: /opt/appserv/java6
[mchyzer@flash2 grouper]$ /home/mchyzer/tomcat/bin/startup.sh
Using CATALINA_BASE: /home/mchyzer/tomcat
Using CATALINA_HOME: /home/mchyzer/tomcat
Using CATALINA_TMPDIR: /home/mchyzer/tomcat/temp
Using JRE_HOME: /opt/appserv/java6
[mchyzer@flash2 grouper]$Add a group with or without the fubGroup type, and see the type and attribute when done