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,37 @@
<?php
namespace App\Support;
use Illuminate\Support\Str;
use Laravel\Passport\Client;
/**
* Compartido por OAuth\ClientController (sesión) y Api\ClientController
* (token) — mismo patrón que el resto de las clases en App\Support.
*/
class ClientSecretRotation
{
public const GRACE_PERIOD_HOURS = 48;
/**
* Genera un secret nuevo y deja el anterior válido por GRACE_PERIOD_HOURS
* más (ver App\Services\Passport\ClientRepository, que es quien
* realmente lo verifica en cada request a /oauth/token). Devuelve el
* secret nuevo en texto plano — se muestra una sola vez, igual que al
* crear el cliente.
*/
public static function rotate(Client $client): string
{
// El atributo "secret" en el modelo Client ya viene hasheado (mutator
// de Passport) — lo copiamos tal cual, no hay que volver a hashearlo.
$client->forceFill([
'previous_secret' => $client->getAttributes()['secret'] ?? null,
'previous_secret_expires_at' => now()->addHours(self::GRACE_PERIOD_HOURS),
]);
$client->secret = Str::random(40);
$client->save();
return $client->plainSecret;
}
}