53 lines
1.6 KiB
PHP
53 lines
1.6 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Service\Generator;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Class TempPasswordGenerator
|
||
|
|
*
|
||
|
|
* Fournit des fonctionnalités pour générer des mots de passe temporaires sécurisés.
|
||
|
|
*/
|
||
|
|
class TempPasswordGenerator
|
||
|
|
{
|
||
|
|
private const DEFAULT_LENGTH = 12;
|
||
|
|
private const DEFAULT_CHARACTERS = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-_=+[]{}|;:,.<>?';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Génère un mot de passe temporaire aléatoire.
|
||
|
|
*
|
||
|
|
* @param int $length Longueur désirée du mot de passe (par défaut 12).
|
||
|
|
* @param string $characters Jeu de caractères à utiliser dans le mot de passe.
|
||
|
|
* @return string Mot de passe généré.
|
||
|
|
*/
|
||
|
|
public static function generate(int $length = self::DEFAULT_LENGTH, string $characters = self::DEFAULT_CHARACTERS): string
|
||
|
|
{
|
||
|
|
if ($length <= 0) {
|
||
|
|
$length = self::DEFAULT_LENGTH;
|
||
|
|
}
|
||
|
|
|
||
|
|
$password = '';
|
||
|
|
$maxIndex = strlen($characters) - 1;
|
||
|
|
|
||
|
|
for ($i = 0; $i < $length; $i++) {
|
||
|
|
$password .= $characters[random_int(0, $maxIndex)];
|
||
|
|
}
|
||
|
|
|
||
|
|
return $password;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Vérifie si un mot de passe remplit certaines exigences de complexité.
|
||
|
|
*
|
||
|
|
* @param string $password Mot de passe à vérifier.
|
||
|
|
* @return bool True si les critères sont respectés, false sinon.
|
||
|
|
*/
|
||
|
|
public static function isComplex(string $password): bool
|
||
|
|
{
|
||
|
|
return strlen($password) >= 8
|
||
|
|
&& preg_match('/[A-Z]/', $password)
|
||
|
|
&& preg_match('/[a-z]/', $password)
|
||
|
|
&& preg_match('/[0-9]/', $password)
|
||
|
|
&& preg_match('/[!@#$%^&*()\-_=+\[\]{}|;:,.<>?]/', $password);
|
||
|
|
}
|
||
|
|
}
|