'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 = (!empty($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); // Generate encrypted price token for passenger $priceToken = ''; if ($role === 'passenger') { $tokenData = json_encode([ 'passenger_id' => (string)$userId, 'start_location' => '31.95,35.91', 'end_location' => '31.96,35.92', 'price' => '5', 'expires' => time() + 3600 ]); if (isset($GLOBALS['encryptionHelper']) && is_object($GLOBALS['encryptionHelper'])) { $priceToken = $GLOBALS['encryptionHelper']->encryptData($tokenData); } elseif (isset($encryptionHelper) && is_object($encryptionHelper)) { $priceToken = $encryptionHelper->encryptData($tokenData); } else { // Pure PHP Encryption fallback if EncryptionHelper not loaded try { $encKey = getenv('ENCRYPTION_KEY') ?: $secret; $keyBytes = substr(hash('sha256', $encKey, true), 0, 32); $iv = random_bytes(12); $tag = ''; $ciphertext = openssl_encrypt($tokenData, 'aes-256-gcm', $keyBytes, OPENSSL_RAW_DATA, $iv, $tag); $priceToken = 'GCM:' . base64_encode($iv) . ':' . base64_encode($ciphertext . $tag); } catch (Throwable $e) { $priceToken = 'dummy'; } } } echo json_encode([ 'user_id' => $userId, 'role' => $role, 'jwt' => $jwt, 'fp' => $fpHeader, 'price_token' => $priceToken ]);