diff --git a/Jugenddienst Stunden/Jugenddienst Stunden.csproj b/Jugenddienst Stunden/Jugenddienst Stunden.csproj
index 5adcc5d..3a6c4c1 100644
--- a/Jugenddienst Stunden/Jugenddienst Stunden.csproj
+++ b/Jugenddienst Stunden/Jugenddienst Stunden.csproj
@@ -44,8 +44,8 @@
com.companyname.jugenddienststunden
- 1.0.4
- 5
+ 1.0.5
+ 6
False
True
@@ -53,8 +53,8 @@
False
com.companyname.jugenddienststunden
- 1.0.4
- 5
+ 1.0.5
+ 6
True
@@ -64,8 +64,8 @@
True
False
True
- 1.0.4
- 5
+ 1.0.5
+ 6
False
@@ -75,8 +75,8 @@
com.companyname.jugenddienststunden
- 1.0.4
- 5
+ 1.0.5
+ 6
$(DefineConstants);DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
True
@@ -87,8 +87,8 @@
False
False
True
- 1.0.4
- 5
+ 1.0.5
+ 6
False
False
False
@@ -96,8 +96,8 @@
com.companyname.jugenddienststunden
- 1.0.4
- 5
+ 1.0.5
+ 6
False
True
@@ -162,12 +162,12 @@
-
+
true
-
-
-
+
+
+
diff --git a/Jugenddienst Stunden/Models/Auth.cs b/Jugenddienst Stunden/Models/Auth.cs
index c31d19f..696aa2e 100644
--- a/Jugenddienst Stunden/Models/Auth.cs
+++ b/Jugenddienst Stunden/Models/Auth.cs
@@ -1,8 +1,7 @@
-using System.Diagnostics;
+using Jugenddienst_Stunden.Types;
+using System.Diagnostics;
using System.Text;
-using Jugenddienst_Stunden.Types;
using System.Text.Json;
-using static System.Runtime.InteropServices.JavaScript.JSType;
namespace Jugenddienst_Stunden.Models;
@@ -94,5 +93,37 @@ class Auth {
//}
}
+ public static async Task AuthUserPass(string user, string pass, string url) {
+
+ var values = new Dictionary
+ {
+ { "user", user },
+ { "pass", pass }
+ };
+
+ var content = new FormUrlEncodedContent(values);
+
+ using (HttpClient client = new HttpClient() { Timeout = TimeSpan.FromSeconds(15) }) {
+
+ client.DefaultRequestHeaders.Add("Accept", "application/json");
+
+ // Senden der Anfrage und Abrufen der Antwort
+ using (HttpResponseMessage HttpResponseMessage = await client.PostAsync(url, content).ConfigureAwait(false)) {
+ // Überprüfen, ob die Anfrage erfolgreich war
+ if (HttpResponseMessage.StatusCode == System.Net.HttpStatusCode.OK) {
+ using (HttpContent HttpContent = HttpResponseMessage.Content) {
+ // Lesen und Rückgabe der Antwort als String
+
+ string responseData = await HttpContent.ReadAsStringAsync();
+ User userData = System.Text.Json.JsonSerializer.Deserialize(responseData) ?? throw new Exception("Fehler beim Deserialisieren der Daten");
+ return userData;
+ }
+ }
+ }
+
+ }
+ return null;
+ }
+
}
diff --git a/Jugenddienst Stunden/Types/User.cs b/Jugenddienst Stunden/Types/User.cs
new file mode 100644
index 0000000..271e0fb
--- /dev/null
+++ b/Jugenddienst Stunden/Types/User.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Jugenddienst_Stunden.Types;
+public class User {
+ public int id { get; set; }
+ public string name { get; set; }
+ public string surname { get; set; }
+ public string token { get; set; }
+}
diff --git a/Jugenddienst Stunden/Views/LoginPage.xaml b/Jugenddienst Stunden/Views/LoginPage.xaml
index 3029e1f..66e60f9 100644
--- a/Jugenddienst Stunden/Views/LoginPage.xaml
+++ b/Jugenddienst Stunden/Views/LoginPage.xaml
@@ -5,27 +5,50 @@
xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;assembly=ZXing.Net.MAUI.Controls"
x:Class="Jugenddienst_Stunden.Views.LoginPage"
Title="{Binding Title}">
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
\ No newline at end of file
diff --git a/Jugenddienst Stunden/Views/LoginPage.xaml.cs b/Jugenddienst Stunden/Views/LoginPage.xaml.cs
index 4f8827c..b070cc3 100644
--- a/Jugenddienst Stunden/Views/LoginPage.xaml.cs
+++ b/Jugenddienst Stunden/Views/LoginPage.xaml.cs
@@ -4,6 +4,11 @@ using Jugenddienst_Stunden.ViewModels;
using Microsoft.Maui.Controls;
using System.Collections.Generic;
using ZXing.Net.Maui;
+using Microsoft.Maui.Devices;
+using static Microsoft.Maui.ApplicationModel.Permissions;
+using ZXing.Net.Maui.Controls;
+using ZXing.QrCode.Internal;
+using System.Linq;
namespace Jugenddienst_Stunden.Views;
@@ -14,6 +19,7 @@ public partial class LoginPage : ContentPage {
private DateTime _lastDetectionTime;
private readonly TimeSpan _detectionInterval = TimeSpan.FromSeconds(5);
+ private bool hasCamera = false;
///
/// CTOR
@@ -27,15 +33,18 @@ public partial class LoginPage : ContentPage {
// vm.MsgEvent += Vm_MsgEvent;
//}
- barcodeScannerView.Options = new ZXing.Net.Maui.BarcodeReaderOptions {
- Formats = ZXing.Net.Maui.BarcodeFormat.QrCode,
+ barcodeScannerView.Options = new BarcodeReaderOptions {
+ Formats = BarcodeFormat.QrCode,
AutoRotate = true,
Multiple = false
};
+
}
- private void BarcodesDetected(object sender, ZXing.Net.Maui.BarcodeDetectionEventArgs e) {
+
+ private void BarcodesDetected(object sender, BarcodeDetectionEventArgs e) {
+
var currentTime = DateTime.Now;
if ((currentTime - _lastDetectionTime) > _detectionInterval) {
_lastDetectionTime = currentTime;
@@ -81,6 +90,7 @@ public partial class LoginPage : ContentPage {
protected override void OnDisappearing() {
base.OnDisappearing();
+
barcodeScannerView.CameraLocation = CameraLocation.Front;
barcodeScannerView.IsDetecting = false;
@@ -91,6 +101,49 @@ public partial class LoginPage : ContentPage {
barcodeScannerView.IsDetecting = true;
barcodeScannerView.CameraLocation = CameraLocation.Rear;
+
+ }
+
+ public bool IsCameraAvailable() {
+ var status = Permissions.CheckStatusAsync().Result;
+ if (status != PermissionStatus.Granted) {
+ status = Permissions.RequestAsync().Result;
+ }
+ return status != PermissionStatus.Granted;
+ }
+
+ private async void OnLoginButtonClicked(object sender, EventArgs e) {
+ var username = UsernameEntry.Text;
+ var password = PasswordEntry.Text;
+ var server = ServerEntry.Text;
+
+ if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(server)) {
+ await DisplayAlert("Fehler", "Bitte alle Felder ausfüllen", "OK");
+ return;
+ }
+ try {
+ Types.User response = await Auth.AuthUserPass(username, password, server);
+
+ var tokendata = new TokenData(response.token);
+ var op = await Models.Operator.LoadData(response.token);
+ Models.Stunde.apiKey = response.token;
+ Models.Stunde.name = op.name;
+ Models.Stunde.surname = op.surname;
+ Models.Stunde.EmployeeId = int.Parse(op.id);
+ Title = op.name + " " + op.surname;
+ ServerLabel.Text = "Server: " + tokendata.url.Replace("/appapi", "").Replace("https://", "").Replace("http://", "");
+
+ Preferences.Default.Set("apiKey", response.token);
+ Preferences.Default.Set("name", op.name);
+ Preferences.Default.Set("surname", op.surname);
+ Preferences.Default.Set("EmployeeId", int.Parse(op.id));
+
+ await DisplayAlert("Login erfolgreich", op.name + " " + op.surname, "OK");
+ if (Navigation.NavigationStack.Count > 1)
+ await Navigation.PopAsync();
+ } catch (Exception ex) {
+ await DisplayAlert("Fehler", ex.Message, "OK");
+ }
}
//private void Vm_AlertEvent(object? sender, string e) {