Déploiement rapide d’un portail applicatif avec Scribe / Envole

Il y a des solutions « socles » en académie qui sont chronophages à déployer et/ou maintenir dans le temps (exemple de l’application GRR). Une solution packagée tout en un existe pourtant en établissement, il est donc simple de l’utiliser pour héberger des services communs dans les rectorats : un serveur Scribe qui embarque le portail intranet Envole.

Téléchargement ISO

Pour notre besoin simple, nous n’avons absolument pas besoin du module Scribe AD, je suis donc parti sur l’ISO de la version 2.6.2.2 que nous pourrons mettre à jour par la suite.

Toutes les ISO sont disponible sur : http://eole.ac-dijon.fr/pub/iso/

Il n’y a plus qu’à l’installer sur une VM en montant l’image, le partitionnement et l’ensemble du paramétrage se feront de façon automatique.

Configuration

Il suffit de lancer la commande :

gen_config

Je vous conseille d’être à minima en mode « normal » :

Onglet Général

Le plus important est l’UAI (ou RNE de votre rectorat), le nom de la machine et le nom de votre domaine local.

Onglet Service

Onglet Interfaces

Il faut y indiquer principalement l’adresse IP et la passerelle de votre réseau :

Onglet Annuaire

Onglet Samba

Onglet Applications Web

Afin d’avoir toutes les options, il vous faudra d’abord faire la configuration de base puis instancier le serveur (commande « instance ») et enfin installer les applications souhaitées, par exemple :

apt-eole install eole-posh eole-envole-connecteur eole-grr eole-limesurvey eole-opensondage

Onglet Envole

Deux types de bases sont prévus par EOLE.

  • base utilisateur type Scribe ;
  • autre base utilisateur (PIA, annuaire LDAP externe).

En choisissant la base ENT vous indiquez l’utilisation d’une base type Scribe. Base par défaut du module Scribe. En choisissant la base annuaire vous spécifiez l’utilisation d’une base différente de la base par défaut de Scribe, de type annuaire.

J’ai fait le choix de partir sur la base ENT et d’alimenter l’annuaire via une extraction AAF que l’on intègre une première fois via le module « Importation » disponible dans l’EAD (même machine sur le port 4200).

Onglet Eole sso

Le but étant de globaliser / centraliser nos applications Web et nos applications locales à l’usage des agents administratifs de toute l’académie (Portail Intranet Académique), j’ai donc configuré 2 annuaires : le LDAP academique et le LDAP intégré à la solution EOLE.

J’ai décidé de ne faire l’authenfication que sur l’attribut « mail », l’utilisateur devra donc inscrire son mail officiel pour se connecter, cela afin d’éviter des problèmes d’homonymie.

Notre annuaire LDAP académique (comme la plupart des autres académies) comprenant de nombreux comptes inutilisés ou obsolètes, nous n’allons l’utiliser que pour la partie authentification. Cela afin de « rationaliser » tous nos comptes utilisateurs en créant les comptes qui sont réellement encore utilisés dans le LDAP local, interne à scribe. Nous allons pouvoir le charger automatiquement avec une exportation AAF (Annuaire Académique Fédérateur) et, au besoin, on peut ajouter progressivement de nouveaux utilisateurs via le module d’administration EAD (port 4200).

Pour ne garder que la partie authentification, j’ai fait une petite modification sur le module EOLE SSO. J’ai créé un « ticket » afin de prendre en compte ce changement : https://dev-eole.ac-dijon.fr/issues/12521

Modification de dataproxy.py dans /usr/lib/python2.7/dist-packages/eolesso/dataproxy.py

@@ -37,6 +37,8 @@
 from eoleldaptor import eoleldapproxy
 from twisted.python import log, failure
 from util import get_replication_branches
+from scribe.eoleldap import Ldap
+from scribe.linker import _user_factory
 import os, socket
 class LDAPProxy:
@@ -117,6 +119,7 @@
             self.search_branches[host] = search_branches
             self.ldap_infos[host] = ldap_infos
             self.otp_config[host] = login_otp
+            #log.msg("Eole proxy %s" % eole_proxy)
         if nb_branches > 1:
             self.use_branches = True
@@ -221,15 +224,28 @@
     def callb_auth(self, result_auth, user_id, passwd, search_branch, servers):
         success, user_data = result_auth
-        # vérification du résultat de l'authentification sur le serveur précédent
-        if success == False:
-            # echec de l'authentification  sur ce serveur
-            if len(servers) > 0:
-                # test sur le serveur suivant
-                return self.authenticate(user_id, passwd, search_branch, servers)
-            else:
-                # on a essayé sur tous les serveurs
-                return False, {}
+
+        if success == True and "localhost" not in servers:
+            #log.msg("MAJ pwd vers localhost")
+            #recupere de ead2 backend/actions/scribe/userpwd.py
+            try:
+                conn = Ldap()
+                conn.connect()
+                ldapuser = _user_factory(user_id, conn.connexion)
+                ldapuser.c_mod_password(user_id, passwd)
+                conn.close()
+            except:
+                pass
+
+        # echec de l'authentification  sur ce serveur
+        if len(servers) > 0:
+            # test sur le serveur suivant
+            return self.authenticate(user_id, passwd, search_branch, servers)
+
+        if success == False :
+            # on a essayé sur tous les serveurs
+            return False, {}
+
         # on supprime certains champs (mot de passe)
         for user_attr in self.ignored_attrs:
             if user_attr in user_data:

Redémarrage du service :

service eole-sso restart

Onglet Messagerie

Instanciation

Une fois le paramétrage effectué, il vous suffit de lancer la commande :

instance

Le script effectuera toute l’installation et vous demandera les mots de passe souhaité pour les utilisateurs root et eole.

AAF

Export

Afin d’intégrer les utilisateurs de votre rectorat, vous allez pouvoir effectuer un export AAF simple :

<generation-config>
  <generation name="0310094J">
    <listeTransformation>ENT2DVA_pen</listeTransformation>
     <listeRne>0310094J</listeRne>
     <encoding>UTF-8</encoding>
  </generation>
</generation-config>

Import initial

Il suffit de vous connecter à l’EAD (par exemple https://monscribe.ac-academie.fr:4200) et aller dans le menu « Importation » :

Puis on injecte le fichier généré par AAF :

Synchronisation automatique

Pour créer une synchronisation automatique au fil de l’eau des modifications de votre base utilisateur, il suffit de générer un tar.gz depuis AAF (comprenant le fichier XML par exemple ENT_0310094J_PersEducNat_0000.xml) et de le déposer dans /var/lib/eole/aaf/.

Mises à jour

C’est ce qui nous intéresse, avoir un processus simple et rapide de mises à jour pour les différentes applications déployées sur ce portail. Il y a 2 commandes toutes simples :

Query-Auto
Maj-Auto

Pour bascule sur une version mineure :

Maj-Release

Pour basculer sur une version majeure :

Upgrade-Auto

Accès au portail et à vos applications

Il vous suffit de vous connecter en https sur votre serveur scribe, une redirection vers la connexion SSO sera faite automatiquement (port 8443) :

Personnalisation du thème

Les thèmes se trouvent dans : /usr/share/envole/envole-themes/.

Vous avez différents thèmes que vous pouvez directement utiliser pour éviter toute modification.

Sinon, pour modifier le logo du SSO (Eole SSO), on va pouvoir modifier l’image en question dans /usr/share/sso/interface/theme/image/logo.png

Toute une documentation détaillée se trouve sur personnalisation de la mire SSO [Installation et mise en œuvre du module Scribe ] (ac-dijon.fr)

Pour que les modifications ci-dessous soient compatibles avec reconfigure, pensez à désactiver les thèmes envole dans l’interface gen_config (onglet « Applications web ») :

Par exemple, on va modifier le fichier /usr/share/sso/interface/theme/style/theme.css :

/* boite formulaire */
#wrap2{
    background:url(../image/logo.png) no-repeat center -10px;

Et on va supprimer l’avertissement concernant un identifiant sur 2 annuaires puisque l’authentification ne se fait que dans celui académique.

Dans le fichier /usr/share/sso/interface/scripts/authform_ajax.js :

var request_check = new Request.JSON({url:'/check_user_options',
			onSuccess: function(response, responseText)
			{
				if ((response.search_branches != undefined) && (check_branches == 'true')) {
					if (response.search_branches.length > 12) {
						// doublons reperés : remplissage de la liste d'établissements
						update_etabs(response.search_branches, search_branch);
						if ($('row_etab') != null) {
							$('row_etab').setStyle('display', 'table-row');
						}
					}

Pour ajouter une information dans l’écran de bienvenue, on peut modifier le fichier /usr/share/sso/interface/authform.tpl :

<div id="avertissement">
    <br/>
    <div class="alert-box notice">Bienvenue sur le nouveau portail du rectorat de Toulouse dont l'objectif est de fédérer l'ensemble des applications Web à destination des personnels du vice-rectorat et des établissements sur un point d'entrée unique.<br>Merci de vous identifier avec votre compte académique pour accéder aux différents services proposés. Votre identifiant est votre adresse de messagerie (ex: [email protected]) et votre mot de passe académique.</div>
    %s
</div>

Pour modifier l’identifiant par Email par exemple, on peut modifier le code de cas_resources.py :

 redirect_input,
 _("LoginEmail"), _("Login"), autocomplete,

Pour recharger le service une fois les modifications effectuées :

CreoleService eole-sso restart

Personnalisation du portail Posh

Il faut se connecter avec le compte admin (soit existant dans votre annuaire soit que vous avez défini dans gen_config) puis aller dans « Interface d’administration » :

Puis dans « Pages » :

Il faut décocher ensuite « Bloquer cette page » :

Ce qui va nous permettre de pouvoir enlever les widgets non souhaités, par exemple :

On peut ajouter d’autres widgets via l’onget widget :

Une fois les modifications souhaitées, il ne faut pas oublier de cocher « Remplacer la version précédente » et « Bloquer cette page » puis enregister :

Forcer la modification des variables

Vous pouvez modifier les variables et leur type afin de limiter les contrôles et « forcer » certaines choses. La description XML des variables se trouvent dans /usr/share/eole/creole/dicos/.

Création d’un patch

Il suffit de prendre un fichier qui se trouve dans le dossier /usr/share/eole/creole/distrib/ puis le copier dans /usr/share/eole/creole/modif :

/usr/share/eole/creole/modif# cp ../distrib/grr-update-1.sql .

Puis on change le fichier en question avec les modifications souhaitées. Par exemple :

UPDATE grr_setting SET value = 'y' WHERE name = 'sso_redirection_accueil_grr';
UPDATE grr_setting SET value = '0' WHERE name='acces_fiche_reservation';
UPDATE grr_setting SET value = '0' WHERE name='authentification_obli';
UPDATE grr_setting SET value = '0' WHERE name='visu_fiche_description';
UPDATE grr_utilisateurs SET default_language='fr'

Pour générer le patch en question, on lance la commande :

gen_patch

Puis pour, enfin, prendre en compte les modifications, on lance de nouveau :

reconfigure