feat(online): session compte, stockage sécurisé et adapter API (ticket #64)
Ajoute l'adapter API distant (infrastructure/remote/auth_api.dart, http_api_client.dart) et le stockage sécurisé du token d'auth (infrastructure/security/secure_storage_auth_token_store.dart), câblés dans app_bootstrap.dart. Étend le modèle Drift (migration schemaVersion 9→10) et la couche application (ports, use cases, entités) pour la session de compte. flutter pub get OK (ajout http, flutter_secure_storage), build_runner OK, dart format appliqué, analyze propre (mêmes infos préexistantes), 109/109 tests verts, build APK debug validé. Premier ticket du chantier "Ajouter les features serveur au client" (#63). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -0,0 +1,44 @@
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
|
||||
import '../../application/application.dart';
|
||||
|
||||
final class SecureStorageAuthTokenStore implements AuthTokenStore {
|
||||
const SecureStorageAuthTokenStore({
|
||||
FlutterSecureStorage storage = const FlutterSecureStorage(),
|
||||
}) : _storage = storage;
|
||||
|
||||
static const _tokenKey = 'gametime.auth.token';
|
||||
static const _expiresAtKey = 'gametime.auth.expiresAt';
|
||||
|
||||
final FlutterSecureStorage _storage;
|
||||
|
||||
@override
|
||||
Future<void> saveToken(String token, DateTime expiresAt) async {
|
||||
await _storage.write(key: _tokenKey, value: token);
|
||||
await _storage.write(
|
||||
key: _expiresAtKey,
|
||||
value: expiresAt.toUtc().toIso8601String(),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<String?> readToken() async {
|
||||
final token = await _storage.read(key: _tokenKey);
|
||||
final expiresAtValue = await _storage.read(key: _expiresAtKey);
|
||||
if (token == null || expiresAtValue == null) {
|
||||
return token;
|
||||
}
|
||||
final expiresAt = DateTime.tryParse(expiresAtValue)?.toUtc();
|
||||
if (expiresAt != null && !expiresAt.isAfter(DateTime.now().toUtc())) {
|
||||
await clearToken();
|
||||
return null;
|
||||
}
|
||||
return token;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> clearToken() async {
|
||||
await _storage.delete(key: _tokenKey);
|
||||
await _storage.delete(key: _expiresAtKey);
|
||||
}
|
||||
}
|
||||
1
lib/infrastructure/security/security.dart
Normal file
1
lib/infrastructure/security/security.dart
Normal file
@ -0,0 +1 @@
|
||||
export 'secure_storage_auth_token_store.dart';
|
||||
Reference in New Issue
Block a user