new funcionality

This commit is contained in:
2026-07-27 17:20:02 +02:00
parent c2b5291a74
commit c5ce8a7a36
101 changed files with 6889 additions and 176 deletions

View File

@@ -0,0 +1,33 @@
<?php
namespace App\Support;
use App\Models\User;
use PragmaRX\Google2FA\Google2FA;
class TwoFactorVerification
{
/**
* Valida un código TOTP o de recuperación contra el 2FA de un usuario.
* Un código de recuperación válido se consume (no sirve una segunda vez).
*/
public static function verify(User $user, string $code): bool
{
if ($user->two_factor_secret && (new Google2FA())->verifyKey($user->two_factor_secret, $code)) {
return true;
}
$recoveryCodes = $user->two_factor_recovery_codes ?? [];
$normalized = strtoupper(trim($code));
if (in_array($normalized, $recoveryCodes, true)) {
$user->forceFill([
'two_factor_recovery_codes' => array_values(array_diff($recoveryCodes, [$normalized])),
])->save();
return true;
}
return false;
}
}