'HS256', 'typ' => 'JWT'])); $body = base64url_encode(json_encode($payload)); $sig = base64url_encode(hash_hmac('sha256', "$header.$body", $secret, true)); return "$header.$body.$sig"; } $secret = getJwtSecret(); if (empty($secret)) { echo json_encode(['error' => 'JWT secret not found in any .env', 'jwt' => '']); exit(0); } $userId = $argv[1] ?? '999999'; $role = $argv[2] ?? 'driver'; $aud = ($role === 'driver') ? (getenv('allowedDriver2') ?: 'driver-app:ios') : (getenv('allowed2') ?: 'passenger-app:ios'); $fpPepper = getenv('FP_PEPPER') ?: ($_ENV['FP_PEPPER'] ?? ''); $fpHeader = 'mock_device_fp_' . $userId; $fpInToken = $fpPepper ? hash('sha256', $fpHeader . $fpPepper) : null; $payload = [ 'iss' => getenv('APP_ISSUER') ?: 'SiroApp', 'aud' => $aud, 'user_id' => (string)$userId, 'sub' => (string)$userId, 'role' => $role, 'token_type' => 'access', 'jti' => bin2hex(random_bytes(16)), 'iat' => time(), 'exp' => time() + 86400, ]; if ($fpInToken) { $payload['fingerPrint'] = $fpInToken; } $jwt = generate_jwt($secret, $payload); echo json_encode([ 'user_id' => $userId, 'role' => $role, 'jwt' => $jwt, 'fp' => $fpHeader ]);