diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql
index 685b6b2d..0b4c21ad 100644
--- a/WebsitePanel/Database/update_db.sql
+++ b/WebsitePanel/Database/update_db.sql
@@ -6249,7 +6249,7 @@ Please, find below details of your domain expiration information.
#Domain.DomainName# |
#Domain.Customer# |
- #Domain.ExpirationDate# |
+ Expired |
@@ -6313,7 +6313,7 @@ Please, find below details of your domain expiration information.
Domain: #Domain.DomainName#
Customer: #Domain.Customer#
- Expiration Date: #Domain.ExpirationDate#
+ Expiration Date: Expired
@@ -6393,7 +6393,8 @@ Please, find below details of MX and NS changes.
DNS |
Type |
Status |
- Value |
+ Old Value |
+ New Value |
@@ -6402,7 +6403,8 @@ Please, find below details of MX and NS changes.
#DnsChange.DnsServer# |
#DnsChange.Type# |
#DnsChange.Status# |
- #DnsChange.Record.Value# |
+ #DnsChange.OldRecord.Value# |
+ #DnsChange.NewRecord.Value# |
@@ -6449,8 +6451,9 @@ Please, find below MX and NS Changes Information.
DNS: #DnsChange.DnsServer#
Type: #DnsChange.Type#
- Status: #DnsChange.Status#
- Value: #DnsChange.Record.Value#
+ Status: #DnsChange.Status#
+ Old Value: #DnsChange.OldRecord.Value#
+ New Value: #DnsChange.NewRecord.Value#
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs
index 34468cbf..9fb16aad 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs
@@ -60,11 +60,9 @@ namespace WebsitePanel.EnterpriseServer
subDomains.AddRange(domains.Where(x => x.IsSubDomain));
- var topLevelDomains = domains = domains.Where(x => !x.IsSubDomain && !x.IsDomainPointer).ToList(); //Selecting top-level domains
+ domains = domains.Where(x => !x.IsSubDomain && !x.IsDomainPointer).ToList(); //Selecting top-level domains
- allTopLevelDomains.AddRange(topLevelDomains);
-
- domains = topLevelDomains.Where(x => x.CreationDate == null || x.ExpirationDate == null ? true : CheckDomainExpiration(x.ExpirationDate, daysBeforeNotify)).ToList(); // selecting expired or with empty expire date domains
+ allTopLevelDomains.AddRange(domains);
var domainUser = UserController.GetUser(package.UserId);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs
index b5a7c8ee..150c9c25 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs
@@ -99,6 +99,8 @@ namespace WebsitePanel.EnterpriseServer
domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(dbDnsRecords.Where(x => x.RecordType == DnsRecordType.MX), dnsMxRecords, dnsServer));
domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(dbDnsRecords.Where(x => x.RecordType == DnsRecordType.NS), dnsNsRecords, dnsServer));
+
+ domainChanges.DnsChanges = CombineDnsRecordChanges(domainChanges.DnsChanges, dnsServer).ToList();
}
domainsChanges.Add(domainChanges);
@@ -150,13 +152,13 @@ namespace WebsitePanel.EnterpriseServer
if (dnsRecord != null)
{
- dnsRecordChanges.Add(new DnsRecordInfoChange { Record = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.NotChanged, DnsServer = dnsServer });
+ dnsRecordChanges.Add(new DnsRecordInfoChange { OldRecord = record, NewRecord = dnsRecord, Type = record.RecordType, Status = DomainDnsRecordStatuses.NotChanged, DnsServer = dnsServer });
dnsRecords.Remove(dnsRecord);
}
else
{
- dnsRecordChanges.Add(new DnsRecordInfoChange { Record = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Removed, DnsServer = dnsServer });
+ dnsRecordChanges.Add(new DnsRecordInfoChange { OldRecord = record, NewRecord = new DnsRecordInfo { Value = string.Empty}, Type = record.RecordType, Status = DomainDnsRecordStatuses.Removed, DnsServer = dnsServer });
RemoveRecord(record);
}
@@ -164,7 +166,7 @@ namespace WebsitePanel.EnterpriseServer
foreach (var record in dnsRecords)
{
- dnsRecordChanges.Add(new DnsRecordInfoChange { Record = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Added, DnsServer= dnsServer});
+ dnsRecordChanges.Add(new DnsRecordInfoChange { OldRecord = new DnsRecordInfo { Value = string.Empty }, NewRecord = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Added, DnsServer = dnsServer });
AddRecord(record);
}
@@ -172,6 +174,39 @@ namespace WebsitePanel.EnterpriseServer
return dnsRecordChanges;
}
+ private IEnumerable CombineDnsRecordChanges(IEnumerable records, string dnsServer)
+ {
+ var resultRecords = records.Where(x => x.DnsServer == dnsServer).ToList();
+
+ var recordsToRemove = new List();
+
+ var removedRecords = records.Where(x => x.Status == DomainDnsRecordStatuses.Removed);
+ var addedRecords = records.Where(x => x.Status == DomainDnsRecordStatuses.Added);
+
+ foreach (DnsRecordType type in (DnsRecordType[])Enum.GetValues(typeof(DnsRecordType)))
+ {
+ foreach (var removedRecord in removedRecords.Where(x => x.Type == type))
+ {
+ var addedRecord = addedRecords.FirstOrDefault(x => x.Type == type && !recordsToRemove.Contains(x));
+
+ if (addedRecord != null)
+ {
+ recordsToRemove.Add(addedRecord);
+
+ removedRecord.NewRecord = addedRecord.NewRecord;
+ removedRecord.Status = DomainDnsRecordStatuses.Updated;
+ }
+ }
+ }
+
+ foreach (var record in recordsToRemove)
+ {
+ resultRecords.Remove(record);
+ }
+
+ return resultRecords;
+ }
+
private void FillRecordData(IEnumerable records, DomainInfo domain, string dnsServer)
{
foreach (var record in records)
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs
index 47444aeb..820fce03 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs
@@ -42,6 +42,8 @@ using WebsitePanel.Providers.HostedSolution;
using Whois.NET;
using System.Text.RegularExpressions;
using WebsitePanel.Providers.DomainLookup;
+using System.Globalization;
+using System.Linq;
namespace WebsitePanel.EnterpriseServer
{
@@ -72,6 +74,9 @@ namespace WebsitePanel.EnterpriseServer
@"expires:(.+)" //.fi
};
+ private static List _datePatterns = new List { @"ddd MMM dd HH:mm:ss G\MT yyyy"
+ };
+
#region Servers
public static List GetAllServers()
{
@@ -1641,11 +1646,16 @@ namespace WebsitePanel.EnterpriseServer
{
var result = new List();
- var mxRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainDnsRecords(domainId, DnsRecordType.MX));
- var nsRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainDnsRecords(domainId, DnsRecordType.NS));
+ var records = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainAllDnsRecords(domainId));
- result.AddRange(mxRecords);
- result.AddRange(nsRecords);
+ var activeDomain = records.OrderByDescending(x => x.Date).FirstOrDefault();
+
+ if (activeDomain != null)
+ {
+ records = records.Where(x => x.DnsServer == activeDomain.DnsServer).ToList();
+ }
+
+ result.AddRange(records);
return result;
}
@@ -2723,7 +2733,7 @@ namespace WebsitePanel.EnterpriseServer
{
if (match.Success && match.Groups.Count == 2)
{
- return DateTime.Parse(match.Groups[1].ToString().Trim());
+ return ParseDate(match.Groups[1].ToString().Trim());
}
}
}
@@ -2731,6 +2741,21 @@ namespace WebsitePanel.EnterpriseServer
return null;
}
+ private static DateTime? ParseDate(string dateString)
+ {
+ var result = DateTime.MinValue;
+
+ foreach (var datePattern in _datePatterns)
+ {
+ if (DateTime.TryParseExact(dateString, datePattern, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
+ {
+ return result;
+ }
+ }
+
+ return DateTime.Parse(dateString);
+ }
+
#endregion
#region DNS Zones
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs
index 183c16e0..a5c0306b 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs
@@ -9,7 +9,8 @@ namespace WebsitePanel.Providers.DomainLookup
public class DnsRecordInfoChange
{
public string DnsServer { get; set; }
- public DnsRecordInfo Record { get; set; }
+ public DnsRecordInfo OldRecord { get; set; }
+ public DnsRecordInfo NewRecord { get; set; }
public DomainDnsRecordStatuses Status { get; set; }
public DnsRecordType Type { get; set; }
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs
index 88fa25ed..33bddf37 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs
@@ -9,6 +9,7 @@ namespace WebsitePanel.Providers.DomainLookup
{
NotChanged,
Removed,
- Added
+ Added,
+ Updated
}
}