aloli-cr-auth

Shard Crystal d'authentification pour les applications Gaya (JWT + BCrypt + sessions Kemal)

aloli-cr-auth

Bibliothèque d'authentification Crystal pour les applications Gaya.

Fonctionnalités

Module Description
AloliCrAuth::Password Hachage et validation BCrypt des mots de passe
AloliCrAuth::Token Génération et vérification de tokens JWT
AloliCrAuth::Session Gestion des sessions via cookies HTTP (Kemal)
AloliCrAuth::SmtpConfig Configuration du serveur SMTP (paramétrable)
AloliCrAuth::PasswordReset Récupération de mot de passe par courriel
AloliCrAuth::UserManager Gestion des utilisateurs administrateurs

Installation

Ajouter dans votre shard.yml :

dependencies:
  aloli_cr_auth:
    github: aloli/aloli-cr-auth
    branch: developpement

Puis exécuter :

shards install

Configuration SMTP

La configuration SMTP peut être fournie de trois manières, par ordre de priorité :

1. A l'instanciation (priorité maximale) :

smtp = AloliCrAuth::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) :

smtp = AloliCrAuth::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) :

Variable Description Defaut
SMTP_HOST Hote 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'expedition noreply@leschampsdegaya.com
SMTP_FROM_NAME Nom d'expediteur La Table de Gaya
SMTP_TLS Activer TLS/SMTPS false
SMTP_STARTTLS Activer STARTTLS true

Utilisation

Gestion des mots de passe

require "aloli_cr_auth"

hash = AloliCrAuth::Password.hash("MonMotDePasse1")
AloliCrAuth::Password.verify("MonMotDePasse1", hash) # => true
errors = AloliCrAuth::Password.validate("faible")

Tokens JWT

token = AloliCrAuth::Token.generate(
  secret: ENV["SESSION_SECRET"],
  sub: "1",
  email: "admin@gaya.fr",
  role: "admin"
)
payload = AloliCrAuth::Token.decode(token, ENV["SESSION_SECRET"])

Recuperation de mot de passe

smtp = AloliCrAuth::SmtpConfig.new(host: "smtp.example.com", ...)
result = AloliCrAuth::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

errors = AloliCrAuth::UserManager.validate_user(
  email: "nouveau@gaya.fr", nom: "Martin", prenom: "Sophie", role: "gestionnaire"
)
AloliCrAuth::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 = AloliCrAuth::UserManager.generate_temp_password

Tests

crystal spec

52 exemples couvrant tous les modules.

Licence

MIT

Repository

aloli-cr-auth

Owner
Statistic
  • 0
  • 0
  • 0
  • 0
  • 3
  • about 4 hours ago
  • February 23, 2026
License

MIT License

Links
Synced at

Tue, 24 Feb 2026 14:15:12 GMT

Languages