auth_service.dart 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 int idAgente,
  49. required String codAgente,
  50. required String pwd,
  51. String? ragioneSociale,
  52. required String url,
  53. }) async {
  54. await _parametriDao.set(AppConstants.kUrlParam, url);
  55. await _agentiDao.insertAgente(
  56. AgentiCompanion(
  57. idAgente: Value(idAgente),
  58. codAgente: Value(codAgente),
  59. pwd: Value(pwd),
  60. ragioneSociale: Value(ragioneSociale ?? codAgente),
  61. attivo: const Value(1),
  62. ),
  63. );
  64. }
  65. Future<String?> getSavedUrl() => _parametriDao.read(AppConstants.kUrlParam);
  66. Future<bool> isInitialized() async {
  67. final count = await _agentiDao.countAgenti();
  68. final url = await _parametriDao.read(AppConstants.kUrlParam);
  69. return count > 0 && url != null && url.isNotEmpty;
  70. }
  71. }