Plugins
Quel que soit son type, un plugin est toujours un dossier nommé ‘plugin_name’ contenant au moins les 4 fichiers suivants :
Code source du plugin
Hermes va essayer d’importer le fichier plugin_name.py. Il est possible de découper le code du plugin en plusieurs fichiers et dossiers, mais le plugin sera toujours importé à partir de ce fichier.
Pour plus de détails sur l’API du plugin, veuillez consulter les sections suivantes :
- Attributs
- Clients
- Sources de données
- Consommateurs de bus de messages
- Producteurs de bus de messages
Certains modules utilitaires sont disponibles dans helpers
:
helpers.command
: pour exécuter des commandes locales sur l’hôte du clienthelpers.ldaphashes
: pour générer les hachages LDAP à partir de mots de passe en clairhelpers.randompassword
: pour générer des mots de passe aléatoires avec des contraintes spécifiques
Schéma de configuration du plugin
Selon le type de plugin, le fichier de schéma de configuration varie légèrement.
Schéma de configuration du plugin pour les plugins clients
Hermes va essayer de valider la configuration du plugin avec un schéma de validation Cerberus spécifié dans un fichier YAML : config-schema-client-plugin_name.yml.
Le fichier de validation des plugins clients doit être vide ou ne contenir qu’une seule clé de premier niveau qui doit être le nom du plugin préfixé par hermes-client-
.
Exemple pour le nom du plugin usersgroups_flatfiles_emails_of_groups
:
# https://docs.python-cerberus.org/validation-rules.html
hermes-client-usersgroups_flatfiles_emails_of_groups:
type: dict
required: true
empty: false
schema:
destDir:
type: string
required: true
empty: false
onlyTheseGroups:
type: list
required: true
nullable: false
default: []
schema:
type: string
Schéma de configuration du plugin pour les autres types de plugins
Hermes va essayer de valider la configuration du plugin avec un schéma de validation Cerberus spécifié dans un fichier YAML : config-schema-plugin-plugin_name.yml.
Même si le plugin ne nécessite aucune configuration, il nécessite tout de même un fichier de validation vide.
Exemple pour le nom de plugin ldapPasswordHash
:
# https://docs.python-cerberus.org/validation-rules.html
default_hash_types:
type: list
required: false
nullable: false
empty: true
default: []
schema:
type: string
allowed:
- MD5
- SHA
- SMD5
- SSHA
- SSHA256
- SSHA512
Fichier README.md du plugin
La documentation doit être écrite dans README.md et doit contenir les sections suivantes :
# `plugin_name` attribute plugin
## Description
## Configuration
## Usage
Uniquement pour les plugins `attributes` et `datasources`.
## Datamodel
Uniquement pour les plugins `clients`.
Dépendances du plugin : requirements.txt
Même si le plugin n’a pas de dépendance Python, veuillez créer un fichier pip requirements.txt
commençant par un commentaire contenant le chemin du plugin et se terminant par une ligne vide.
Exemple :
# plugins/attributes/crypto_RSA_OAEP
pycryptodomex==3.21.0