import 'package:qrscanner/models/login_response.dart'; class AuthSession { const AuthSession({ required this.username, required this.accessToken, required this.tokenType, required this.expiresIn, required this.roles, this.refreshToken, this.idToken, }); factory AuthSession.fromLoginResponse(LoginResponse response) { return AuthSession( username: response.username ?? '', accessToken: response.accessToken ?? '', refreshToken: response.refreshToken, idToken: response.idToken, tokenType: response.tokenType ?? 'Bearer', expiresIn: response.expiresIn ?? 0, roles: response.roles, ); } factory AuthSession.fromJson(Map json) { return AuthSession( username: json['username'] as String? ?? '', accessToken: json['accessToken'] as String? ?? '', refreshToken: json['refreshToken'] as String?, idToken: json['idToken'] as String?, tokenType: json['tokenType'] as String? ?? 'Bearer', expiresIn: (json['expiresIn'] as num?)?.toInt() ?? 0, roles: (json['roles'] as List?) ?.map((role) => role.toString()) .toList() ?? const [], ); } final String username; final String accessToken; final String? refreshToken; final String? idToken; final String tokenType; final int expiresIn; final List roles; /// Token usado en las peticiones API (`Authorization: Bearer ...`). String get authorizationHeader => '$tokenType $accessToken'; bool get isScanner => roles.contains('ROLE_SCANNER') || roles.contains('scanners'); Map toJson() => { 'username': username, 'accessToken': accessToken, 'refreshToken': refreshToken, 'idToken': idToken, 'tokenType': tokenType, 'expiresIn': expiresIn, 'roles': roles, }; }