mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
Better jwt handling and tests
This commit is contained in:
@@ -63,8 +63,8 @@ class ResourceToken extends Model
|
||||
{
|
||||
$expire = $document->getAttribute('expire');
|
||||
|
||||
// Disable library auto-exp; rely solely on explicit exp in payload when set
|
||||
$jwt = new JWT(System::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', 0, 10);
|
||||
// Use a large but reasonable maxAge to avoid auto-exp when we set explicit exp
|
||||
$jwt = new JWT(System::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', 86400 * 365 * 10, 10); // 10 years
|
||||
|
||||
$payload = [
|
||||
'tokenId' => $document->getId(),
|
||||
@@ -77,6 +77,9 @@ class ResourceToken extends Model
|
||||
if ($expire !== null) {
|
||||
$expiryDate = new \DateTime($expire);
|
||||
$payload['exp'] = $expiryDate->getTimestamp();
|
||||
} else {
|
||||
// For infinite expiry, set 'iat' to prevent JWT library from auto-adding 'exp'
|
||||
$payload['iat'] = time();
|
||||
}
|
||||
|
||||
$secret = $jwt->encode($payload);
|
||||
|
||||
@@ -106,10 +106,10 @@ class TokensConsoleClientTest extends Scope
|
||||
// Add padding if needed
|
||||
$payloadB64 .= str_repeat('=', (4 - strlen($payloadB64) % 4) % 4);
|
||||
$payload = json_decode(base64_decode($payloadB64), true);
|
||||
|
||||
|
||||
$this->assertIsArray($payload, 'JWT payload should decode to an array');
|
||||
$this->assertArrayHasKey('exp', $payload, 'JWT payload should contain exp field');
|
||||
|
||||
|
||||
$expectedExp = (new \DateTime($expiry))->getTimestamp();
|
||||
$this->assertEquals($expectedExp, $payload['exp'], 'JWT exp should match token expiry');
|
||||
|
||||
@@ -129,7 +129,7 @@ class TokensConsoleClientTest extends Scope
|
||||
$payloadB64 = str_replace(['-', '_'], ['+', '/'], $payloadB64);
|
||||
$payloadB64 .= str_repeat('=', (4 - strlen($payloadB64) % 4) % 4);
|
||||
$payload = json_decode(base64_decode($payloadB64), true);
|
||||
|
||||
|
||||
$this->assertArrayNotHasKey('exp', $payload, 'JWT payload should not contain exp field for infinite expiry');
|
||||
|
||||
return $data;
|
||||
|
||||
Reference in New Issue
Block a user