@dbeauyat/user-accounts-utils
v1.0.21
Published
Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.
Readme
@dbeauyat/user-accounts-utils
Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.
Installation
npm install @dbeauyat/[email protected]Configuration
Le module charge automatiquement config.json5 au démarrage. Les paramètres principaux :
| Paramètre | Type | Description | Défaut |
|-----------|------|-------------|--------|
| DBs.redis.host | string | Host Redis | 127.0.0.1 |
| DBs.redis.port | number | Port Redis | 6379 |
| DBs.redis.username | string | Username Redis | default |
| DBs.redis.password | string | Password Redis | `` |
| usersKeyPrefix | string | Préfixe des clés Redis | 'uau:users' (config) / 'sigsdid:ba:users' (fallback code) |
Note : les paramètres MQTT (
brokerUrl,listenTopic,qos,clientId) sont présents dansconfig.json5mais ne sont pas utilisés par ce module.
Usage
import {
createUser, createUserTemp, retrieveUser, verifyPassword,
updateUser, updatePassword, deleteUser,
enableUser, disableUser, setScope,
setResetPasswordCode, getResetPasswordCode, deleteResetPasswordCode,
createUserWithScope, createUserTempWithScope,
retrieveUserWithScope, verifyPasswordWithScope,
updateUserWithScope, updatePasswordWithScope,
deleteUserWithScope, enableUserWithScope, disableUserWithScope,
setResetPasswordCodeWithScope, getResetPasswordCodeWithScope, deleteResetPasswordCodeWithScope
} from '@dbeauyat/user-accounts-utils';
// Créer un utilisateur
await createUser('alice', 'motdepasse', 'Alice Dupont');
// Créer un utilisateur avec scope
await createUserWithScope('uau:users', 'alice', 'motdepasse', 'Alice Dupont');
// Récupérer un utilisateur
const user = await retrieveUser('alice');
// Récupérer un utilisateur avec scope
const userWithScope = await retrieveUserWithScope('uau:users', 'alice');
// Vérifier un mot de passe
const valid = await verifyPassword('alice', 'motdepasse');
// Vérifier un mot de passe avec scope
const validWithScope = await verifyPasswordWithScope('uau:users', 'alice', 'motdepasse');
// Modifier un champ
await updateUser('alice', { nom: 'Alice Martin' });
// Modifier un champ avec scope
await updateUserWithScope('uau:users', 'alice', { nom: 'Alice Martin' });
// Changer le mot de passe
await updatePassword('alice', 'nouveaumotdepasse');
// Changer le mot de passe avec scope
await updatePasswordWithScope('uau:users', 'alice', 'nouveaumotdepasse');
// Supprimer un utilisateur
await deleteUser('alice');
// Supprimer un utilisateur avec scope
await deleteUserWithScope('uau:users', 'alice');
// Activer / désactiver
await enableUser('alice');
await disableUser('alice');
// Activer / désactiver avec scope
await enableUserWithScope('uau:users', 'alice');
await disableUserWithScope('uau:users', 'alice');
// Modifier dynamiquement le préfixe Redis (applicable aux opérations suivantes)
setScope('uau:users2');API
createUserTemp(ttlMinutes = 1)
Crée un utilisateur temporaire dans Redis. Un username unique est généré avec le préfixe isc-tu-, suivi d'un password haché avec Argon2 et d'un credentials base64 stockés dans une clé avec TTL.
| Paramètre | Type | Description |
|-----------|------|-------------|
| ttlMinutes | number | Durée de vie en minutes. Par défaut : 1. Entier décimal entre 1 et 120. |
Stocke en Redis :
JSON.SETavecNX(anti-clobber) sur${usersKeyPrefix}:${generatedUsername}EXPIREsur la clé avec le TTL en secondes
Retourne { success: true, credentials } (base64 de <username>:<password>). En cas d'échec répété (max 5 tentatives), retourne { success: false, reason: 'SERVICE_BUSY_RETRY_LATER' }. En cas de valeur invalide, retourne { success: false, reason: 'INVALID_TTL_MINUTES' }.
createUser(username, password, fullname)
Crée un nouvel utilisateur. Le mot de passe est haché avec Argon2. Protection anti-surcharge : si l'utilisateur existe déjà, la fonction retourne { success: false, reason: 'USER_ALREADY_EXISTS' } au lieu de surécrire le compte existant.
| Paramètre | Type | Description |
|-----------|------|-------------|
| username | string | Nom d'utilisateur unique |
| password | string | Mot de passe (haché automatiquement) |
| fullname | string | Nom complet |
Retourne { success: true, username } en cas de succès, ou { success: false, reason: 'USER_ALREADY_EXISTS' } si le compte existe déjà.
retrieveUser(username)
Récupère les informations d'un utilisateur. Vérification enabled : si l'utilisateur n'existe pas ou est désactivé, la fonction renvoie null.
| Paramètre | Type | Description |
|-----------|------|-------------|
| username | string | Nom d'utilisateur |
Retourne un objet utilisateur (avec champs enabled, nom, password) ou null si l'utilisateur n'existe pas ou est désactivé.
verifyPassword(username, password)
Vérifie qu'un mot de passe correspond au hachage stocké. Vérification enabled : la fonction vérifie que l'utilisateur est activé avant de comparer les mots de passe.
| Paramètre | Type | Description |
|-----------|------|-------------|
| username | string | Nom d'utilisateur |
| password | string | Mot de passe à vérifier |
Retourne { valid: true } si le mot de passe correspond, ou :
{ valid: false, reason: 'USER_NOT_FOUND' }si l'utilisateur n'existe pas{ valid: false, reason: 'USER_NOT_ENABLED' }si l'utilisateur existe mais est désactivé (cas échéant){ valid: false, reason: 'WRONG_PASSWORD' }si le mot de passe ne correspond pas au hachage stocké
updateUser(username, updates)
Met à jour un champ ou plusieurs champs d'un utilisateur.
| Paramètre | Type | Description |
|-----------|------|-------------|
| username | string | Nom d'utilisateur |
| updates | object | Objet clé-valeur des champs à mettre à jour (ex: { nom: '...' }) |
Retourne { success: true }.
updatePassword(username, newPassword)
Change le mot de passe d'un utilisateur. Le nouveau mot de passe est haché avec Argon2.
| Paramètre | Type | Description |
|-----------|------|-------------|
| username | string | Nom d'utilisateur |
| newPassword | string | Nouveau mot de passe |
Retourne { success: true }.
deleteUser(username)
Supprime un utilisateur.
| Paramètre | Type | Description |
|-----------|------|-------------|
| username | string | Nom d'utilisateur à supprimer |
Retourne { success: true }.
enableUser(username) / disableUser(username)
Active ou désactive un utilisateur.
| Paramètre | Type | Description |
|-----------|------|-------------|
| username | string | Nom d'utilisateur |
Retourne { success: true }.
setScope(prefix)
Modifie dynamiquement le préfixe des clés Redis utilisées par toutes les opérations suivantes (createUser, retrieveUser, etc.).
| Paramètre | Type | Description |
|-----------|------|-------------|
| prefix | string | Nouveau préfixe (ex: 'uau:users2') |
setResetPasswordCode(username, code, ttlMinutes = 15)
Définit un code de réinitialisation de mot de passe pour un utilisateur. Le code est stocké dans Redis avec un TTL.
| Paramètre | Type | Description |
|-----------|------|-------------|
| username | string | Nom d'utilisateur |
| code | string | Code de réinitialisation |
| ttlMinutes | number | Durée de vie en minutes. Par défaut : 15. |
Retourne { success: true }.
getResetPasswordCode(username)
Récupère le code de réinitialisation de mot de passe d'un utilisateur.
| Paramètre | Type | Description |
|-----------|------|-------------|
| username | string | Nom d'utilisateur |
Retourne le code de réinitialisation ou null si aucun code n'est défini.
deleteResetPasswordCode(username)
Supprime le code de réinitialisation de mot de passe d'un utilisateur.
| Paramètre | Type | Description |
|-----------|------|-------------|
| username | string | Nom d'utilisateur |
Retourne { success: true }.
createUserWithScope(scope, username, password, fullname, enabled)
Crée un nouvel utilisateur avec un scope personnalisé. Le scope détermine le préfixe de la clé Redis.
| Paramètre | Type | Description |
|-----------|------|-------------|
| scope | string | Scope (ex: 'uau:users') |
| username | string | Nom d'utilisateur unique |
| password | string | Mot de passe (haché automatiquement) |
| fullname | string | Nom complet |
| enabled | boolean | Si l'utilisateur est activé |
Retourne { success: true, username } en cas de succès, ou { success: false, reason: 'USER_ALREADY_EXISTS' } si le compte existe déjà.
createUserTempWithScope(scope, ttlMinutes = 1)
Crée un utilisateur temporaire avec un scope personnalisé. Le password est haché avec Argon2 avant stockage.
| Paramètre | Type | Description |
|-----------|------|-------------|
| scope | string | Scope (ex: 'uau:users') |
| ttlMinutes | number | Durée de vie en minutes. Par défaut : 1. Entier décimal entre 1 et 120. |
retrieveUserWithScope(scope, username)
Récupère les informations d'un utilisateur avec un scope personnalisé.
| Paramètre | Type | Description |
|-----------|------|-------------|
| scope | string | Scope (ex: 'uau:users') |
| username | string | Nom d'utilisateur |
Retourne un objet utilisateur ou null si l'utilisateur n'existe pas ou est désactivé.
verifyPasswordWithScope(scope, username, password)
Vérifie qu'un mot de passe correspond au hachage stocké avec un scope personnalisé.
| Paramètre | Type | Description |
|-----------|------|-------------|
| scope | string | Scope (ex: 'uau:users') |
| username | string | Nom d'utilisateur |
| password | string | Mot de passe à vérifier |
Retourne { valid: true } si le mot de passe correspond, ou { valid: false, reason: '...' } en cas d'erreur.
updateUserWithScope(scope, username, updates)
Met à jour un champ ou plusieurs champs d'un utilisateur avec un scope personnalisé.
| Paramètre | Type | Description |
|-----------|------|-------------|
| scope | string | Scope (ex: 'uau:users') |
| username | string | Nom d'utilisateur |
| updates | object | Objet clé-valeur des champs à mettre à jour |
Retourne { success: true }.
updatePasswordWithScope(scope, username, newPassword)
Change le mot de passe d'un utilisateur avec un scope personnalisé.
| Paramètre | Type | Description |
|-----------|------|-------------|
| scope | string | Scope (ex: 'uau:users') |
| username | string | Nom d'utilisateur |
| newPassword | string | Nouveau mot de passe |
Retourne { success: true }.
deleteUserWithScope(scope, username)
Supprime un utilisateur avec un scope personnalisé.
| Paramètre | Type | Description |
|-----------|------|-------------|
| scope | string | Scope (ex: 'uau:users') |
| username | string | Nom d'utilisateur à supprimer |
Retourne { success: true }.
enableUserWithScope(scope, username) / disableUserWithScope(scope, username)
Active ou désactive un utilisateur avec un scope personnalisé.
| Paramètre | Type | Description |
|-----------|------|-------------|
| scope | string | Scope (ex: 'uau:users') |
| username | string | Nom d'utilisateur |
Retourne { success: true }.
setResetPasswordCodeWithScope(scope, username, code, ttlMinutes = 15)
Définit un code de réinitialisation de mot de passe avec un scope personnalisé.
| Paramètre | Type | Description |
|-----------|------|-------------|
| scope | string | Scope (ex: 'uau:users') |
| username | string | Nom d'utilisateur |
| code | string | Code de réinitialisation |
| ttlMinutes | number | Durée de vie en minutes. Par défaut : 15. |
Retourne { success: true }.
getResetPasswordCodeWithScope(scope, username)
Récupère le code de réinitialisation de mot de passe avec un scope personnalisé.
| Paramètre | Type | Description |
|-----------|------|-------------|
| scope | string | Scope (ex: 'uau:users') |
| username | string | Nom d'utilisateur |
Retourne le code de réinitialisation ou null si aucun code n'est défini.
deleteResetPasswordCodeWithScope(scope, username)
Supprime le code de réinitialisation de mot de passe avec un scope personnalisé.
| Paramètre | Type | Description |
|-----------|------|-------------|
| scope | string | Scope (ex: 'uau:users') |
| username | string | Nom d'utilisateur |
Retourne { success: true }.
Stockage
Les données sont stockées dans Redis au format JSON sous la clé <premier>:<username>, où <prémier> est défini par le paramètre usersKeyPrefix de config.json5 (défaut : 'uau:users'). Si ce paramètre n'est pas défini, le fallback code utilise 'sigsdid:ba:users'.
Exemple : uau:users:alice.
Licence
ISC
