...
Le driver oracle n'étant pas dans le maven central, une modification du pom.xml ne suffit pas. Il faudra en plus l'ajouter dans votre 'repository local' ainsi (après l'avoir téléchargé depuis https://www.oracle.com/technetwork/database/features/jdbc/default-2280470.html ) :
| Bloc de code |
|---|
|
mvn install:install-file -Dfile=/tmp/ojdbc7.jar -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.2 -Dpackaging=jar -DgeneratePom=true |
puis ajout dans le pom.xml de la dépendance :
| Bloc de code |
|---|
|
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2</version>
</dependency> |
La configuration se fait ensuite dans applicationContext-services.xml avec un dataSource adéquat ...
| Bloc de code |
|---|
|
<bean id="dataSourceOracle" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@oracle.devcake.co.uk:1521:INTL"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean> |
...
Pour ce faire, dans applicationContext-services.xml on modifiera
| Bloc de code |
|---|
|
<bean id="groupService" class="org.esupportail.sgc.services.ldap.LdapGroupService">
<property name="ldapTemplate" ref="ldapTemplate"/>
<property name="groupSearchBase" value="ou=groups" />
<property name="groupSearchFilter" value="member={0}"/>
<property name="memberSearchBase" value="ou=people"/>
<property name="memberSearchFilter" value="memberOf={0}"/>
</bean> |
par quelque chose du type :
| Bloc de code |
|---|
|
<bean id="groupService" class="org.esupportail.sgc.services.ldap.LdapFilterGroupService">
<property name="ldapTemplate" ref="ldapTemplate"/>
<property name="ldapFiltersGroups">
<map>
<entry key="(|(eduPersonAffiliation=student)(eduPersonAffiliation=employee))" value="esup-sgc-users"/>
<entry key="eduPersonPrincipalName=joe@univ-ville.fr" value="esup-sgc-admins"/>
<entry key="eduPersonPrincipalName=jack@univ-ville.fr" value="esup-sgc-managers"/>
</map>
</property>
</bean> |
C'est ensuite ces noms de groupes ainsi déifinis ('esup-sgc-users', esup-sgc-admins', ...) qui peuvent être utilisés dans applicationContext-security.xml au niveau du bean sgcMappingGroupesRoles pour définir les rôles de chacun :
| Bloc de code |
|---|
|
<util:map id="sgcMappingGroupesRoles">
<beans:entry key="esup-sgc-admins" value="ROLE_ADMIN" />
<beans:entry key="esup-sgc-managers" value="ROLE_MANAGER" />
<beans:entry key="esup-sgc-users" value="ROLE_USER" />
</util:map> |
...
La demande de carte peut être faite par l'appel d'un webservice. Cet appel ressemble à ceci:
| Bloc de code |
|---|
|
curl -F "eppn=username@univ-ville.fr" -F "difPhotoTransient=true" -F "crousTransient=true" -F "europeanTransient=true" -F "PhotoFile.file=@/path/to/image.png" https://esup-sgc.univ-ville.fr/wsrest/api |
La liste des clients autorisés à utiliser ce webservice est définie dans la variable accessRestrictionWSRestAPI du fichier security.properties. Par exemple, pour autoriser certaines adresses IP (notez que la valeur de cette variable n'est pas entourée de guillemets):
| Bloc de code |
|---|
|
accessRestrictionWSRestApi=hasIpAddress('127.0.0.1') or hasIpAddress('192.168.1.39') or hasIpAddress('192.168.22.0/24') |
...
- Modifier la configuration du sgc dans applicationContext-services.xml
| Bloc de code |
|---|
|
<bean class="org.esupportail.sgc.services.cardid.CnousCardIdService">
<property name="appName" value="crous"/>
<property name="idCounterBegin" value="<numero de debut de plage CNOUS>"/>
<property name="postgresqlSequence" value="crous_smart_card_sequence"/>
<property name="crousEncodeEnabled" value="true"/>
</bean> |
...
Pour pouvoir l'utiliser, l'IP du client doit être référencé dans accessRestrictionWSRestPhoto, fichier security.properties
- Récupérer la dernière photo en date non rejetée d'un utilisateur :
| Bloc de code |
|---|
|
wget 'http://localhost:8080/wsrest/photo/joe@univ-ville.fr/photo'
|
Récupérer la dernière photo en date dans un état donné d'un utilisateur :
| Bloc de code |
|---|
|
wget 'http://localhost:8080/wsrest/photo/joe@univ-ville.fr/photo?cardEtat=ENABLED'
|
(état activé ici)
Récupérer la dernière photo en date dans un état donné d'un utilisateur après une date précisée (renvoie un code http 304 si la photo en question n'a pas été modifiée depuis cette date) :
| Bloc de code |
|---|
|
wget 'http://localhost:8080/wsrest/photo/joe@univ-ville.fr/photo?cardEtat=ENABLED&dateEtatAfter=2018-06-19'
|
Pour prendre en compte le choix de l'utilisateur de diffuser ou non sa photo, on peut faire les mêmes requêtes avec /restrictedPhoto en lieu et place de /photo :
| Bloc de code |
|---|
|
wget 'http://localhost:8080/wsrest/photo/joe@univ-ville.fr/restrictedPhoto?cardEtat=ENABLED'
|
...
Pour pouvoir l'utiliser, l'IP du client doit être référencé dans accessRestrictionWSRestApi, fichier security.properties
| Bloc de code |
|---|
|
wget 'http://localhost:8080/wsrest/api/get?eppn=toto@univ-ville.fr&eppn=titi@univ-ville.fr'
|
Quelle version de Java puis-je utiliser ?
...
Pour ce faire, dans applicationContext-security.xml on modifiera
| Bloc de code |
|---|
|
<beans:bean id="groupService" class="org.esupportail.nfctag.security.LdapGroupService">
<beans:property name="ldapTemplate" ref="ldapTemplate"/>
<beans:property name="groupSearchBase" value="ou=groups" />
<beans:property name="groupSearchFilter" value="member={0}"/>
<beans:property name="memberSearchBase" value="ou=people"/>
<beans:property name="memberSearchFilter" value="memberOf={0}"/>
</beans:bean> |
par quelque chose du type :
| Bloc de code |
|---|
|
<beans:bean id="groupService" class="org.esupportail.nfctag.security.LdapFilterGroupService">
<beans:property name="ldapTemplate" ref="ldapTemplate"/>
<beans:property name="ldapFiltersGroups">
<util:map>
<beans:entry key="eduPersonPrincipalName=joe@univ-ville.fr" value="esup-nfc-admins"/>
<beans:entry key="eduPersonPrincipalName=jack@univ-ville.fr" value="esup-nfc-supervisors"/>
</util:map>
</beans:property>
</beans:bean> |
C'est ensuite ces noms de groupes ainsi déifinis ('esup-sgc-admins', 'esup-nfc-supervisors') qui peuvent être utilisés au niveau du bean nfcMappingGroupesRoles pour définir les rôles de chacun :
| Bloc de code |
|---|
|
<util:map id="nfcMappingGroupesRoles">
<beans:entry key="esup-nfc-admins" value="ROLE_ADMIN" />
<beans:entry key="esup-nfc-supervisors" value="ROLE_SUPERVISOR" />
</util:map> |
...
applicationContext-desfire.xml (pour modifier la master key par defaut par une clé AES)
| Bloc de code |
|---|
|
<bean id="desfireChangeMasterKeyTagEsupSgc" class="org.esupportail.nfctag.beans.DesfireTag" p:formatBeforeWrite="false" p:keyStart="0000000000000000" p:keyTypeStart="DES" p:keyFinish="12345678901234567890123456789012" p:keyTypeFinish="AES" p:keyVersionFinish="01">
</bean>
<bean id="desfireAuthConfigChangeKeyMasterEsupSgc" class="org.esupportail.nfctag.service.api.impl.DesfireWriteConfig">
<property name="desfireTag" ref="desfireChangeMasterKeyTagEsupSgc" />
<property name="description" value="Changement de la Master Key"/>
</bean> |
applicationContext-custom.xml (ajout d'une application dummy dediée)
| Bloc de code |
|---|
|
<bean id="dummyChangeMasterKeyExtApi" class="org.esupportail.nfctag.service.api.impl.AppliExtDummy">
<property name="description" value="Changement Master Key"/>
<property name="locationsNames">
<util:list>
<value>Change Master Key</value>
</util:list>
</property>
</bean> |
...