Sesame
  • Introduction
  • Installation

    • Installation rapide
    • Installation sesame-daemon
    • Installation import Taiga
    • Installation du frontal de gestion du mot de passe
    • Architecture de sécurité
  • Configuration

    • Architecture
    • Principe
    • Validation et description des données
    • Formulaire
    • Configuration de la politique de mot de passe
  • Importation

    • Import des données
    • Configuration de l'import
    • Import depuis taiga
  • Backends

    • Introduction
      • Workflow
      • Comunication avec le daemon
      • Structure d'un backend
        • Fichier config.yml
        • Les actions :
      • Exemple de script bash :
      • Exemple de backend 00dummy
    • Librairie d'aide Python
    • Backend AD
    • Backend LDAP
  • Utilisation de l'API

    • Les filtres de recherches pour l'API
    • récupération de la photo d'une identité
    • Exemples d'utilisation de l'API Sesame
  • Personalisation de l'UI

    • Personalisation des tuiles de la page d 'accueil'

Introduction

Les backends seront exécutés par sesame-daemon sur requete de sesame orchestrateur

Workflow

  • Une identité est passée au statut A SYNCHRONISER
  • Une action sur le bouton de lancement de la synchronisation va effectuer un déclenchement des backends
  • les Backends vont être executés dans l'ordre où il ont été mis dans le repertoire backends (var/lib/sesame-daemon/backend)
  • Le daemon enverra le resultat de l'execution à l'orchestrator
UI ---> API <--> Daemon <---> Backends 

Fonctionnement d'un backend

Un backend peut être écrit dans n'importe quel language, du moment que celui-ci sait gérer les entrées et sorties standard.

Comunication avec le daemon

Le daemon enverra sur l'entrée standard du backend au format JSON l'identité concernée :

Exemple :

{
  "concernedTo": "66c22991bdc3c9a7563a9d4f",
  "payload": {
    "identity": {
      "action": "IDENTITY_UPDATE",
      "identity": {
        "_id": "66c22991bdc3c9a7563a9d4f",
        "metadata": {
          "createdBy": "admin",
          "createdAt": "2024-08-18T17:04:17.757Z",
          "lastUpdatedBy": "admin",
          "lastUpdatedAt": "2024-08-20T09:45:57.596Z"
        },
        "state": 2,
        "lifecycle": -1,
        "inetOrgPerson": {
          "cn": "DUPONT Alain",
          "displayName": "Alain Dupont",
          "facsimileTelephoneNumber": "",
          "givenName": "Alain",
          "labeledURI": "",
          "mail": "ad@lmondomaine.com",
          "mobile": "06 07 08 09 10",
          "postalAddress": "",
          "preferredLanguage": "",
          "sn": "DUPONT",
          "telephoneNumber": "",
          "title": "",
          "uid": "aabbas",
          "employeeNumber": "111111",
          "employeeType": "TAIGA",
          "departmentNumber": "",
          "jpegPhoto": "",
          "userCertificate": "",
          "userPassword": ""
        },
        "additionalFields": {
          "objectClasses": [
            "supannPerson"
          ],
          "attributes": {
            "supannPerson": {
              "supanncivilite": "M.",
              "supannOIDCGenre": "M.",
              "supannPrenomsEtatCivil": "Alain",
              "supannAutreMail": "ad@monmailpriver.com",
              "supannNomdeNaissance": "",
              "supannOIDCDatedeNaissance": "",
              "supannCodeINSEEPaysDeNaissance": "",
              "supannCodeINSEEVilleDeNaissance": "",
              "supannListeRouge": "",
              "mailForwardingAddress": "",
              "supannMailPerso": "",
              "supannRoleGenerique": "",
              "supannEmpId": 0,
              "supannParrainDN": "",
              "supannTypeEntiteAffectation": "",
              "supannActivite": "",
              "supannEmpDateFin": "",
              "supannEtablissement": ""
            }
          }
        },
        "initState": 0,
        "fingerprint": "b65c62b466b0c401398c9da3ca489a880befc38f049e6dfacb48eded011eff11"
      }
    }
  }
}

Le backend traitera la demande et renverra sur sa sortie standard le resultat au format JSON avec 2 clés :

  • status : 0 OK autre que 0 probleme
  • message : le message pour le journal de sesame

Exemple :

{"status": 0, "message": "server alive"}

Structure d'un backend

chaque backend a un espace dans /var/lib/sesame-daemon/backend

XXmonbackend 
	config.yml
	bin
	   script1
	   script2
	   ...
	

Ceci est la structure minimum. Le daemon excutera le script concerné en se deplaçant dans bin

Vous pouvez ajouter dans cette arborescense ce que vous avez besoin (etc, lib ...)

Fichier config.yml

Ce fichier renseigne le daemon du script à executer selon l'action demandée. Le script doit avoir le droit d'execution.

Ce fichier se compose d'une entete et des actions :

_version: 1

name: 'dummy'
description: 'Dummy backend for tests'
active: true
actions:
  IDENTITY_PASSWORD_CHANGE:
    script: "dummy.sh"
    onError: 'stop'
  IDENTITY_PASSWORD_RESET:
    script: "dummy.sh"
    onError: 'stop'
  IDENTITY_CREATE:
    script: 'dummy.sh'
    onError: 'stop'
  IDENTITY_UPDATE:
    script: 'dummy.sh'
    onError: 'stop'
  IDENTITY_DELETE:
    script: 'dummy.sh'
    onError: 'stop'
  PING_TARGET:
    script: 'dummy.sh'
    onError: 'continue'

Les actions :

  • IDENTITY_PASSWORD_CHANGE : est appellé lors du changement du mot de passe.
  • IDENTITY_PASSWORD_RESET : est appellé pour un RESET du mot de passe.
  • IDENTITY_CREATE : Non utilisé pour l instant
  • IDENTITY_UPDATE : Appelé lors de la creation ou modification d'une identité
  • IDENTITY_DELETE : Appelé lors de la suppression d'une identité
  • IDENTITY_ENABLE : Appelé lors de l'activation d'une identité
  • IDENTITY_DISABLE : Appelé lors de desactivation d'une identité
  • PING_TARGET : appellé pour la verification du backend

Paramètres :

  • script : Nom du script (dans bin) qui doit être appellé sur l'action concernée
  • onError : continue | stop Permet d'indiquer en cas d'erreur si le daemon doit continuer ou abandonner

Exemple de script bash :

Cet exemple écrit juste le contenu du json reçu sur l'entrée standard dans un fichier :

#!/bin/sh
JSON=`cat -`
sleep 1
echo $JSON >/tmp/dummy.json
echo "{\"status\": 0, \"message\": \"dummy upsertbackend backend\"}"
exit 0

Exemple de backend 00dummy

00dummy
.
./bin
./bin/dummy.sh
./config.yml

Debuggage d'un backend

Il est conseillé de mettre me un backend dummy (voir l exemple) pour avoir l'entrée json. Dans l exemple il creera un fichier /tmp/dummy.json pour l'insertion et la modification

cd /var/lib/sesame-daemon/backends/01xx/bin
cat /tmp/dummy.json|./upsertidentity.py
Last Updated:
Contributors: Alain Abbas
Next
Librairie d'aide Python