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,43 @@
<?php
namespace App\Services\Passport;
use Illuminate\Support\Carbon;
use Laravel\Passport\Bridge\ClientRepository as BaseClientRepository;
/**
* Extiende la validación de client_secret de Passport para aceptar, además
* del secret actual, el secret anterior si todavía no venció su periodo de
* gracia (ver App\Support\ClientSecretRotation). Sin esto, rotar un secret
* cortaría cualquier integración desplegada que todavía no se actualizó.
*
* Se bindea en AppServiceProvider::register() en vez del ClientRepository
* de base — Passport lo resuelve vía el contenedor (no como singleton
* explícito), así que un bind alcanza para reemplazarlo en todos lados
* donde se arma el AuthorizationServer.
*/
class ClientRepository extends BaseClientRepository
{
public function validateClient(string $clientIdentifier, ?string $clientSecret, ?string $grantType): bool
{
if (parent::validateClient($clientIdentifier, $clientSecret, $grantType)) {
return true;
}
if (empty($clientSecret)) {
return false;
}
$record = $this->clients->findActive($clientIdentifier);
if (! $record || ! $record->previous_secret || ! $record->previous_secret_expires_at) {
return false;
}
if (Carbon::parse($record->previous_secret_expires_at)->isPast()) {
return false;
}
return $this->hasher->check($clientSecret, $record->previous_secret);
}
}