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 @@ - - - - - - - + +