// lib/services/auth/jwt_utils.dart // // ابزار کوچک برای decode کردن claims یک JWT بدون اعتبارسنجی signature. // از این فقط برای استخراج اطلاعات داخل توکن استفاده می‌کنیم (مثلا sub). import 'dart:convert'; class JwtUtils { /// claims یک JWT را به صورت Map برمی‌گرداند، یا در صورت نامعتبر بودن null. static Map? decodePayload(String token) { try { final parts = token.split('.'); if (parts.length < 2) return null; final payload = _padBase64(parts[1]); final decoded = utf8.decode(base64Url.decode(payload)); final map = json.decode(decoded); if (map is Map) return map; return Map.from(map as Map); } catch (_) { return null; } } /// مقدار claim `sub` (شناسه کاربر در Keycloak) را برمی‌گرداند. static String? subjectOf(String token) { final payload = decodePayload(token); return payload?['sub'] as String?; } static String _padBase64(String input) { final mod = input.length % 4; if (mod == 0) return input; return input + '=' * (4 - mod); } }