chore: normalize line endings (CRLF -> LF)
No content changes: git diff --ignore-all-space over these files is empty. The churn came from editing on Windows against a repo checked out with LF.
This commit is contained in:
1 parent
15566a6951
commit
caf8e98378
315 files changed
+86950
-86950
No files matched your search
@@ -1,99 +1,99 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../core/network/api_client.dart';
|
||||
import '../../config/app_config.dart';
|
||||
import '../../main.dart';
|
||||
import '../documents/pending_documents_provider.dart';
|
||||
|
||||
class AuthNotifier extends StateNotifier<bool> {
|
||||
AuthNotifier(this._ref) : super(false);
|
||||
|
||||
final Ref _ref;
|
||||
|
||||
Future<bool> checkLoginState() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final token = prefs.getString('auth_token');
|
||||
if (token != null) {
|
||||
state = true;
|
||||
try {
|
||||
final apiClient = _ref.read(apiClientProvider);
|
||||
final response = await apiClient.client.get('/auth/me');
|
||||
if (response.data is Map && response.data['data'] is Map) {
|
||||
final profile = response.data['data']['profile'];
|
||||
if (profile != null) {
|
||||
await prefs.setString('nama_toko', profile['namaToko'] ?? '');
|
||||
await prefs.setString('kode_toko', profile['kodeToko'] ?? '');
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
// If unauthorized, perform clean logout
|
||||
if (e.toString().contains('401') || e.toString().contains('Unauthorized')) {
|
||||
await logout();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
state = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
Future<void> login(String username, String password) async {
|
||||
final apiClient = _ref.read(apiClientProvider);
|
||||
try {
|
||||
final response = await apiClient.client.post(
|
||||
AppConfig.loginEndpoint,
|
||||
data: {
|
||||
'username': username,
|
||||
'password': password,
|
||||
},
|
||||
);
|
||||
|
||||
if (response.data is! Map || response.data['data'] is! Map) {
|
||||
throw Exception("Format respon server tidak valid (bukan JSON)");
|
||||
}
|
||||
|
||||
final token = response.data['data']['token'];
|
||||
final profile = response.data['data']['profile'];
|
||||
if (token == null) {
|
||||
throw Exception("Token otentikasi tidak ditemukan dalam respon");
|
||||
}
|
||||
|
||||
// Clear any pre-existing local data before saving the new token/profile
|
||||
final localStorage = _ref.read(localStorageProvider);
|
||||
await localStorage.clearAll();
|
||||
_ref.read(pendingDocumentsProvider.notifier).clearQueue();
|
||||
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString('auth_token', token);
|
||||
if (profile != null) {
|
||||
await prefs.setString('nama_toko', profile['namaToko'] ?? '');
|
||||
await prefs.setString('kode_toko', profile['kodeToko'] ?? '');
|
||||
}
|
||||
|
||||
state = true;
|
||||
} catch (e) {
|
||||
state = false;
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> logout() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.remove('auth_token');
|
||||
await prefs.remove('nama_toko');
|
||||
await prefs.remove('kode_toko');
|
||||
|
||||
final localStorage = _ref.read(localStorageProvider);
|
||||
await localStorage.clearAll();
|
||||
|
||||
// Clear pending documents queue in memory
|
||||
_ref.read(pendingDocumentsProvider.notifier).clearQueue();
|
||||
|
||||
state = false;
|
||||
}
|
||||
}
|
||||
|
||||
final authProvider = StateNotifierProvider<AuthNotifier, bool>((ref) {
|
||||
return AuthNotifier(ref);
|
||||
});
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../core/network/api_client.dart';
|
||||
import '../../config/app_config.dart';
|
||||
import '../../main.dart';
|
||||
import '../documents/pending_documents_provider.dart';
|
||||
|
||||
class AuthNotifier extends StateNotifier<bool> {
|
||||
AuthNotifier(this._ref) : super(false);
|
||||
|
||||
final Ref _ref;
|
||||
|
||||
Future<bool> checkLoginState() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final token = prefs.getString('auth_token');
|
||||
if (token != null) {
|
||||
state = true;
|
||||
try {
|
||||
final apiClient = _ref.read(apiClientProvider);
|
||||
final response = await apiClient.client.get('/auth/me');
|
||||
if (response.data is Map && response.data['data'] is Map) {
|
||||
final profile = response.data['data']['profile'];
|
||||
if (profile != null) {
|
||||
await prefs.setString('nama_toko', profile['namaToko'] ?? '');
|
||||
await prefs.setString('kode_toko', profile['kodeToko'] ?? '');
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
// If unauthorized, perform clean logout
|
||||
if (e.toString().contains('401') || e.toString().contains('Unauthorized')) {
|
||||
await logout();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
state = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
Future<void> login(String username, String password) async {
|
||||
final apiClient = _ref.read(apiClientProvider);
|
||||
try {
|
||||
final response = await apiClient.client.post(
|
||||
AppConfig.loginEndpoint,
|
||||
data: {
|
||||
'username': username,
|
||||
'password': password,
|
||||
},
|
||||
);
|
||||
|
||||
if (response.data is! Map || response.data['data'] is! Map) {
|
||||
throw Exception("Format respon server tidak valid (bukan JSON)");
|
||||
}
|
||||
|
||||
final token = response.data['data']['token'];
|
||||
final profile = response.data['data']['profile'];
|
||||
if (token == null) {
|
||||
throw Exception("Token otentikasi tidak ditemukan dalam respon");
|
||||
}
|
||||
|
||||
// Clear any pre-existing local data before saving the new token/profile
|
||||
final localStorage = _ref.read(localStorageProvider);
|
||||
await localStorage.clearAll();
|
||||
_ref.read(pendingDocumentsProvider.notifier).clearQueue();
|
||||
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString('auth_token', token);
|
||||
if (profile != null) {
|
||||
await prefs.setString('nama_toko', profile['namaToko'] ?? '');
|
||||
await prefs.setString('kode_toko', profile['kodeToko'] ?? '');
|
||||
}
|
||||
|
||||
state = true;
|
||||
} catch (e) {
|
||||
state = false;
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> logout() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.remove('auth_token');
|
||||
await prefs.remove('nama_toko');
|
||||
await prefs.remove('kode_toko');
|
||||
|
||||
final localStorage = _ref.read(localStorageProvider);
|
||||
await localStorage.clearAll();
|
||||
|
||||
// Clear pending documents queue in memory
|
||||
_ref.read(pendingDocumentsProvider.notifier).clearQueue();
|
||||
|
||||
state = false;
|
||||
}
|
||||
}
|
||||
|
||||
final authProvider = StateNotifierProvider<AuthNotifier, bool>((ref) {
|
||||
return AuthNotifier(ref);
|
||||
});
|
||||
Reference in new issue
Block a user