33 lines
862 B
PHP
33 lines
862 B
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use Illuminate\Support\Facades\Crypt;
|
|
|
|
class PairingTokenService
|
|
{
|
|
public function issue(int $registrationId): string
|
|
{
|
|
$ttl = config('pxg.pairing_token_ttl_minutes', 30);
|
|
$payload = [
|
|
'rid' => $registrationId,
|
|
'exp' => now()->addMinutes($ttl)->timestamp,
|
|
];
|
|
return Crypt::encryptString(json_encode($payload));
|
|
}
|
|
|
|
public function verify(string $token): ?int
|
|
{
|
|
try {
|
|
$json = Crypt::decryptString($token);
|
|
$payload = json_decode($json, true);
|
|
if (!is_array($payload)) return null;
|
|
if (($payload['exp'] ?? 0) < time()) return null;
|
|
$rid = (int) ($payload['rid'] ?? 0);
|
|
return $rid > 0 ? $rid : null;
|
|
} catch (\Throwable $e) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|