Table of Contents

Systèmes de notification

Depuis la version 0.9.4, LemonLDAP::NG peut être utilisé pour notifier des messages aux utilisateurs : si un utilisateur a un message, celui-ci est affiché lorsqu'il accède au portail. Si le message contient des cases à cocher, l'utilisateur doit toutes les cocher, sinon il ne peut obtenir de cookie de session.

Depuis la version 1.1.0, un explorateur de notifications est disponible dans le manager, et les notifications peuvent être faites pour tous les utilisateurs, avec possibilité d'affichage conditionnel. Lorsque l'utilisateur accepte la notification, la référence est stockée dans ses données de session persistentes.

Installation

Activation

Il suffit d'activer les notifications dans le manager (Paramètres généraux > Paramètres avancés > Notifications > Activation) ou dans lemonldap-ng.ini :

[portal]
notification = 1

Stockage

Par défaut, les notifications sont stockées dans la même base de données que la configuration :

On peut changer les paramètres par défaut en utilisant les paramètres “notificationStorage” et “notificationStorageOptions” avec la même syntaxe que les paramètres de stockage de la configuration. pour ce faire dans le manager, aller dans Paramètres généraux > Paramètres avancés > Notifications.

File

Les paramètres pour le backend File sont les mêmes que ceux du backend de configuration File.

Il faut créer soi-même le répertoire et y donner un accès en écriture pour l'utilisateur Apache. Par exemple :
mkdir /usr/local/lemonldap-ng/notifications/
chown www-data /usr/local/lemonldap-ng/notifications/
Le séparateur par défaut des noms de fichiers est _, ce qui peut poser problème si on enregistre des notifications pour des utilsateur ayant un caractère _ dans leur nom de connexion. On peut changer ce séparateur en changeant la valeur de l'option fileNameSeparator par exemple @.

Pour résumer les options disponibles :

DBI

Les paramètres pour le backend DBI sont les mêmes que ceux du backend de configuration DBI.

Il faut créer soi-même la table :
CREATE TABLE notifications (
  DATE datetime NOT NULL,
  uid VARCHAR(255) NOT NULL,
  REF VARCHAR(255) NOT NULL,
  cond VARCHAR(255) DEFAULT NULL,
  xml longblob NOT NULL,
  done datetime DEFAULT NULL,
  PRIMARY KEY (DATE, uid,REF)
)

Pour résumer les options disponibles :

LDAP

Les paramètres pour le backend LDAP sont les mêmes que ceux du backend de configuration LDAP.

Il faut toutefois créer manuellement la branche

Pour résumer les options disponibles :

Carte blanche

Le module de notifications utilise une carte blanche pour gérer les notifications destinées à tous les utilisateurs. The default value of this wildcard is allusers, but you can change it if allusers is a known identifier in your system.

Pour le changer, aller dans Paramètres généraux > Paramètres avancés > Notifications > Carte blanche pour tous les utilisateurs, et mettre par exemple alluserscustom.

Ainsi, créer une notification pour alluserscustom affichera la notification à tous les utilisateurs.

Utiliser le système de notification

Since version 2.0, notifications are now stored in JSON format. If you want to keep old format, select “use old format” in the manager. Note that the server for inserting notifications is paired with the chosen format: REST for JSON and SOAP for XML.

Format des notifications

Notifications are JSON (default) or XML files containing:

Tous les autres éléments seront supprimés y compris les balises HTML telles <b>.
Un document XML de notification peut contenir plusieurs messages de notification.

Examples

JSON
{
"uid": "foo.bar",
"date": "2009-01-27",
"reference"; "ABC",
"title": "You have new authorizations",
"subtitle": "Application 1",
"text": "You have been granted to access to appli-1",
"check": [
  "I aggree",
  "Yes, I'm sure"
]
XML

<root>
<notification uid="foo.bar" date="2009-01-27" reference="ABC">
<title>Vous avez de nouvelles autorisations</title>
<subtitle>Application 1</subtitle>
<text>Vous êtes autorisé à accéder à appli-1</text>
<subtitle>Application 2</subtitle>
<text>Vous êtes autorisé à accéder à appli-2</text>
<subtitle>Acceptation</subtitle>
<check>Je reconnais savoir que je peux accéder à appli-1 </check>
<check>Je reconnais savoir que je peux accéder à appli-2 </check>
</notification>
<notification uid="allusers" date="2009-01-27" reference="disclaimer" condition="$ipAddr =~ /^192/">
<title>Ceci est votre premier accès à ce système</title>
<text>Soyez sage et ne le cassez pas.</text>
<check>Bien sûr, je ne suis pas méchant !</check>
</notification>
</root>

Créer de nouvelles notifications avec l'explorateur des notifications

Dans le manager, cliquer sur l'explorateur des notifications et ensuite sur le bouton Créer.

Remplir ensuite tous les champs pour créer la notification. Seule la condition n'est pas exigée.

Lorsque tout est bon, cliquer sur Sauver.

Notification server

New JSON notifications can be inserted using REST or SOAP server. If enabled, the server URL is https://auth.your.domain/notifications.

If notification server is enabled, you have to protect this URL using the webserver because there is no authentication required to use it.

Exemple :

# SOAP functions for notification insertion (disabled by default)
<LocationMatch ^/(index\.fcgi/)?notifications>
    Order deny,allow
    Deny from all
    Allow from 192.168.2.0/24
</Location>

JSON notifications through REST

Using JSON, you just have to POST json files.

XML notifications trough SOAP

If you use old XML format, new notifications can be inserted using SOAP request (described in the WSDL file generated by buildPortalWSDL tool).

Exemple d'insertion en Perl
#!/usr/bin/perl
 
use SOAP::Lite;
use utf8;
 
my $lite = SOAP::Lite
        ->uri('urn:Lemonldap::NG::Common::PSGI::SOAPService')
        ->proxy('http://auth.example.com/notifications');
 
 
$r = $lite->newNotification(
'
<root>
<notification uid="foo.bar" date="2009-01-27" reference="ABC">
<text> You have been granted to access to appli-1 </text>
<text> You have been granted to access to appli-2 </text>
<check> I know that I can acces to appli-1 </check>
<check> I know that I can acces to appli-2 </check>
</notification>
</root>
');
 
if ( $r->fault ) {
    print STDERR "SOAP Error: " . $r->fault->{faultstring};
}
else {
    my $res = $r->result();
    print "$res notification(s) have been inserted\n";
}

On peut également effacer certaines notifications avec SOAP, si SOAP est activé :

Exemple d'effacement en Perl

#!/usr/bin/perl
 
use SOAP::Lite;
use utf8;
 
my $lite = SOAP::Lite
        ->uri('urn:Lemonldap::NG::Common::CGI::SOAPService')
        ->proxy('http://auth.example.com/index.pl/notification');
 
 
$r = $lite->deleteNotification('foo.bar', 'ABC');
 
if ( $r->fault ) {
    print STDERR "SOAP Error: " . $r->fault->{faultstring};
}
else {
    my $res = $r->result();
    print "$res notification(s) have been deleted\n";
}

Tester les notifications

Il suffit d'insérer une notification et de se connecter au portail en utilisant le même UID. Le message sera affiché.

Essayer alors de créer une notification globale (à l'utilisateur “allusers”), et se connecter avec n'importe quel compte, le message sera affiché.