79 lines
2.6 KiB
PHP
79 lines
2.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Netig\Netslim\Identity\Application;
|
|
|
|
use Netig\Netslim\Identity\Domain\Entity\User;
|
|
use Netig\Netslim\Identity\Domain\Exception\WeakPasswordException;
|
|
use Netig\Netslim\Kernel\Support\Exception\NotFoundException;
|
|
|
|
/**
|
|
* Contrat du service d'authentification.
|
|
*
|
|
* Gère l'ouverture et la fermeture de session, la gestion du verrouillage par adresse IP
|
|
* et le changement de mot de passe de l'utilisateur authentifié.
|
|
*/
|
|
interface AuthServiceInterface
|
|
{
|
|
/**
|
|
* Retourne l'état du verrouillage de connexion pour une adresse IP.
|
|
*
|
|
* @return int Nombre de minutes restantes avant déverrouillage, ou `0` si l'IP peut tenter une connexion.
|
|
*/
|
|
public function checkRateLimit(string $ip): int;
|
|
|
|
/**
|
|
* Enregistre une tentative de connexion échouée pour une adresse IP.
|
|
*/
|
|
public function recordFailure(string $ip): void;
|
|
|
|
/**
|
|
* Réinitialise le compteur de tentatives de connexion pour une adresse IP.
|
|
*/
|
|
public function resetRateLimit(string $ip): void;
|
|
|
|
/**
|
|
* Retourne l'état du verrouillage de demande de réinitialisation pour une adresse IP.
|
|
*
|
|
* @return int Nombre de minutes restantes avant déverrouillage, ou `0` si l'IP peut faire une nouvelle demande.
|
|
*/
|
|
public function checkPasswordResetRateLimit(string $ip): int;
|
|
|
|
/**
|
|
* Enregistre une demande de réinitialisation pour une adresse IP.
|
|
*/
|
|
public function recordPasswordResetAttempt(string $ip): void;
|
|
|
|
/**
|
|
* Tente d'authentifier un utilisateur à partir de son identifiant et de son mot de passe.
|
|
*
|
|
* @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 du mot de passe actuel.
|
|
*
|
|
* @throws NotFoundException Si l'utilisateur n'existe pas.
|
|
* @throws \InvalidArgumentException Si le mot de passe actuel ne correspond pas.
|
|
* @throws WeakPasswordException Si le nouveau mot de passe ne respecte pas la politique minimale.
|
|
*/
|
|
public function changePassword(int $userId, string $currentPassword, string $newPassword): void;
|
|
|
|
/**
|
|
* Indique si une session authentifiée est actuellement active.
|
|
*/
|
|
public function isLoggedIn(): bool;
|
|
|
|
/**
|
|
* Ouvre une session pour l'utilisateur fourni.
|
|
*/
|
|
public function login(User $user): void;
|
|
|
|
/**
|
|
* Déconnecte l'utilisateur courant et détruit la session associée.
|
|
*/
|
|
public function logout(): void;
|
|
}
|