public void LoadDataFromCache() { PasswordCheckDataList.Clear(); try { string jsonContent = File.ReadAllText(CacheFilePath, Encoding.UTF8); JObject json = JObject.Parse(jsonContent); LastCheck = Newtonsoft.Json.JsonConvert.DeserializeObject <DateTime>( json[nameof(LastCheck)].ToString(), PasswordCheckData.dateTimeConverter); NumberOfPassword = json[nameof(NumberOfPassword)].ToObject <int>(); NumberOfSkippedPassword = json[nameof(NumberOfSkippedPassword)].ToObject <int>(); JArray jArray = json["data"].ToObject <JArray>(); foreach (JObject jsonData in jArray) { PasswordCheckData item = new PasswordCheckData(); item.LoadFromJSON(jsonData); PasswordCheckDataList.Add(item); } } catch (Exception Ex) { Debug.WriteLine("Unable to load data from the file " + CacheFilePath + ". Error: " + Ex.Message); throw new Exception(string.Format(AppResources.errPwdCheckerLoadFileFailed, Ex.Message)); } }
public async Task VerifyPasswords() { var accounts = await App.PwdManager.GetPasswordList(); int itemId = 0, numItems = accounts.Count, numSkip = 0; PasswordCheckDataList.Clear(); foreach (PwdListItem item in accounts) { try { if (item.SkipCheck) { numSkip++; continue; } Zxcvbn.Result result = Checker.EvaluatePassword(item.Password); bool bOld = IsPasswordToOld(item); bool bWeak = IsPasswordTooWeak(result); if (bOld || bWeak) { PasswordCheckData checkData = new PasswordCheckData { PwdId = item.Id, LastChange = item.LastPwdChangeDateTime }; if (bOld) { checkData.Issues.Add(PwdIssue.TooOld); } if (bWeak) { checkData.Issues.Add(PwdIssue.TooWeak); } checkData.StrengthData.CalcTime = result.CalcTime; checkData.StrengthData.CrackTime = result.CrackTime; checkData.StrengthData.Entropy = Math.Round(result.Entropy) - 1; checkData.StrengthData.Score = result.Score; PasswordCheckDataList.Add(checkData); } } finally { Device.BeginInvokeOnMainThread(() => { OnVerify?.Invoke(++itemId, numItems, item); }); } } LastCheck = DateTime.Now; NumberOfPassword = numItems; NumberOfSkippedPassword = numSkip; SaveCache(); }