Appli Flutter se connecte bien à l'API.

This commit is contained in:
DahoudG
2025-09-12 03:15:21 +00:00
parent 8184bc77bb
commit 3df010add7
33 changed files with 3124 additions and 339 deletions

View File

@@ -3,7 +3,7 @@ import 'package:injectable/injectable.dart';
import 'package:jwt_decoder/jwt_decoder.dart';
import '../models/auth_state.dart';
import '../models/login_request.dart';
import '../models/login_response.dart';
import '../models/user_info.dart';
import '../storage/secure_token_storage.dart';
import 'auth_api_service.dart';

View File

@@ -1,5 +1,5 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import '../models/auth_state.dart';
import '../models/login_request.dart';
import '../models/user_info.dart';

View File

@@ -1,5 +1,5 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import '../models/auth_state.dart';
import '../models/login_request.dart';
import '../models/user_info.dart';

View File

@@ -83,7 +83,8 @@ class SecureTokenStorage {
/// Récupère la date d'expiration du refresh token
Future<DateTime?> getRefreshTokenExpirationDate() async {
try {
final expiresAtString = await _storage.read(key: _refreshExpiresAtKey);
final prefs = await _prefs;
final expiresAtString = prefs.getString(_refreshExpiresAtKey);
if (expiresAtString == null) return null;
return DateTime.parse(expiresAtString);
@@ -133,9 +134,10 @@ class SecureTokenStorage {
/// Met à jour le token d'accès
Future<void> updateAccessToken(String accessToken, DateTime expiresAt) async {
try {
final prefs = await _prefs;
await Future.wait([
_storage.write(key: _accessTokenKey, value: accessToken),
_storage.write(key: _expiresAtKey, value: expiresAt.toIso8601String()),
prefs.setString(_accessTokenKey, accessToken),
prefs.setString(_expiresAtKey, expiresAt.toIso8601String()),
]);
} catch (e) {
throw StorageException('Erreur lors de la mise à jour du token d\'accès: $e');
@@ -145,8 +147,9 @@ class SecureTokenStorage {
/// Vérifie si les données d'authentification existent
Future<bool> hasAuthData() async {
try {
final accessToken = await _storage.read(key: _accessTokenKey);
final refreshToken = await _storage.read(key: _refreshTokenKey);
final prefs = await _prefs;
final accessToken = prefs.getString(_accessTokenKey);
final refreshToken = prefs.getString(_refreshTokenKey);
return accessToken != null && refreshToken != null;
} catch (e) {
return false;
@@ -184,12 +187,13 @@ class SecureTokenStorage {
/// Efface toutes les données d'authentification
Future<void> clearAuthData() async {
try {
final prefs = await _prefs;
await Future.wait([
_storage.delete(key: _accessTokenKey),
_storage.delete(key: _refreshTokenKey),
_storage.delete(key: _userInfoKey),
_storage.delete(key: _expiresAtKey),
_storage.delete(key: _refreshExpiresAtKey),
prefs.remove(_accessTokenKey),
prefs.remove(_refreshTokenKey),
prefs.remove(_userInfoKey),
prefs.remove(_expiresAtKey),
prefs.remove(_refreshExpiresAtKey),
]);
} catch (e) {
throw StorageException('Erreur lors de l\'effacement des données d\'authentification: $e');
@@ -199,7 +203,8 @@ class SecureTokenStorage {
/// Active/désactive l'authentification biométrique
Future<void> setBiometricEnabled(bool enabled) async {
try {
await _storage.write(key: _biometricEnabledKey, value: enabled.toString());
final prefs = await _prefs;
await prefs.setBool(_biometricEnabledKey, enabled);
} catch (e) {
throw StorageException('Erreur lors de la configuration biométrique: $e');
}
@@ -208,8 +213,8 @@ class SecureTokenStorage {
/// Vérifie si l'authentification biométrique est activée
Future<bool> isBiometricEnabled() async {
try {
final enabled = await _storage.read(key: _biometricEnabledKey);
return enabled == 'true';
final prefs = await _prefs;
return prefs.getBool(_biometricEnabledKey) ?? false;
} catch (e) {
return false;
}
@@ -218,7 +223,8 @@ class SecureTokenStorage {
/// Efface toutes les données stockées
Future<void> clearAll() async {
try {
await _storage.deleteAll();
final prefs = await _prefs;
await prefs.clear();
} catch (e) {
throw StorageException('Erreur lors de l\'effacement de toutes les données: $e');
}
@@ -227,8 +233,8 @@ class SecureTokenStorage {
/// Vérifie si le stockage sécurisé est disponible
Future<bool> isAvailable() async {
try {
await _storage.containsKey(key: 'test');
return true;
final prefs = await _prefs;
return prefs.containsKey('test');
} catch (e) {
return false;
}