kemal_auth
= kemal_auth :toc: left :toclevels: 2 :source-highlighter: rouge
Bibliothèque d'authentification Crystal pour les applications Gaya.
== Fonctionnalités
[cols="1,3"] |=== | Module | Description
| KemalAuth::Password | Hachage et validation BCrypt des mots de passe
| KemalAuth::Token | Génération et vérification de tokens JWT
| KemalAuth::Session | Gestion des sessions via cookies HTTP (Kemal)
| KemalAuth::SmtpConfig | Configuration du serveur SMTP (paramétrable)
| KemalAuth::PasswordReset | Récupération de mot de passe par courriel
| KemalAuth::UserManager | Gestion des utilisateurs administrateurs |===
== Installation
Ajouter dans votre shard.yml :
[source,yaml]
dependencies: kemal_auth: github: aloli/kemal_auth branch: developpement
Puis exécuter :
[source,bash]
shards install
== Configuration SMTP
La configuration SMTP peut être fournie de trois manières, par ordre de priorité :
=== 1. A l'instanciation (priorité maximale)
[source,crystal]
smtp = KemalAuth::SmtpConfig.new( host: "smtp.example.com", port: 587, username: "user@example.com", password: "secret", from_address: "noreply@gaya.fr", from_name: "La Table de Gaya", use_starttls: true )
=== 2. Depuis un Hash (ex. : base de données)
[source,crystal]
smtp = KemalAuth::SmtpConfig.from_hash({ "smtp_host" => "smtp.example.com", "smtp_port" => "587", "smtp_username" => "user@example.com", "smtp_password" => "secret", "smtp_from_address" => "noreply@gaya.fr", "smtp_from_name" => "La Table de Gaya" })
=== 3. Via variables d'environnement (valeurs par défaut)
[cols="1,2,1"] |=== | Variable | Description | Défaut
| SMTP_HOST | Hôte du serveur SMTP | localhost
| SMTP_PORT | Port SMTP | 587
| SMTP_USERNAME | Nom d'utilisateur | (vide)
| SMTP_PASSWORD | Mot de passe | (vide)
| SMTP_FROM_ADDRESS | Adresse d'expédition | noreply@leschampsdegaya.com
| SMTP_FROM_NAME | Nom d'expéditeur | La Table de Gaya
| SMTP_TLS | Activer TLS/SMTPS | false
| SMTP_STARTTLS | Activer STARTTLS | true |===
== Utilisation
=== Gestion des mots de passe
[source,crystal]
require "kemal_auth"
hash = KemalAuth::Password.hash("MonMotDePasse1") KemalAuth::Password.verify("MonMotDePasse1", hash) # => true errors = KemalAuth::Password.validate("faible")
=== Tokens JWT
[source,crystal]
token = KemalAuth::Token.generate( secret: ENV["SESSION_SECRET"], sub: "1", email: "admin@gaya.fr", role: "admin" ) payload = KemalAuth::Token.decode(token, ENV["SESSION_SECRET"])
=== Récupération de mot de passe
[source,crystal]
smtp = KemalAuth::SmtpConfig.new(host: "smtp.example.com", ...) result = KemalAuth::PasswordReset.send_reset_email( email: "admin@gaya.fr", reset_url: "https://app.gaya.fr/admin/reset-password", secret: ENV["SESSION_SECRET"], smtp: smtp )
=== Gestion des utilisateurs
[source,crystal]
errors = KemalAuth::UserManager.validate_user( email: "nouveau@gaya.fr", nom: "Martin", prenom: "Sophie", role: "gestionnaire" ) KemalAuth::UserManager.send_invitation_email( email: "nouveau@gaya.fr", prenom: "Sophie", invitation_url: "https://app.gaya.fr/admin/set-password", secret: ENV["SESSION_SECRET"], smtp: smtp ) temp_pwd = KemalAuth::UserManager.generate_temp_password
== Tests
[source,bash]
crystal spec
52 exemples couvrant tous les modules.
== Licence
MIT
kemal_auth
- 0
- 0
- 0
- 0
- 3
- about 5 hours ago
- February 23, 2026
MIT License
Mon, 09 Mar 2026 18:31:08 GMT