/**
* This file is part of Sesatheque.
* Copyright 2014-2015, Association Sésamath
*
* Sesatheque is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3
* as published by the Free Software Foundation.
*
* Sesatheque is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Sesatheque (LICENCE.txt).
* @see http://www.gnu.org/licenses/agpl.txt
*
*
* Ce fichier fait partie de l'application Sésathèque, créée par l'association Sésamath.
*
* Sésathèque est un logiciel libre ; vous pouvez le redistribuer ou le modifier suivant
* les termes de la GNU Affero General Public License version 3 telle que publiée par la
* Free Software Foundation.
* Sésathèque est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ;
* sans même la garantie tacite de QUALITÉ MARCHANDE ou d'ADÉQUATION à UN BUT PARTICULIER.
* Consultez la GNU Affero General Public License pour plus de détails.
* Vous devez avoir reçu une copie de la GNU General Public License en même temps que Sésathèque
* (cf LICENCE.txt et http://vvlibri.org/fr/Analyse/gnu-affero-general-public-license-v3-analyse
* pour une explication en français)
*/
'use strict'
/**
* Exemple de configuration, à fusionner à la conf d'un sesalab ou d'une sesathèque
* À priori sesalab est serveur d'authentification et les Sésathèque clientes,
* mais une Sésathèque pourrait être serveur d'authentification pour d'autres, sans sesalab.
*/
module.exports = {
application: {
// …
},
components: {
// conf des autres composants
sesalabSso: {
prefix: 'sesalabSso',
// //////////////////////////////////////////
// Si on est un serveur d'authentification
// //////////////////////////////////////////
clients: [
{
name: 'Nom affiché à l’utilisateur à la déconnexion',
baseUrl: 'http://domaine.tld/',
prefix: 'sesalabSso',
// facultatif, si non fourni on vérifiera que l'ip correspond à baseUrl
// peut être une ip (v4 ou v6, celle du client qui rappellera notre validate)
// ou une RegExp
// ou une fct (qui doit renvoyer un booléen en reçevant une ip)
ip: ''
}
],
// url de retour ici après propagation sur tous les clients
afterClientsPage: '/',
// url de retour ici après un pb sur un client (avec un message explicite dans ?error=)
errorPage: 'chemin/local/pour/afficher/une/erreur',
// @todo affiche le formulaire de login pour un client qui réclame une authentification
// il faudra rediriger vers l'url qu'il demande en retour et le stocker comme client authentifié
loginPage: 'todo',
// @todo affiche la liste des déconnexions des clients (fait les appels en ajax)
logoutPage: 'todo',
// //////////////////
// Si on est client
// //////////////////
// on indique une liste de serveurs d'authentification
// - que l'on pourra appeler pour s'authentifier
// - qui pourront nous propager des login utilisateurs
authServers: [
{
// facultatif, un nom à afficher sur le client (sinon sera le domaine de baseUrl)
name: '',
// url absolue avec / de fin
baseUrl: '',
// un préfixe d'url, facultatif
prefix: 'sesalabSso',
// pour demander un login, form d'authentification
loginPage: '',
// pour demander un logout, page qui fera toutes les déconnexions en ajax et affichera le résultat
logoutPage: '',
errorPage: '',
// si non fourni on vérifiera que l'ip correspond à baseUrl
// peut être une ip (v4 ou v6, celle du client qui rappellera notre validate)
// ou une RegExp
// ou une fct (qui doit renvoyer un booléen en reçevant une ip)
ip: ''
}
],
// Client : une callback pour loguer un user ici, cette fonction sera appelée après un validate réussi,
// le user est envoyé par le serveur d'authentification et mis au format User
// s'il est impossible de fournir la callback ici (car services pas encore dispo dans cette config)
// utiliser $sesalabSsoClient.setLoginCallback plus tard
// loginCallback: function (context, user, next) { /* … */ },
// Client : callback appelée par le controleur logout (qui répond en json à de l'ajax)
logoutCallback: function (context, next) {
// on vire le user en session et on appelle next, avec une éventuelle erreur en cas de pb
let error
if (context.session.user) context.session.user = null
else error = new Error('Aucun utilisateur connecté')
next(error)
},
// facultatif, timeout d'appel du validate
timeout: 10
}
}
}
/**
* @typedef {Object} AuthServerDef
* @property {string} baseUrl url absolue avec / de fin
* @property {string} [prefix=sesalabSso] Chemin dédié aux routes du module sesalabSso
* @property {string} loginPage url du form d'authentification
* @property {string} logoutPage page qui fera toutes les déconnexions en ajax et affichera le résultat
* @property {string} errorPage page qui affichera une erreur
* @property {string|RegExp|function} [ip] ip qui répond au validate
* peut être une ip (v4 ou v6)
* ou une RegExp
* ou une fct (qui doit renvoyer un booléen en reçevant une ip)
*/
/**
* @typedef {Object} ClientDef
* @property {string} baseUrl url absolue avec / de fin
* @property {string} [prefix=sesalabSso] Chemin dédié aux routes du module sesalabSso
* @property {string|RegExp|function} [ip] ip qui appellera le validate
* peut être une ip (v4 ou v6)
* ou une RegExp
* ou une fct (qui doit renvoyer un booléen en reçevant une ip)
*/
/**
* La configuration à passer au composant
* @typedef {Object} sesalabSsoConfigDef
* @property {number} [timeout=10] Timeout des appels du validate (en s), pour un usage client
* @property {string} [prefix=sesalabSso] Préfixe des routes de ce module (client et serveur)
* @property {ClientDef[]} clients La liste des applis clientes (donc on est serveur)
* @property {string} afterClientsPage Page vers laquelle rediriger une fois connecté chez tous les clients (serveur)
* @property {string} errorPage Page d'affichage d'erreur (serveur)
* @property {string} loginPage Page du formulaire de login (serveur)
* @property {string} logoutPage Page qui fera les appels ajax de déconnexion chez tous les clients (serveur)
* @property {AuthServerDef[]} authServers La liste des serveurs d'authentification (donc on est client)
* @property {function} loginCallback Logue un user localement (client),
* appelée avec (context, user, next), doit rappeler next(errror)
* @property {function} logoutCallback Déconnecte le user courant (client), appelée avec (context, next), doit rappeler next(errror)
*/