Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
andrew-schofield committed Apr 10, 2017
2 parents adfb02d + cd00b7b commit 2d40864
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 27 deletions.
31 changes: 8 additions & 23 deletions HaveIBeenPwned/CloudbleedChecker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,35 +45,20 @@ public async override Task<List<BreachedEntry>> CheckDatabase(bool expireEntries
foreach (var entry in entries)
{
progressForm.SetProgress((uint)((double)counter / entryCount * 100));
var url = entry.Strings.ReadSafe(PwDefs.UrlField).ToLower();
var url = entry.GetUrlDomain();
progressForm.SetText(string.Format("Checking {0} for breaches", url), KeePassLib.Interfaces.LogStatusType.Info);
if (!string.IsNullOrEmpty(url))
{
if(!url.Contains("://"))
{
// add http as a fallback protocol
url = string.Format("http://{0}", url);
}

try
{
var lastModified = entry.GetPasswordLastModified();
var domainBreaches = breaches.Where(b => url == b && (!oldEntriesOnly || lastModified < new DateTime(2017, 02, 17)));
if (domainBreaches.Any())
{
var uri = new Uri(url).DnsSafeHost;
if (uri.StartsWith("www."))
{
uri = uri.Skip(4).ToString();
}
var lastModified = entry.GetPasswordLastModified();
var domainBreaches = breaches.Where(b => uri == b && (!oldEntriesOnly || lastModified < new DateTime(2017, 02, 17)));
if (domainBreaches.Any())
breachedEntries.Add(new BreachedEntry(entry, cloudbleedEntry));
if (expireEntries)
{
breachedEntries.Add(new BreachedEntry(entry, cloudbleedEntry));
if (expireEntries)
{
ExpireEntry(entry);
}
ExpireEntry(entry);
}
}
catch(UriFormatException) { }
}
counter++;
if(progressForm.UserCancelled)
Expand Down
4 changes: 2 additions & 2 deletions HaveIBeenPwned/HaveIBeenPwnedChecker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,13 @@ public async override Task<List<BreachedEntry>> CheckDatabase(bool expireEntries
foreach (var entry in entries)
{
progressForm.SetProgress((uint)((double)counter / entryCount * 100));
var url = entry.Strings.ReadSafe(PwDefs.UrlField).ToLower();
var url = entry.GetUrlDomain();
progressForm.SetText(string.Format("Checking {0} for breaches", url), KeePassLib.Interfaces.LogStatusType.Info);
var userName = entry.Strings.ReadSafe(PwDefs.UserNameField);
var lastModified = entry.GetPasswordLastModified();
if(!string.IsNullOrEmpty(url))
{
var domainBreaches = breaches.Where(b => !string.IsNullOrWhiteSpace(b.Domain) && url.Contains(b.Domain) && (!oldEntriesOnly || lastModified < b.BreachDate)).OrderBy(b => b.BreachDate);
var domainBreaches = breaches.Where(b => !string.IsNullOrWhiteSpace(b.Domain) && url == b.Domain && (!oldEntriesOnly || lastModified < b.BreachDate)).OrderBy(b => b.BreachDate);
if (domainBreaches.Any())
{
breachedEntries.Add(new BreachedEntry(entry, domainBreaches.Last()));
Expand Down
30 changes: 28 additions & 2 deletions HaveIBeenPwned/PwEntryExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ public static class PwEntryExtensions
{
public static DateTime GetPasswordLastModified(this PwEntry entry)
{
if(entry.History != null && entry.History.Any())
if (entry.History != null && entry.History.Any())
{
var sortedEntries = entry.History.OrderByDescending(h => h.LastModificationTime);
foreach(var historyEntry in sortedEntries)
foreach (var historyEntry in sortedEntries)
{
if(!entry.Strings.GetSafe(PwDefs.PasswordField).Equals(historyEntry.Strings.GetSafe(PwDefs.PasswordField)))
{
Expand All @@ -29,5 +29,31 @@ public static bool IsDeleted(this PwEntry entry, IPluginHost pluginHost)
{
return entry.ParentGroup.Uuid.CompareTo(pluginHost.Database.RecycleBinUuid) == 0;
}

public static string GetUrlDomain(this PwEntry entry)
{
var url = entry.Strings.ReadSafe(PwDefs.UrlField).ToLower();
if (string.IsNullOrWhiteSpace(url))
{
return string.Empty;
}

if (!url.Contains("://"))
{
// add http as a fallback protocol
url = string.Format("http://{0}", url);
}

try
{
var domain = new Uri(url).DnsSafeHost;
if (domain.StartsWith("www."))
{
domain = domain.Substring(4);
}
return domain;
}
catch (UriFormatException) { return string.Empty; }
}
}
}

0 comments on commit 2d40864

Please sign in to comment.