Documentations:Transmission AD esco grouper

Un article de Wiki ESCO-Portail.

Sommaire

Notes d'installation sur ESCO Grouper

Pré-requis

  1. maven doit être installé (version utilisée au 12/2009 apache-maven-2.2.1).
  2. le dépôt local maven pour le projet doit être copié localement et à jour : /opt/maven.repo.2
  3. Grouper et son web service doivent être installés et accessibles (y compris la base de données Grouper pour les accès via l'API).

Configuration

Le projet correspondant à l'application se trouve sur /opt dans le répertoire : /opt/ESCO-Grouper-SOPRA_lotx.y_vx.y.z

Documentation de référence fournie par Sopra

Fichiers à éditer

  • metier/esco-web/src/main/filters/filters.properties exemple
  • metier/esco-web/src/main/resources/properties/config.properties exemple
  • metier/esco-web/src/main/resources/properties/env.properties exemple
  • metier/esco-web/src/main/resources/properties/web/extension/groupdynamique-controllers.xml


En fonction du type de déploiement :

  • metier/esco-web/src/main/conf/servlet/applicationContext.xml exemple

Ou

  • metier/esco-web/src/main/conf/portlet/applicationContext.xml

Ce n'est pas le fonctionnement normal et, à terme, le fichier à éditer sera metier/esco-web/src/main/resources/properties/applicationContext.xml (c'est déjà le cas en V1.02)


Le paramétrage est en cours de révision mais tant que ce n'est pas réalisé il faut également vérifier le dn utilisé est le bon (dans les fichiers fournis par Sopra c'est le dn de démo).

  • metier/esco-web/src/main/resources/properties/ldap/ldap.xml (a partir de la V2.1.0)
  • metier/esco-web/src/main/resources/properties/auth/auth-cas.xml


Au moins jusqu'à la version 1.1.05 il faut vérifier dans :

  • metier/esco-web/src/main/conf/grouper.properties

les droits sur les groupes par défaut:

groups.create.grant.all.read = false

groups.create.grant.all.view = false

Un bug fait qu'il ne sont pas affiché (coché) à l'init quant il sont à true.

Labels et I18N

Le fichier que j'ai eu à modifier pour régler les questions de label est metier/esco-web/src/main/resources/properties/i18n/bundles/screen/Group_fr.properties. C'est au niveau de ce fichier que se règle, notamment la correspondance classe LDAP / Type de personne.

Paramétrage de tomcat

Les options transmises à tomcat via la variable CATALINA_OPTS sont les suivantes :

CATALINA_OPTS="-Djavax.net.ssl.trustStore=/usr/local/ssl/grouper/trust.sati.keystore "
CATALINA_OPTS=$CATALINA_OPTS"-Dconf.dir=/opt/tomcat/webapps/ESCOGrouper/WEB-INF/classes/properties "
CATALINA_OPTS=$CATALINA_OPTS"-Djava.file.encoding=iso-8859-1 "
CATALINA_OPTS=$CATALINA_OPTS"-Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser "
CATALINA_OPTS=$CATALINA_OPTS"-Djavax.ws.rs.ext.RuntimeDelegate=org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl "
CATALINA_OPTS=$CATALINA_OPTS"-Duser.language=fr "
CATALINA_OPTS=$CATALINA_OPTS"-Duser.country=FR "
CATALINA_OPTS=$CATALINA_OPTS"-Dfile.encoding=ISO-8859-1 "

Faire attention à ce que la valeur associée à la propriété conf.dir pointe bien vers le répertoire properties de l'application web.

Déploiement

Avant la v2.2.0. Attention si on ne veut pas écraser le paramétrage de la base Derby il faut modifier le fichier ./metier/esco-core/src/main/resources/sql/populateSchema.sql avant la compilation maven. Ensuite il faudra supprimer la base Derby (/var/ESCOGrouper/ESCODB) avant de redémarrer le tomcat. Elle sera recréée.

grouper@sati:/opt/ESCO-Grouper-SOPRA_lot2.1_v2.1.0$ mvn clean install -P servlet -Dmaven.test.skip
 
grouper@sati:/opt/ESCO-Grouper-SOPRA_lot2.1_v2.1.0$ cp metier/esco-web/target/esco-web-1.0.0-SNAPSHOT.war /opt/tomcat/webapps/ESCOGrouper.war

En version V2.2.0 il faut suivre la doc qui est assez complète.

Problèmes /solutions

Version : ESCO-Grouper-SOPRA_lot2.1_v2.1.0 installée en test (Sati).

  • Erreur lors de mvn install pour cause de bibliothèques manquantes : ldapbp et grouper-esco-dg-definition. Ces bibliothèques sont déjà présentes dans d'autres projet sur la plate-forme de test et peuvent être ajoutées au dépôt mvn :
mvn install:install-file -DgroupId=org.esco.grouperui.ext -DartifactId=grouper-esco-dg-definition -Dversion=0.1.0 -Dclassifier=alpha0 -Dpackaging=jar -Dfile=/opt/ESCO-DynamicGroups/dist/grouper-esco-dg-definition-0.1.0-alpha0.jar
 
mvn install:install-file -DgroupId=com.sun -DartifactId=ldapbp -Dversion=1.0 -Dpackaging=jar -Dfile=/opt/ws4Internet2Grouper-2.0.0/webapp/WEB-INF/lib/ldapbp-1.0.jar


  • Conflit de version pour la bibliothèque ldap : il est possible que 2 versions de spring-ldap soient installées, la 1.2 et la 1.1. Dans ce cas supprimer la version 1.1.



  • problème de type manquant. Sopra utilise un type personnalisé pour représenter le type par défaut. Cela se retrouve dans la base de paramétrage et empêche l'application de fonctionner correctement. Pour corriger le problème il faut soit créer le type personnalisé "standard" dans Grouper soit modifier la base de paramétrage : pour l'entrée org.esco.grouperui.group.custom.type remplacer la valeur standard par base. En v2.2.0 il faut de plus : pour l'entrée org.esco.grouperui.group.custom.default remplacer la valeur standard par base.


  • Le test des règles des groupes dynamiques ne fonctionne pas : il reste probablement en dur des mauvaises adresses de serveur LDAP dans le fichier metier/esco-web/src/main/resources/properties/ldap/ldap.xml
  • La condition par défaut n'est pas ajoutée, lors de la création de la règle d'appartenance : éditier le fichier metier/esco-web/src/main/resources/properties/web/dynamicgroups.xml et éditer l'expression régulière définie dans le bean defaultStrategyRequestLocator :
<bean id="defaultStrategyRequestLocator" class="org.esco.grouperui.services.dynamicgroup.internal.DefaultStrategyRequestLocator">
		<property name="evaluator" >
			<description>
                                expression evaluator. This class can be evaluate java regexp in jexel expression.
			</description>
			<bean class="org.esco.grouperui.services.dynamicgroup.internal.ExpressionEvaluator" />
		</property>
		<property name="strategies" >
			<description>
                                all strategies.
			</description>
        		<map>
                             	<entry key="evaluator.regexp('esco:Etablissements:(([^_]+)_(\\d{5,7}\\w?))(:[^:]+)*', stem.getName())">
        				<bean class="org.esco.grouperui.services.dynamicgroup.internal.UAIStrategyRequestFactory" />
        			</entry>
        			<entry key="evaluator.regexp('(.*)', stem.getName())">
        				<bean class="org.esco.grouperui.services.dynamicgroup.internal.DefaultStrategyRequestFactory" />
        			</entry>
        		</map>
        	</property>
	</bean>

Remarque : la cible de l'expression régulière est également modifiée, group.getExtension() est remplacé par stem.getName().


  • Problème lié à la sérialisation. Si des erreurs de ce type apparaissent après un redéployment :

Image:Erreur_grouper_UI.png

  • Arrêter tomcat
  • supprimer le répertoire /opt/tomcat/work/Catalina/localhost/ESCOGrouper/
  • redémarrer tomcat

Base de données des paramètres

Pour accéder à la base de paramétrage, j'utilise Squirrel SQL (sur la version 2.6 le driver pour Derby doit être ajouté).

Règle pour ne permettre les modifications des extensions des dossier que sous "groupes_locaux" : esco:Etablissements:([^:]+):(.+) => si on a le droit stem sur un dossiers, on peut modifier son extension que si ce dossier est sous esco:Etablissements:quelquechose:quelque chose. C'est la ligne PGROUP=org.esco.grouperui.stem.attribut.modification dans la base Derby

La table de paramétrage PARAM se trouve sous DBPARAMETER/TABLE/.
Le fichier utilisé pour le peuplement initial est metier/esco-core/src/main/resources/sql/populateSchema.sql

Dans l'écran de création de groupe pour supprimer le type personnalisé dynamique il faut (v2.2.0): supprimer dans populateSchema.sql (et/ou supprimer directement dans la base derby) la ligne:

INSERT INTO "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") 
VALUES('dynamique', 'org.esco.grouperui.group.custom.type', 'dynamique', 'dynamique.label', 'Edition de groupe - Attributs - Types personnalis�s - dynamique');

Dans le même écran pour supprimer les contextes d'utilisation associées par défaut au type standard on peut modifier dans populateSchema.sql (et/ou dans la base derby) la ligne suivante :

--insert into "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") 
--values('standard', 'org.esco.grouperui.group.context.standard', 'standard', 'list|samba|xyz', 'Edition de groupe - Attributs - Association types personnalis�s et contextes utilisation - standard');
INSERT INTO "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") 
VALUES('standard', 'org.esco.grouperui.group.context.standard', 'standard', 'xyz', 'Edition de groupe - Attributs - Association types personnalis�s et contextes utilisation - standard');

Pour résoudre le problème de type (base) manquant discuté plus haut, on a modifié en v2.2.0 les deux lignes dans populateSchema.sql (et/ou dans la base derby) suivantes :

--insert into "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") 
--values('default', 'org.esco.grouperui.group.custom.default', 'default', 'standard', 'Edition de groupe - Attributs - Types personnalisés - defaut type');
INSERT INTO "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") 
VALUES('default', 'org.esco.grouperui.group.custom.default', 'default', 'base', 'Edition de groupe - Attributs - Types personnalisés - defaut type');
--insert into "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") 
--values('standard', 'org.esco.grouperui.group.custom.type', 'standard', 'standard.label', 'Edition de groupe - Attributs - Types personnalis�s - standard');
INSERT INTO "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") 
VALUES('base', 'org.esco.grouperui.group.custom.type', 'base', 'standard.label', 'Edition de groupe - Attributs - Types personnalis�s - standard');

Pour accepter les descriptions vides pour les groupes ou les stems :

--insert into "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") 
--values('description', 'org.esco.grouperui.stem.attribut.regexp', '/^.+$/', 'STEM.ERROR.DESCRIPTION.LABEL', 'Edition de dossier - Attributs - attribut description - regle de validation');
INSERT INTO "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT")
VALUES('description', 'org.esco.grouperui.stem.attribut.regexp', '/^.*$/', 'STEM.ERROR.DESCRIPTION.LABEL', 'Edition de dossier - Attributs - attribut description - regle de validation');
--insert into "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT")
--values('description', 'org.esco.grouperui.group.attribut.regexp', '/^.+$/', 'GROUP.ERROR.DESCRIPTION.LABEL', 'Edition de groupe - Attributs - attribut description - regle de validation');
INSERT INTO "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT")
VALUES('description', 'org.esco.grouperui.group.attribut.regexp', '/^.*$/', 'GROUP.ERROR.DESCRIPTION.LABEL', 'Edition de groupe - Attributs - attribut description - regle de validation');

Pour accepter les blancs dans les description de dossiers et de groupes :

--insert into "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") 
--values('description', 'org.esco.grouperui.stem.attribut.regexp', '/^.+$/', 'STEM.ERROR.DESCRIPTION.LABEL', 'Edition de dossier - Attributs - attribut description - regle de validation');
INSERT INTO "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") 
VALUES('description', 'org.esco.grouperui.stem.attribut.regexp', '/^.*$/', 'STEM.ERROR.DESCRIPTION.LABEL', 'Edition de dossier - Attributs - attribut description - regle de validation');
--insert into "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") 
--values('description', 'org.esco.grouperui.group.attribut.regexp', '/^.+$/', 'GROUP.ERROR.DESCRIPTION.LABEL', 'Edition de groupe - Attributs - attribut description - regle de validation');
INSERT INTO "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") 
VALUES('description', 'org.esco.grouperui.group.attribut.regexp', '/^.*$/', 'GROUP.ERROR.DESCRIPTION.LABEL', 'Edition de groupe - Attributs - attribut description - regle de validation');

Pour ne permettre la modification des extensions des noms des dossiers que pour ceux qui sont sous "groupes_locaux" (en fait, qui sont sous un dossier placé sous "Etablissements") :

--insert into "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") values('parent', 'org.esco.grouperui.stem.parent.name.regexp', 'parent', '.+', 'Edition de dossier - Attributs - droit pour edition de l attribut extension'); 
INSERT INTO "DBPARAMETER"."PARAM" ("PKEY", "PGROUP", "PARAM_KEY", "PARAM_VALUE", "PARAM_COMMENT") VALUES('parent', 'org.esco.grouperui.stem.parent.name.regexp', 'parent', 'esco:Etablissements:([^:]+):(.+)', 'Edition de dossier - Attributs - droit pour edition de l attribut extension');

Stratégies de recherche

Pour la recherche d'individus, il faut que l'utilisateur connecté ne ramène que les individus qui sont de son établissement s'il effectue la recherche pour un des groupes qu'il administre sous "Etablissements", "Application" et "Admin". Le critère mentionné dans le fichier .../ESCO-Grouper/ext/grouper-api.fragment/src/main/ressources/spring/grouper-api-strategy.xml sera :

<bean id="defaultStrategySubjectLocator" class="org.esco.grouperui.services.grouper.internal.locator.DefaultStrategySubjectLocator">
                <property name="evaluator" ref="evaluator" />
                <property name="defaultSearchStrategies" >
                        <map>
                                <entry key="evaluator.regexp('(esco:Etablissements:(([^_]+)_(\\d{5,7}\\w?))(:[^:]+)*)|(esco:admin:.+)|(esco:Applications:.+)', path)" value-ref="UAIStrategySubjectSearch"></entry>
                                <entry key="evaluator.regexp('(.*)', term)" value-ref="defaulStrategySubjectSearch"></entry>
                        </map>
                </property>
        </bean>

Une fois cette modification effectuée, il faut redéployer l'application.

Page d'accueil

pages développeurs
pages "communauté ESCO"