auth_service.dart 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import 'dart:convert';
  2. import 'package:drift/drift.dart';
  3. import 'package:http/http.dart' as http;
  4. import '../database/daos/agenti_dao.dart';
  5. import '../database/daos/parametri_dao.dart';
  6. import '../database/database.dart';
  7. import '../core/constants.dart';
  8. import 'api_service.dart';
  9. class AuthService {
  10. final AgentiDao _agentiDao;
  11. final ApiService _apiService;
  12. final ParametriDao _parametriDao;
  13. AuthService(this._agentiDao, this._apiService, this._parametriDao);
  14. Future<Agente?> login(String code, String password) async {
  15. return _agentiDao.authenticate(code, password);
  16. }
  17. Future<String> loginRemote(String code, String password) async {
  18. final url = await _parametriDao.read(AppConstants.kUrlParam);
  19. if (url == null || url.isEmpty) {
  20. throw Exception('URL del backend non configurato');
  21. }
  22. final uri = Uri.parse('$url/rest/auth/agent-login');
  23. final response = await http
  24. .post(
  25. uri,
  26. headers: {
  27. 'Content-Type': 'application/json',
  28. 'Accept': 'application/json',
  29. },
  30. body: jsonEncode({'codAgente': code, 'password': password}),
  31. )
  32. .timeout(const Duration(seconds: 30));
  33. final resp = jsonDecode(response.body) as Map<String, dynamic>;
  34. if (resp['token'] != null) {
  35. return resp['token'] as String;
  36. }
  37. throw Exception(resp['message'] ?? 'Autenticazione remota fallita');
  38. }
  39. Future<bool> checkRemoteAgent(String code) async {
  40. try {
  41. final resp = await _apiService.get('/rest/agente/esisteNew/$code');
  42. return resp['status'] == 0;
  43. } catch (_) {
  44. return false;
  45. }
  46. }
  47. Future<void> initializeAgent({
  48. required String codAgente,
  49. required String pwd,
  50. String? ragioneSociale,
  51. required String url,
  52. }) async {
  53. await _parametriDao.set(AppConstants.kUrlParam, url);
  54. await _agentiDao.insertAgente(
  55. AgentiCompanion(
  56. codAgente: Value(codAgente),
  57. pwd: Value(pwd),
  58. ragioneSociale: Value(ragioneSociale ?? codAgente),
  59. attivo: const Value(1),
  60. ),
  61. );
  62. }
  63. Future<String?> getSavedUrl() => _parametriDao.read(AppConstants.kUrlParam);
  64. Future<bool> isInitialized() async {
  65. final count = await _agentiDao.countAgenti();
  66. final url = await _parametriDao.read(AppConstants.kUrlParam);
  67. return count > 0 && url != null && url.isNotEmpty;
  68. }
  69. }