67 lines
2.9 KiB
Dart
67 lines
2.9 KiB
Dart
import 'dart:convert';
|
|
import '../../../core/services/api_service.dart';
|
|
import '../../../core/services/secure_storage_service.dart';
|
|
import 'models/user_model.dart';
|
|
|
|
class AuthRepository {
|
|
final ApiService _apiService = ApiService();
|
|
final SecureStorageService _secureStorage = SecureStorageService();
|
|
|
|
// English: Perform login by email/password, verify response status, and save JWT token.
|
|
// Arabic: إجراء تسجيل الدخول عن طريق البريد الإلكتروني وكلمة المرور، والتحقق من حالة الاستجابة، وحفظ رمز التحقق.
|
|
Future<UserModel> login(String email, String password) async {
|
|
final response = await _apiService.login(email, password);
|
|
|
|
if (response.statusCode == 200) {
|
|
final data = jsonDecode(response.body) as Map<String, dynamic>;
|
|
final token = data['token'] as String;
|
|
final userJson = data['user'] as Map<String, dynamic>;
|
|
|
|
// English: Store JWT token securely using secure storage.
|
|
// Arabic: تخزين رمز التحقق بشكل آمن باستخدام التخزين الآمن.
|
|
await _secureStorage.writeToken(token);
|
|
|
|
return UserModel.fromJson(userJson);
|
|
} else {
|
|
// English: Handle server error messages securely.
|
|
// Arabic: معالجة رسائل خطأ الخادم بشكل آمن.
|
|
final data = jsonDecode(response.body) as Map<String, dynamic>;
|
|
final errorMessage = data['error'] as String? ?? 'Failed to authenticate';
|
|
throw Exception(errorMessage);
|
|
}
|
|
}
|
|
|
|
// English: Check if a valid JWT token exists and fetch the authenticated user data.
|
|
// Arabic: التحقق من وجود رمز تحقق صالح وجلب بيانات المستخدم المصادق عليه.
|
|
Future<UserModel?> getCachedUser() async {
|
|
final token = await _secureStorage.readToken();
|
|
if (token == null || token.isEmpty) {
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
final response = await _apiService.getMe(token);
|
|
if (response.statusCode == 200) {
|
|
final data = jsonDecode(response.body) as Map<String, dynamic>;
|
|
final userJson = data['user'] as Map<String, dynamic>;
|
|
return UserModel.fromJson(userJson);
|
|
} else {
|
|
// English: Token is likely invalid or expired, clear it.
|
|
// Arabic: من المحتمل أن يكون الرمز غير صالح أو منتهي الصلاحية، قم بمسحه.
|
|
await _secureStorage.deleteToken();
|
|
return null;
|
|
}
|
|
} catch (_) {
|
|
// English: Return null if offline or server is unreachable.
|
|
// Arabic: إرجاع قيمة فارغة إذا كان الجهاز غير متصل أو تعذر الوصول إلى الخادم.
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// English: Clear stored JWT credentials.
|
|
// Arabic: مسح بيانات اعتماد رمز التحقق المخزنة.
|
|
Future<void> logout() async {
|
|
await _secureStorage.deleteToken();
|
|
}
|
|
}
|