Added: Support for "@" and "*" records for enabled/disable dns and ip mode

switch. Only when only one site exists.

Fixed: Smartermail domain retrieval to handle records with same domain name

Fixed: Added not-domain dependendent services globaldnssupport upon space
or domain creation
This commit is contained in:
robvde 2012-10-25 13:35:07 +04:00
parent f067884ec4
commit aafb82015b
14 changed files with 839 additions and 313 deletions

View file

@ -1651,13 +1651,16 @@ namespace WebsitePanel.EnterpriseServer
public static DomainInfo GetDomain(string domainName)
{
// get domain by name
DomainInfo domain = GetDomainItem(domainName);
// return
return GetDomain(domain);
return ObjectUtils.FillObjectFromDataReader<DomainInfo>(
DataProvider.GetDomainByName(SecurityContext.User.UserId, domainName,false, false));
}
public static DomainInfo GetDomain(string domainName, bool searchOnDomainPointer, bool isDomainPointer)
{
return GetDomainItem(domainName, searchOnDomainPointer, isDomainPointer);
}
private static DomainInfo GetDomain(DomainInfo domain)
{
// check domain
@ -1666,7 +1669,7 @@ namespace WebsitePanel.EnterpriseServer
// get instant alias
domain.InstantAliasName = GetDomainAlias(domain.PackageId, domain.DomainName);
DomainInfo instantAlias = GetDomainItem(domain.InstantAliasName);
DomainInfo instantAlias = GetDomainItem(domain.InstantAliasName, true, false);
if (instantAlias != null)
domain.InstantAliasId = instantAlias.DomainId;
@ -1681,17 +1684,16 @@ namespace WebsitePanel.EnterpriseServer
public static DomainInfo GetDomainItem(string domainName)
{
return ObjectUtils.FillObjectFromDataReader<DomainInfo>(
DataProvider.GetDomainByName(SecurityContext.User.UserId, domainName));
return GetDomainItem(domainName, false, false);
}
public static DomainInfo GetDomainItem(string domainName, bool IsDomainPointer)
public static DomainInfo GetDomainItem(string domainName, bool searchOnDomainPointer, bool isDomainPointer)
{
return ObjectUtils.FillObjectFromDataReader<DomainInfo>(
DataProvider.GetDomainByNameByPointer(SecurityContext.User.UserId, domainName, IsDomainPointer));
DataProvider.GetDomainByName(SecurityContext.User.UserId, domainName, searchOnDomainPointer, isDomainPointer));
}
public static string GetDomainAlias(int packageId, string domainName)
{
// load package settings
@ -1740,6 +1742,16 @@ namespace WebsitePanel.EnterpriseServer
{
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Os, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Dns, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Ftp, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2000, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2005, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2008, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2012, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MySql4, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MySql5, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Statistics, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.VPS, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.VPSForPC, domain, "");
}
}
@ -1912,6 +1924,11 @@ namespace WebsitePanel.EnterpriseServer
}
public static void AddServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP)
{
AddServiceDNSRecords(packageId, groupName, domain, serviceIP, false);
}
public static void AddServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP, bool wildcardOnly)
{
int serviceId = PackageController.GetPackageServiceId(packageId, groupName);
if (serviceId > 0)
@ -1919,6 +1936,19 @@ namespace WebsitePanel.EnterpriseServer
List<DnsRecord> tmpZoneRecords = new List<DnsRecord>();
List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(serviceId);
if (wildcardOnly)
{
List<GlobalDnsRecord> temp = new List<GlobalDnsRecord>();
foreach (GlobalDnsRecord d in dnsRecords)
{
if ((d.RecordName == "*") ||
(d.RecordName == "@"))
temp.Add(d);
}
dnsRecords = temp;
}
DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId);
tmpZoneRecords.AddRange(DnsServerController.BuildDnsResourceRecords(dnsRecords, "", domain.ZoneName, serviceIP));
@ -1949,13 +1979,25 @@ namespace WebsitePanel.EnterpriseServer
public static void RemoveServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP)
public static void RemoveServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP, bool wildcardOnly)
{
int serviceId = PackageController.GetPackageServiceId(packageId, groupName);
if (serviceId > 0)
{
List<DnsRecord> zoneRecords = new List<DnsRecord>();
List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(serviceId);
if (wildcardOnly)
{
List<GlobalDnsRecord> temp = new List<GlobalDnsRecord>();
foreach (GlobalDnsRecord d in dnsRecords)
{
if ((d.RecordName == "*") ||
(d.RecordName == "@"))
temp.Add(d);
}
dnsRecords = temp;
}
DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId);
zoneRecords.AddRange(DnsServerController.BuildDnsResourceRecords(dnsRecords, "", domain.ZoneName, serviceIP));
@ -2266,6 +2308,16 @@ namespace WebsitePanel.EnterpriseServer
switch (group.GroupName)
{
case ResourceGroups.Dns:
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Ftp, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2000, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2005, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2008, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2012, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MySql4, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MySql5, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Statistics, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.VPS, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.VPSForPC, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Dns, domain, "");
break;
case ResourceGroups.Os:
@ -2329,21 +2381,44 @@ namespace WebsitePanel.EnterpriseServer
List<WebSite> sites = WebServerController.GetWebSites(domain.PackageId, false);
foreach (WebSite w in sites)
{
if (w.SiteId.ToLower().Replace("." + domain.DomainName.ToLower(), "").IndexOf('.') == -1)
if ((w.SiteId.ToLower().Replace("." + domain.DomainName.ToLower(), "").IndexOf('.') == -1) ||
(w.SiteId.ToLower() == domain.DomainName.ToLower()))
{
WebServerController.AddWebSitePointer(w.Id, w.SiteId.ToLower().Replace("." + domain.DomainName.ToLower(), ""), domain.DomainId, false, true, true);
WebServerController.AddWebSitePointer( w.Id,
(w.SiteId.ToLower() == domain.DomainName.ToLower()) ? "" : w.SiteId.ToLower().Replace("." + domain.DomainName.ToLower(), ""),
domain.DomainId, false, true, true);
}
List<DomainInfo> pointers = WebServerController.GetWebSitePointers(w.Id);
foreach (DomainInfo pointer in pointers)
{
if (pointer.DomainName.ToLower().Replace("." + domain.DomainName.ToLower(), "").IndexOf('.') == -1)
if ((pointer.DomainName.ToLower().Replace("." + domain.DomainName.ToLower(), "").IndexOf('.') == -1)||
(pointer.DomainName.ToLower() == domain.DomainName.ToLower()))
{
WebServerController.AddWebSitePointer(w.Id, pointer.DomainName.ToLower().Replace("." + domain.DomainName.ToLower(), ""), domain.DomainId, false, true, true);
WebServerController.AddWebSitePointer( w.Id,
(pointer.DomainName.ToLower() == domain.DomainName.ToLower()) ? "" : pointer.DomainName.ToLower().Replace("." + domain.DomainName.ToLower(), ""),
domain.DomainId, false, true, true);
}
}
}
if (sites.Count == 1)
{
// load site item
IPAddressInfo ip = ServerController.GetIPAddress(sites[0].SiteIPAddressId);
string serviceIp = (ip != null) ? ip.ExternalIP : null;
if (string.IsNullOrEmpty(serviceIp))
{
StringDictionary settings = ServerController.GetServiceSettings(sites[0].ServiceId);
if (settings["PublicSharedIP"] != null)
serviceIp = settings["PublicSharedIP"].ToString();
}
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Web, domain, serviceIp, true);
}
break;
}
}
@ -2479,7 +2554,7 @@ namespace WebsitePanel.EnterpriseServer
try
{
// load instant alias domain
DomainInfo instantAlias = GetDomainItem(domain.InstantAliasName, false);
DomainInfo instantAlias = GetDomainItem(domain.InstantAliasName, true, false);
if (instantAlias == null)
return 0;