auth_service.dart 2.4 KB

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