diff --git a/QRBee/QRBee.Android/QRBee.Android.csproj b/QRBee/QRBee.Android/QRBee.Android.csproj
index 4dd0699..8d89eaa 100644
--- a/QRBee/QRBee.Android/QRBee.Android.csproj
+++ b/QRBee/QRBee.Android/QRBee.Android.csproj
@@ -78,6 +78,7 @@
+
diff --git a/QRBee/QRBee.Android/Services/LocalSettings.cs b/QRBee/QRBee.Android/Services/LocalSettings.cs
new file mode 100644
index 0000000..4cc3088
--- /dev/null
+++ b/QRBee/QRBee.Android/Services/LocalSettings.cs
@@ -0,0 +1,31 @@
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+using QRBee.Services;
+using Xamarin.Forms;
+
+[assembly: Dependency(typeof(QRBee.Droid.Services.LocalSettings))]
+
+namespace QRBee.Droid.Services
+{
+ internal class LocalSettings : ILocalSettings
+ {
+ public string QRBeeApiUrl => "https://localhost:5000";
+
+ public async Task SaveSettings(Settings settings)
+ {
+ var json = JsonConvert.SerializeObject(settings, Formatting.Indented);
+ Application.Current.Properties["Settings"] = json;
+ await Application.Current.SavePropertiesAsync();
+ }
+
+ public Task LoadSettings()
+ {
+ if (!Application.Current.Properties.ContainsKey("Settings"))
+ return Task.FromResult(new Settings());
+
+ var json = Application.Current.Properties["Settings"].ToString();
+ var settings = JsonConvert.DeserializeObject(json);
+ return Task.FromResult(settings);
+ }
+ }
+}
\ No newline at end of file
diff --git a/QRBee/QRBee/QRBee.csproj b/QRBee/QRBee/QRBee.csproj
index c2afb6d..8bf36d0 100644
--- a/QRBee/QRBee/QRBee.csproj
+++ b/QRBee/QRBee/QRBee.csproj
@@ -5,6 +5,14 @@
true
+
+ latest
+
+
+
+ latest
+
+
diff --git a/QRBee/QRBee/Services/ILocalSettings.cs b/QRBee/QRBee/Services/ILocalSettings.cs
new file mode 100644
index 0000000..5f3cbaf
--- /dev/null
+++ b/QRBee/QRBee/Services/ILocalSettings.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace QRBee.Services
+{
+ public class Settings
+ {
+ public string PIN { get; set; }
+ public bool IsRegistered { get; set; }
+
+ public string Name { get; set; }
+ public string Email { get; set; }
+ public string DateOfBirth { get; set; }
+ public string CardNumber { get; set; }
+ public string ValidFrom { get; set; }
+ public string ExpirationDate { get; set; }
+ public string CardHolderName { get; set; }
+ public string CVC { get; set; }
+ public string IssueNo { get; set; }
+ public string Password { get; set; }
+ }
+
+ public interface ILocalSettings
+ {
+ string QRBeeApiUrl { get; }
+ Task SaveSettings(Settings settings);
+ Task LoadSettings();
+
+
+ }
+}
diff --git a/QRBee/QRBee/ViewModels/LoginViewModel.cs b/QRBee/QRBee/ViewModels/LoginViewModel.cs
index 5291326..b6f084d 100644
--- a/QRBee/QRBee/ViewModels/LoginViewModel.cs
+++ b/QRBee/QRBee/ViewModels/LoginViewModel.cs
@@ -1,15 +1,15 @@
-using QRBee.Views;
-using System;
-using System.Collections.Generic;
-using System.Text;
+using System.Linq;
+using QRBee.Views;
using Plugin.Fingerprint;
using Plugin.Fingerprint.Abstractions;
+using QRBee.Services;
using Xamarin.Forms;
namespace QRBee.ViewModels
{
public class LoginViewModel : BaseViewModel
{
+ private bool _isPinVisible;
public Command LoginCommand
{
get;
@@ -22,7 +22,9 @@ namespace QRBee.ViewModels
{
LoginCommand = new Command(OnLoginClicked);
RegisterCommand = new Command(OnRegisterClicked);
+
}
+ public string PinCode { get; }
///
/// Reaction on Login button
@@ -30,11 +32,23 @@ namespace QRBee.ViewModels
///
private async void OnLoginClicked(object obj)
{
- bool isFingerprintAvailable = await CrossFingerprint.Current.IsAvailableAsync(false);
+ var isFingerprintAvailable = await CrossFingerprint.Current.IsAvailableAsync(false);
if (!isFingerprintAvailable)
{
//Insert PIN
- return;
+ IsPinVisible = true;
+ var localSettings = DependencyService.Resolve();
+ var pin = (await localSettings.LoadSettings()).PIN;
+
+ if (!string.IsNullOrEmpty(pin) && pin.Equals(PinCode))
+ {
+ await Shell.Current.GoToAsync($"//{nameof(MainPage)}");
+ }
+ else
+ {
+ await Shell.Current.GoToAsync($"{nameof(RegisterPage)}");
+ }
+
}
var conf = new AuthenticationRequestConfiguration("Authentication", "Authenticate access to your personal data");
@@ -53,6 +67,20 @@ namespace QRBee.ViewModels
}
}
+ public bool IsPinVisible
+ {
+ get => _isPinVisible;
+ set
+ {
+ if (value == _isPinVisible)
+ {
+ return;
+ }
+ _isPinVisible = value;
+ OnPropertyChanged(nameof(IsPinVisible));
+ }
+ }
+
///
/// Reaction on Register button
///
diff --git a/QRBee/QRBee/ViewModels/RegisterViewModel.cs b/QRBee/QRBee/ViewModels/RegisterViewModel.cs
index 1cba3e1..a6c9568 100644
--- a/QRBee/QRBee/ViewModels/RegisterViewModel.cs
+++ b/QRBee/QRBee/ViewModels/RegisterViewModel.cs
@@ -1,6 +1,8 @@
using System;
-using System.Collections.Generic;
-using System.Text;
+using System.Linq;
+using System.Net.Http;
+using QRBee.Core;
+using QRBee.Services;
using QRBee.Views;
using Xamarin.Forms;
@@ -62,12 +64,49 @@ namespace QRBee.ViewModels
OnPropertyChanged(nameof(Password2Color));
}
}
-
-
+ public string Pin { get; set; }
private async void OnRegisterClicked(object obj)
{
- await Shell.Current.GoToAsync($"//{nameof(MainPage)}");
+ using var client = new HttpClient();
+ var localSettings = DependencyService.Resolve();
+
+ var service = new Core.Client.Client(localSettings.QRBeeApiUrl,client);
+
+ try
+ {
+ await service.RegisterAsync(new RegistrationRequest
+ {
+ DateOfBirth = DateOfBirth,
+ Email = Email,
+ Name = Name,
+ RegisterAsMerchant = false
+ });
+
+ //save local settings
+ var settings = new Settings
+ {
+ CardHolderName = CardHolderName,
+ CardNumber = CardNumber,
+ CVC = CVC,
+ DateOfBirth = DateOfBirth,
+ Email = Email,
+ ExpirationDate = ExpirationDate,
+ IsRegistered = true,
+ IssueNo = IssueNo,
+ ValidFrom = ValidFrom,
+ Name = Name,
+ PIN = Pin
+ };
+ await localSettings.SaveSettings(settings);
+
+ await Shell.Current.GoToAsync($"//{nameof(MainPage)}");
+ }
+ catch (Exception)
+ {
+ var page = Application.Current.MainPage.Navigation.NavigationStack.LastOrDefault();
+ await page.DisplayAlert("Error", "The Backend isn't working", "Ok");
+ }
}
}
diff --git a/QRBee/QRBee/Views/LoginPage.xaml b/QRBee/QRBee/Views/LoginPage.xaml
index b2f24b4..8201e1b 100644
--- a/QRBee/QRBee/Views/LoginPage.xaml
+++ b/QRBee/QRBee/Views/LoginPage.xaml
@@ -10,13 +10,10 @@
-
-
-
-
-
-
-
+
+
+
+
diff --git a/QRBee/QRBee/Views/RegisterPage.xaml b/QRBee/QRBee/Views/RegisterPage.xaml
index 660413d..ddbcc27 100644
--- a/QRBee/QRBee/Views/RegisterPage.xaml
+++ b/QRBee/QRBee/Views/RegisterPage.xaml
@@ -23,6 +23,9 @@
+
+
+