91 lines
2.8 KiB
Dart
91 lines
2.8 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import '../helper/helper.dart' as helper;
|
|
import '../models/tank_user_model.dart';
|
|
import '../pages/home_view.dart';
|
|
import '../pages/signin_view.dart';
|
|
import '../services/directus_service.dart';
|
|
import '../helper/password_helper.dart';
|
|
|
|
class LoginController extends GetxController {
|
|
final emailController = TextEditingController();
|
|
final passwordController = TextEditingController();
|
|
final directusService = DirectusService();
|
|
|
|
@override
|
|
void onReady() {}
|
|
|
|
@override
|
|
void onClose() {
|
|
emailController.dispose();
|
|
passwordController.dispose();
|
|
}
|
|
|
|
void newLoginDirectus() async {
|
|
var email = emailController.text.trim().toLowerCase();
|
|
var password = passwordController.text;
|
|
var result = await directusService.getTankUserList();
|
|
if (result.isEmpty) {
|
|
Get.snackbar(
|
|
'Login fehlgeschlagen',
|
|
'Fehler beim Abrufen der Benutzerdaten. Bitte versuchen Sie es später erneut.',
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
);
|
|
return;
|
|
}
|
|
var tankUserList = result
|
|
.map((userJson) => TankUser.fromJson(userJson))
|
|
.toList();
|
|
var identId =
|
|
tankUserList
|
|
.firstWhereOrNull((user) => user.email == email)
|
|
?.userIdentId ??
|
|
'';
|
|
if (identId.isEmpty) {
|
|
Get.snackbar(
|
|
'Login fehlgeschlagen',
|
|
'Benutzer mit dieser E-Mail-Adresse wurde nicht gefunden.',
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
);
|
|
return;
|
|
}
|
|
var storedHash =
|
|
tankUserList
|
|
.firstWhereOrNull((user) => user.email == email)
|
|
?.passwordHash ??
|
|
'';
|
|
if (storedHash.isEmpty) {
|
|
Get.snackbar(
|
|
'Login fehlgeschlagen',
|
|
'Kein gespeicherter Passwort-Hash für diesen Benutzer gefunden.',
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
);
|
|
return;
|
|
}
|
|
var isPassCorrect = await PasswordHelper.verifyPassword(
|
|
password,
|
|
storedHash,
|
|
);
|
|
if (isPassCorrect && identId.isNotEmpty) {
|
|
Get.snackbar(
|
|
'Login erfolgreich',
|
|
'Willkommen zurück!',
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
);
|
|
print('Login erfolgreich für Benutzer mit IdentId: $identId');
|
|
helper.kCurrentUserIdentId = identId; // Set the current user identId
|
|
Get.offAllNamed(HomePage.namedRoute, arguments: {'userIdentId': identId});
|
|
} else {
|
|
Get.snackbar(
|
|
'Login fehlgeschlagen',
|
|
'Bitte überprüfen Sie Ihre E-Mail und Ihr Passwort und versuchen Sie es erneut\noder registrieren Sie sich, wenn Sie noch kein Konto haben.',
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
);
|
|
}
|
|
}
|
|
|
|
void goToSignInPage() {
|
|
Get.offAllNamed(SigninPage.namedRoute, arguments: {'userIdentId': ''});
|
|
}
|
|
}
|