first commit
This commit is contained in:
84
src/Auth/AuthServiceInterface.php
Normal file
84
src/Auth/AuthServiceInterface.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Auth;
|
||||
|
||||
use App\Shared\Exception\NotFoundException;
|
||||
use App\User\Exception\WeakPasswordException;
|
||||
use App\User\User;
|
||||
|
||||
/**
|
||||
* Contrat du service d'authentification.
|
||||
*
|
||||
* Permet de mocker le service dans les tests unitaires sans dépendre
|
||||
* de la classe concrète finale AuthService.
|
||||
*/
|
||||
interface AuthServiceInterface
|
||||
{
|
||||
/**
|
||||
* Vérifie si l'adresse IP est actuellement verrouillée par le rate limiter.
|
||||
*
|
||||
* @param string $ip Adresse IP du client
|
||||
*
|
||||
* @return int 0 si libre, nombre de minutes restantes si verrouillé
|
||||
*/
|
||||
public function checkRateLimit(string $ip): int;
|
||||
|
||||
/**
|
||||
* Enregistre une tentative de connexion échouée pour une IP.
|
||||
*
|
||||
* @param string $ip Adresse IP du client
|
||||
*/
|
||||
public function recordFailure(string $ip): void;
|
||||
|
||||
/**
|
||||
* Réinitialise le compteur de tentatives pour une IP.
|
||||
*
|
||||
* @param string $ip Adresse IP du client
|
||||
* @return void
|
||||
*/
|
||||
public function resetRateLimit(string $ip): void;
|
||||
|
||||
/**
|
||||
* Tente d'authentifier un utilisateur par ses identifiants.
|
||||
*
|
||||
* @param string $username Nom d'utilisateur (insensible à la casse)
|
||||
* @param string $plainPassword Mot de passe en clair
|
||||
*
|
||||
* @return User|null L'utilisateur authentifié, ou null si les identifiants sont invalides
|
||||
*/
|
||||
public function authenticate(string $username, string $plainPassword): ?User;
|
||||
|
||||
/**
|
||||
* Change le mot de passe d'un utilisateur après vérification de l'actuel.
|
||||
*
|
||||
* @param int $userId Identifiant de l'utilisateur
|
||||
* @param string $currentPassword Mot de passe actuel en clair (pour vérification)
|
||||
* @param string $newPassword Nouveau mot de passe en clair (min. 8 caractères)
|
||||
*
|
||||
* @throws NotFoundException Si l'utilisateur est introuvable
|
||||
* @throws \InvalidArgumentException Si le mot de passe actuel est incorrect
|
||||
* @throws WeakPasswordException Si le nouveau mot de passe est trop court
|
||||
*/
|
||||
public function changePassword(int $userId, string $currentPassword, string $newPassword): void;
|
||||
|
||||
/**
|
||||
* Vérifie si une session utilisateur est active.
|
||||
*
|
||||
* @return bool True si une session utilisateur est active
|
||||
*/
|
||||
public function isLoggedIn(): bool;
|
||||
|
||||
/**
|
||||
* Ouvre une session pour l'utilisateur donné.
|
||||
*
|
||||
* @param User $user L'utilisateur à connecter
|
||||
*/
|
||||
public function login(User $user): void;
|
||||
|
||||
/**
|
||||
* Détruit la session utilisateur courante.
|
||||
* @return void
|
||||
*/
|
||||
public function logout(): void;
|
||||
}
|
||||
Reference in New Issue
Block a user