Sécurité et données
Cette page décrit ce que le code fait, version 0.1.0, et elle a été relue contre le code. Si le plugin s'en écarte un jour, cette page change d'abord. Le code est public : github.com/AymerickVic/glpi-relance.
Où tournent les choses
Le plugin s'exécute dans votre GLPI. Il n'existe aucun serveur à nous qui reçoive vos tickets, ni en clair ni chiffrés. La connexion sortante du plugin va vers le fournisseur de modèle que vous avez choisi, avec votre clé. Si vous utilisez Ollama sur votre réseau, rien ne sort. Si vous saisissez une clé de licence, une seconde connexion, quotidienne, va vers notre serveur de licence : elle porte la clé, la version du plugin, celle de GLPI et un condensé de l'identifiant d'instance. Sans clé de licence, cette connexion n'existe pas.
Ce qui est envoyé au modèle
Le titre du ticket et sa description, tronquée à 2 000 caractères. Rien d'autre. Le nom du demandeur est remplacé par un jeton avant envoi. Les noms des techniciens n'apparaissent pas dans ces deux champs à la création d'un ticket ; ils ne sont pas pseudonymisés en plus, c'est noté pour une prochaine version.
Ce qui n'est jamais envoyé
Les pièces jointes, les suivis, les tâches, les champs du demandeur (nom, e-mail, téléphone, lieu, matricule), les champs personnalisés, l'historique. Les tickets des catégories que vous excluez dans la configuration (par exemple RH, paie, médical, accès) ne sont pas traités du tout ; l'exclusion porte sur la catégorie exacte, pas sur ses sous-catégories, listez-les. Les tickets datés de plus d'une heure à leur création (reprises, migrations) sont ignorés.
Masquage
Avant envoi, le plugin masque ce qui ressemble à un mot de passe (y compris « mon mot de passe est … »), un IBAN, un numéro de carte en quatre groupes, un numéro d'assurance sociale ou de sécurité sociale, une adresse e-mail, un numéro de téléphone. C'est du filtrage par motifs : il rate des choses, et il laisse volontairement passer les numéros de poste et d'inventaire, qui sont ce qu'on cherche. Ne comptez pas dessus pour un ticket qui contient un secret : excluez la catégorie.
Ce que le modèle écrit, et où ça va
Le modèle renvoie la liste de ce qui manque et une question. Cette question est écrite dans un suivi privé du ticket et conservée dans une table du plugin, dans votre base GLPI ; une fois envoyée ou ignorée, la ligne est supprimée au bout de 30 jours par l'action automatique de purge. Le texte vient d'un modèle à partir d'une description écrite par le demandeur : un demandeur malveillant pourrait tenter d'y glisser une consigne. C'est pour ça que rien ne part sans qu'un technicien ait lu et cliqué.
Fournisseurs possibles
OpenAI et Anthropic par leur API, avec votre contrat et votre clé, donc sous leurs engagements API (pas d'entraînement sur vos données, rétention selon votre contrat). Ou Ollama, local. Dans les faits, la plupart des équipes utiliseront une clé API : Ollama demande une machine avec un GPU, que peu de PME ont. Le plugin passe par le proxy configuré dans GLPI s'il y en a un.
La clé API
Stockée dans la base GLPI, chiffrée avec le mécanisme natif de GLPI (GLPIKey, clé de chiffrement hors du répertoire web). Lisible et modifiable par les profils qui ont le droit de modifier la configuration de GLPI ; le plugin n'a pas encore de droit propre. L'interface n'affiche que ses quatre derniers caractères. Les messages d'erreur du fournisseur sont nettoyés de tout ce qui ressemble à une clé avant d'être journalisés.
Journal
Horodatage, numéro de ticket, fournisseur, modèle, nombre de jetons, durée, code de réponse, nombre de masquages, résultat (relance ou rien). Conservé 90 jours, purgé par une action automatique. Jamais le texte envoyé ni la réponse du modèle. En cas d'échec définitif (trois essais, ou un seul si la clé est refusée), le message d'erreur du fournisseur, nettoyé, est gardé sur la ligne de file d'attente, affiché dans la page Diagnostic, et un bandeau le signale dans la configuration pendant 24 heures.
Droits demandés dans GLPI
L'installation crée un profil « Relance (robot) » avec exactement : lecture de tous les tickets ; lecture des suivis publics et privés ; ajout de suivis sur tout ticket. Rien d'autre. Un utilisateur technique « relance-robot » reçoit ce profil sur l'entité racine, récursif. Il n'a aucune source d'authentification, aucun mot de passe, et une date de fin de validité dans le passé : GLPI refuse sa connexion, y compris si un annuaire LDAP ou un SSO présentait un compte du même nom. Vous pouvez vérifier ces droits dans Administration > Profils.
Les boutons « Envoyer la relance au demandeur » et « Ignorer » ne sont affichés, et le formulaire n'est accepté, que pour un utilisateur de l'interface centrale qui a le droit d'ajouter un suivi sur tout ticket et le droit de modifier ce ticket. Un demandeur ne les voit pas sur son propre ticket.
Licence
Le code est sous GPLv3, comme GLPI l'impose. Les versions sont publiées sur GitHub, pour tout le monde. Une clé de licence, facultative, donne droit au support et au signalement des nouvelles versions dans la page de configuration. Sans clé, le plugin fonctionne entièrement et ne contacte aucun serveur tiers.
Pour votre dossier
Le dépôt contient une fiche de traitement pré-remplie et, pour le Québec, un modèle d'évaluation des facteurs relatifs à la vie privée (loi 25) à adapter avant d'activer un fournisseur hors Québec. Vous êtes responsable du traitement ; le fournisseur de modèle est votre sous-traitant via votre contrat. Nous ne touchons aucune donnée.
Désactivation
Mettre « Activer » à Non dans la configuration, ou désactiver le plugin, arrête tout. La désinstallation supprime les tables du plugin ; les suivis déjà écrits restent dans vos tickets, ce sont les vôtres. L'utilisateur technique est désactivé, pas supprimé, pour que les suivis gardent leur auteur.
Pas encore fait, et dit
Pseudonymisation des noms de techniciens, droit dédié dans les profils, bouton pour exclure un ticket à la main, prise en compte des pièces jointes. Notés pour les prochaines versions.