public async void Login() { Animate = true; Instructions = "Validating Identity"; bool _Failure = false; //Diagnostics string Message = string.Empty; string StackTrace = string.Empty; await Task.Run(() => { try { //Place base code here //Authenticate Site User here if (string.IsNullOrWhiteSpace(Username)) { throw new ArgumentNullException("Username cannot be empty. Please try again"); } if (string.IsNullOrWhiteSpace(Password)) { throw new ArgumentNullException("Password cannot be empty. Please try again"); } if (accountManager != null) { //Apple Test Account var hasher = new PasswordEncoder(); var hashedPassword = hasher.Encode(Password, EncryptType.SHA_512); if (accountManager.AuthenticateSiteUser_ByCredentials(Username, hashedPassword)) { var curr = accountManager.GetSiteUser_ByUsername <Account>(Username); Constants.InMemory_ContactID = curr.Contact_ID_Ref; #region Save Credentials to Keychain if Remember me is Enabled var credentialsStore = Xamarin.Auth.AccountStore.Create(); var AccountDetails = new Xamarin.Auth.Account(); AccountDetails.Properties.Clear(); if (RememberMe) { AccountDetails.Username = Username; AccountDetails.Properties.Add("RememberMe", "true"); } else { AccountDetails.Username = Username; AccountDetails.Properties.Add("RememberMe", "false"); } credentialsStore.FindAccountsForService(Credentials_Service).ToList().Clear(); credentialsStore.Save(AccountDetails, Credentials_Service); #endregion try { var contacts = contactStore.Get_ContactsFromStore <Contact>(); if (contacts != null) { if (contactManager != null) { var QueryContacts = contactManager.Get_Contacts_ByUserID <Contact>(curr.Contact_ID_Ref); contacts.ForEach(w => { //Add Contact to the contact store for the particular account if (QueryContacts.SingleOrDefault(i => i.Contact_ID == w.Contact_ID && i.User_ID == curr.Contact_ID_Ref) == null) { w.Sys_Creation = DateTime.Now; w.Sys_Transaction = DateTime.Now; w.Contact_ID = contactManager.Get_NewContactID(); w.User_ID = curr.Contact_ID_Ref; w.Mobile = curr.Mobile; //Add Contacts to Table if (contactManager != null) { contactManager.AddContact_ByDetails(w); } } }); } } } catch (Exception eX) { string _Message = string.Empty; string _StackTrace = string.Empty; if (eX.InnerException != null) { _Message = eX.InnerException.Message; _StackTrace = eX.InnerException.StackTrace; } else { _Message = eX.Message; _StackTrace = eX.StackTrace; } var mEx = new Exceptions(logging, _Message, _StackTrace); if (mEx != null) { mEx.HandleException(mEx, logging); } } try { ////// Query Contacts and Music var music = musicStore.GetMusic_Collection <Music>(); if (music != null) { if (musicManager != null) { var QueryMusic = musicManager.GetMusicCollection_ByContactID <Music>(curr.Contact_ID_Ref); music.ForEach(w => { if (QueryMusic.SingleOrDefault(i => i.User_ID == curr.Contact_ID_Ref) == null) { w.Sys_Creation = DateTime.Now; w.Sys_Transaction = DateTime.Now; w.User_ID = curr.Contact_ID_Ref; //Add Music to Table if (musicManager != null) { musicManager.AddMusic(w); } } }); } } } catch (Exception mX) { string _Message = string.Empty; string _StackTrace = string.Empty; if (mX.InnerException != null) { _Message = mX.InnerException.Message; _StackTrace = mX.InnerException.StackTrace; } else { _Message = mX.Message; _StackTrace = mX.StackTrace; } var mEx = new Exceptions(logging, _Message, _StackTrace); if (mEx != null) { mEx.HandleException(mEx, logging); } } } else { //Check Cloud Service for the Site user's membership and generate an account locally if (Username.Equals("apple", StringComparison.OrdinalIgnoreCase) && Password.Equals("password", StringComparison.OrdinalIgnoreCase)) { //Generate Account Account obj = new Account(); obj.Contact_ID_Ref = Guid.NewGuid().ToString(); obj.FirstName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("Apple"); obj.LastName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("Inc"); obj.SiteUser_DisplayName = $"{ obj.FirstName } { obj.LastName }"; obj.Sys_Creation = DateTime.Now; obj.Sys_Transaction = DateTime.Now; //Has the passwords on account generation and on login obj.Username = Username; obj.Password = hashedPassword; obj.Mobile = ""; obj.Work = ""; obj.Email = Username; obj.Home = ""; Constants.InMemory_ContactID = obj.Contact_ID_Ref; accountManager.AddAccount_ByHashedPassword(obj); } else { DataVaultAccountServiceClient accountsClient = new DataVaultAccountServiceClient(ConfigurationManager.InSecurePublicBinding(), new System.ServiceModel.EndpointAddress(Constants.AccountsInSecureUrl)); var dataClient = accountsClient._Login_AccountForUserCredentials(Username, Password); if (dataClient.SiteUser != null) { var curr = dataClient.SiteUser; Constants.InMemory_ContactID = curr.User_ID; //Generate Account Account obj = new Account(); obj.Contact_ID_Ref = curr.User_ID; obj.FirstName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(curr.First_Name); obj.LastName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(curr.Last_Name); obj.SiteUser_DisplayName = $"{ obj.FirstName } { obj.LastName }"; obj.Sys_Creation = DateTime.Now; obj.Sys_Transaction = DateTime.Now; //Has the passwords on account generation and on login obj.Username = Username; obj.Password = hashedPassword; obj.Mobile = curr.Mobile; obj.Work = curr.Work; obj.Email = Username; obj.Home = curr.Home; obj.Avatar = curr.Avatar; accountManager.AddAccount_ByHashedPassword(obj); //Add account to local store #region Save Credentials to Keychain if Remember me is Enabled var credentialsStore = Xamarin.Auth.AccountStore.Create(); var AccountDetails = new Xamarin.Auth.Account(); AccountDetails.Properties.Clear(); if (RememberMe) { AccountDetails.Username = Username; AccountDetails.Properties.Add("RememberMe", "true"); } else { AccountDetails.Username = Username; AccountDetails.Properties.Add("RememberMe", "false"); } credentialsStore.Save(AccountDetails, Credentials_Service); #endregion try { var contacts = contactStore.Get_ContactsFromStore <Contact>(); if (contacts != null) { if (contactManager != null) { var QueryContacts = contactManager.Get_Contacts_ByUserID <Contact>(curr.User_ID); contacts.ForEach(w => { //Add Contact to the contact store for the particular account if (QueryContacts.SingleOrDefault(i => i.Contact_ID == w.Contact_ID && i.User_ID == curr.User_ID) == null) { w.Sys_Creation = DateTime.Now; w.Sys_Transaction = DateTime.Now; w.Contact_ID = contactManager.Get_NewContactID(); w.User_ID = curr.User_ID; //Add Contacts to Table if (contactManager != null) { contactManager.AddContact_ByDetails(w); } } }); } } var music = musicStore.GetMusic_Collection <Music>(); // Query Contacts and Music if (music != null) { if (musicManager != null) { var QueryMusic = musicManager.GetMusicCollection_ByContactID <Music>(curr.User_ID); music.ForEach(w => { if (QueryMusic.SingleOrDefault(i => i.User_ID == curr.User_ID) == null) { w.Sys_Creation = DateTime.Now; w.Sys_Transaction = DateTime.Now; w.User_ID = curr.User_ID; //Add Music to Table if (musicManager != null) { musicManager.AddMusic(w); } } }); } } } catch (Exception eX) { string oMessage = string.Empty; string oStackTrace = string.Empty; if (eX.InnerException != null) { oMessage = eX.InnerException.Message; oStackTrace = eX.InnerException.StackTrace; } else { oMessage = eX.Message; oStackTrace = eX.StackTrace; } var mEx = new Exceptions(logging, oMessage, oStackTrace); if (mEx != null) { mEx.HandleException(mEx, logging); } } } else { throw new MemberAccessException("Authentication failure. The credentials you have provided are not valid. Please register an account"); } } } } else { throw new ArgumentNullException("iOC Dependency is null. Please contact site administrator for assistance"); } } catch (Exception ex) { HasError = true; _Failure = true; if (ex.InnerException != null) { Message = ex.InnerException.Message; StackTrace = ex.InnerException.StackTrace; } else { Message = ex.Message; StackTrace = ex.StackTrace; } var mEx = new Exceptions(logging, Message, StackTrace); if (mEx != null) { mEx.HandleException(mEx, logging); } } }).ContinueWith((e) => { Device.BeginInvokeOnMainThread(() => { Animate = false; if (_Failure) { //Output a dialogue here if (dialogue != null) { dialogue.ShowAlert("mmm...Something went wrong", Message); } } else { if (this.navigation != null) { this.navigation.NavigateToViewModelAsync <HomeViewModel>(true); } } }); }); }
public async void Register() { RegAnimate = true; bool _Error = false; //Diagnostics string Message = string.Empty; string StackTrace = string.Empty; //Register user credentials await Task.Run(() => { try { if (string.IsNullOrWhiteSpace(Username)) { throw new ArgumentNullException("Username cannot be empty. Please try again"); } if (string.IsNullOrWhiteSpace(Password)) { throw new ArgumentNullException("Password cannot be empty. Please try again"); } if (string.IsNullOrWhiteSpace(ConfirmPassword)) { throw new ArgumentNullException("Password cannot be empty. Please try again"); } if (!Password.Equals(ConfirmPassword)) { throw new ArgumentNullException("Passwords do not match"); } //Regex validation = new Regex(_EmailValidator, RegexOptions.CultureInvariant); //if (!validation.IsMatch(Username)) // throw new InvalidDataException("Your username does not appear to be an email address. Please try again"); //First & Last Name if (string.IsNullOrWhiteSpace(FirstName)) { throw new ArgumentNullException("First name cannot be empty"); } if (string.IsNullOrWhiteSpace(LastName)) { throw new ArgumentNullException("Last name cannot be empty"); } //Generate Account Account obj = new Account(); obj.Contact_ID_Ref = Guid.NewGuid().ToString(); obj.FirstName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(FirstName); obj.LastName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(LastName); obj.SiteUser_DisplayName = $"{ obj.FirstName } { obj.LastName }"; obj.Sys_Creation = DateTime.Now; obj.Sys_Transaction = DateTime.Now; //Has the passwords on account generation and on login PasswordEncoder hasher = new PasswordEncoder(); obj.Username = Username; obj.Password = Password; obj.Mobile = Mobile; obj.Work = Work; obj.Email = Username; obj.Home = Home; obj.Avatar = Avatar_File; obj.Avatar_FilePath = Avatar; if (accountManager != null) { var hashedPassword = hasher.Encode(Password, EncryptType.SHA_512); if (!accountManager.AuthenticateSiteUser_ByCredentials(obj.Username, hashedPassword)) { //Add Accounts via the server Via a background service. Update the Guid based on the Id Task.Run(() => { try { DataVaultAccountServiceClient serviceClient = new DataVaultAccountServiceClient(ConfigurationManager.InSecurePublicBinding(), new System.ServiceModel.EndpointAddress(Constants.AccountsInSecureUrl)); var response = serviceClient._Generate_AccountForUser(LocalMapper.MapAccount_ToServer(obj)); if (response.Errors.Count != 0) { response.Errors.ForEach(w => { var log = LocalMapper.Map_LogWithError(w, string.Empty, Guid.NewGuid().ToString(), Guid.NewGuid().ToString()); if (this.logging != null) { this.logging.AddLog(log); } }); } else { accountManager.Update_AccountGuidByUsername(Username, response.Contact_ID); Constants.InMemory_ContactID = response.Contact_ID; } } catch (Exception oEx) { string sMessage = string.Empty; string sStackTrace = string.Empty; if (oEx.InnerException != null) { sMessage = oEx.InnerException.Message; sStackTrace = oEx.InnerException.StackTrace; } else { sMessage = oEx.Message; sStackTrace = oEx.StackTrace; } var mEx = new Exceptions(logging, sMessage, sStackTrace); if (mEx != null) { mEx.HandleException(mEx, logging); } } }); obj.Password = hashedPassword; accountManager.AddAccount_ByHashedPassword(obj); } else { throw new MemberAccessException("This account already exists. Please try a different username"); } } else { throw new ArgumentNullException("Dependency cannot be null. Please review the source code and contact site administrator for assistance"); } } catch (Exception ex) { HasError = true; _Error = true; if (ex.Message.Contains("Passwords do not match")) { ErrorMessage = "Passwords do not match"; } else { ErrorMessage = "Invalid username or password"; } if (ex.InnerException != null) { Message = ex.InnerException.Message; StackTrace = ex.InnerException.StackTrace; } else { Message = ex.Message; StackTrace = ex.StackTrace; } var pEx = new Exceptions(logging, Message, StackTrace); if (pEx != null) { pEx.HandleException(pEx, logging); } } }).WaitUntilComplete(TimeSpan.FromSeconds(4), () => { Device.BeginInvokeOnMainThread(() => { RegAnimate = false; if (!_Error) { if (navigation != null) { navigation.GoBackAsync(true); } } else { dialogue.ShowAlert("mmm...Something went wrong", Message); } }); }); }