DOmain Pointers adjusted:
When creating a new website the GlobalDNSRecord configuration defines the hostheaders/websitepointer to be created Various forms updated where the hostname field is set to www GlobalDNSRecord allows empty recordData field To create related dns records when creating a hostheader/website pointer with the specification of a hostname a 'A' or 'CNAME' globalDNSRecord definition of '[host_name]' is required to create the the dns record.
This commit is contained in:
parent
b54e810508
commit
9c9337ab94
14 changed files with 217 additions and 237 deletions
|
@ -102,7 +102,6 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
if (allowEmptyValue)
|
if (allowEmptyValue)
|
||||||
{
|
{
|
||||||
if (String.IsNullOrEmpty(str)) return str;
|
if (String.IsNullOrEmpty(str)) return str;
|
||||||
if (String.IsNullOrEmpty(value)) return string.Empty;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -310,7 +310,10 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
rr.MxPriority = record.MxPriority;
|
rr.MxPriority = record.MxPriority;
|
||||||
|
|
||||||
if (!String.IsNullOrEmpty(rr.RecordData))
|
if (!String.IsNullOrEmpty(rr.RecordData))
|
||||||
zoneRecords.Add(rr);
|
{
|
||||||
|
if (rr.RecordName != "[host_name]")
|
||||||
|
zoneRecords.Add(rr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return zoneRecords;
|
return zoneRecords;
|
||||||
|
|
|
@ -2005,7 +2005,8 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete zone if required
|
// delete zone if required
|
||||||
DnsServerController.DeleteZone(domain.ZoneItemId);
|
if (!domain.IsDomainPointer)
|
||||||
|
DnsServerController.DeleteZone(domain.ZoneItemId);
|
||||||
|
|
||||||
// delete domain
|
// delete domain
|
||||||
DataProvider.DeleteDomain(SecurityContext.User.UserId, domainId);
|
DataProvider.DeleteDomain(SecurityContext.User.UserId, domainId);
|
||||||
|
|
|
@ -240,13 +240,12 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP;
|
ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP;
|
||||||
|
|
||||||
// load domain instant alias
|
// load domain instant alias
|
||||||
/*
|
/*
|
||||||
string instantAlias = ServerController.GetDomainAlias(packageId, domainName);
|
string instantAlias = ServerController.GetDomainAlias(packageId, domainName);
|
||||||
DomainInfo instantDomain = ServerController.GetDomain(instantAlias);
|
DomainInfo instantDomain = ServerController.GetDomain(instantAlias);
|
||||||
if (instantDomain == null || instantDomain.WebSiteId > 0)
|
if (instantDomain == null || instantDomain.WebSiteId > 0)
|
||||||
instantAlias = "";
|
instantAlias = "";
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// load web DNS records
|
// load web DNS records
|
||||||
List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(serviceId);
|
List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(serviceId);
|
||||||
|
|
||||||
|
@ -257,17 +256,18 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
{
|
{
|
||||||
// SHARED IP
|
// SHARED IP
|
||||||
// fill main domain bindings
|
// fill main domain bindings
|
||||||
/*
|
FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, false);
|
||||||
FillWebServerBindings(bindings, dnsRecords, ipAddr, domain.DomainName);
|
|
||||||
|
|
||||||
// fill alias bindings if required
|
// fill alias bindings if required
|
||||||
|
/*
|
||||||
if (addInstantAlias && !String.IsNullOrEmpty(instantAlias))
|
if (addInstantAlias && !String.IsNullOrEmpty(instantAlias))
|
||||||
{
|
{
|
||||||
// fill bindings from DNS "A" records
|
// fill bindings from DNS "A" records
|
||||||
FillWebServerBindings(bindings, dnsRecords, ipAddr, instantAlias);
|
FillWebServerBindings(bindings, dnsRecords, ipAddr, "", instantAlias);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
bindings.Add(new ServerBinding(ipAddr, "80", siteName));
|
|
||||||
|
//bindings.Add(new ServerBinding(ipAddr, "80", siteName));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -396,9 +396,9 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
// add instant pointer
|
// add instant pointer
|
||||||
/*
|
/*
|
||||||
if (addInstantAlias && !String.IsNullOrEmpty(instantAlias))
|
if (addInstantAlias && !String.IsNullOrEmpty(instantAlias))
|
||||||
AddWebSitePointer(siteItemId, instantDomain.DomainId, false);
|
AddWebSitePointer(siteItemId, "", instantDomain.DomainId, false);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// add parking page
|
// add parking page
|
||||||
// load package
|
// load package
|
||||||
if (webPolicy["AddParkingPage"] != null)
|
if (webPolicy["AddParkingPage"] != null)
|
||||||
|
@ -573,12 +573,12 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
// remove all web site pointers
|
// remove all web site pointers
|
||||||
List<DomainInfo> pointers = GetWebSitePointers(siteItemId);
|
List<DomainInfo> pointers = GetWebSitePointers(siteItemId);
|
||||||
foreach (DomainInfo pointer in pointers)
|
foreach (DomainInfo pointer in pointers)
|
||||||
DeleteWebSitePointer(siteItemId, pointer.DomainId, false);
|
DeleteWebSitePointer(siteItemId, pointer.DomainId, false, true);
|
||||||
|
|
||||||
// remove web site main pointer
|
// remove web site main pointer
|
||||||
DomainInfo domain = ServerController.GetDomain(siteItem.Name);
|
DomainInfo domain = ServerController.GetDomain(siteItem.Name);
|
||||||
if(domain != null)
|
if(domain != null)
|
||||||
DeleteWebSitePointer(siteItemId, domain.DomainId, false);
|
DeleteWebSitePointer(siteItemId, domain.DomainId, false, true);
|
||||||
|
|
||||||
// delete web site
|
// delete web site
|
||||||
WebServer web = new WebServer();
|
WebServer web = new WebServer();
|
||||||
|
@ -611,7 +611,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void FillWebServerBindings(List<ServerBinding> bindings, List<GlobalDnsRecord> dnsRecords,
|
private static void FillWebServerBindings(List<ServerBinding> bindings, List<GlobalDnsRecord> dnsRecords,
|
||||||
string ipAddr, string hostName, string domainName)
|
string ipAddr, string hostName, string domainName, bool ignoreGlobalDNSRecords)
|
||||||
// TODO test if IPv6 works
|
// TODO test if IPv6 works
|
||||||
{
|
{
|
||||||
int bindingsCount = bindings.Count;
|
int bindingsCount = bindings.Count;
|
||||||
|
@ -628,25 +628,52 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
string tmpName = string.Empty;
|
string tmpName = string.Empty;
|
||||||
if (!String.IsNullOrEmpty(hostName))
|
|
||||||
tmpName = Utils.ReplaceStringVariable(dnsRecord.RecordName, "host_name", hostName);
|
|
||||||
|
|
||||||
string recordData = string.Empty;
|
tmpName = Utils.ReplaceStringVariable(dnsRecord.RecordName, "host_name", hostName);
|
||||||
if (tmpName.Contains("."))
|
|
||||||
recordData = hostName;
|
|
||||||
else
|
|
||||||
recordData = tmpName + ((tmpName != "") ? "." : "") + domainName;
|
|
||||||
|
|
||||||
bindings.Add(new ServerBinding(ipAddr, "80", recordData));
|
if (!(tmpName== "[host_name]"))
|
||||||
|
{
|
||||||
|
string recordData = string.Empty;
|
||||||
|
if (tmpName.Contains("."))
|
||||||
|
recordData = hostName;
|
||||||
|
else
|
||||||
|
recordData = tmpName + ((tmpName != "") ? "." : "") + domainName;
|
||||||
|
|
||||||
|
|
||||||
|
if (ignoreGlobalDNSRecords)
|
||||||
|
{
|
||||||
|
if (dnsRecord.RecordName == "[host_name]")
|
||||||
|
{
|
||||||
|
AddBinding(bindings, new ServerBinding(ipAddr, "80", recordData));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AddBinding(bindings, new ServerBinding(ipAddr, "80", recordData));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(bindings.Count == bindingsCount)
|
if ((bindings.Count == bindingsCount) | (bindings.Count == 0))
|
||||||
{
|
{
|
||||||
bindings.Add(new ServerBinding(ipAddr, "80", string.IsNullOrEmpty(hostName) ? domainName : hostName + "." + domainName));
|
AddBinding(bindings, new ServerBinding(ipAddr, "80", string.IsNullOrEmpty(hostName) ? domainName : hostName + "." + domainName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void AddBinding(List<ServerBinding> bindings, ServerBinding binding)
|
||||||
|
{
|
||||||
|
foreach (ServerBinding b in bindings)
|
||||||
|
{
|
||||||
|
if (string.Compare(b.Host, binding.Host, true) == 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bindings.Add(binding);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static string GetWebSiteUsername(UserSettings webPolicy, string domainName)
|
private static string GetWebSiteUsername(UserSettings webPolicy, string domainName)
|
||||||
{
|
{
|
||||||
UsernamePolicy policy = new UsernamePolicy(webPolicy["AnonymousAccountPolicy"]);
|
UsernamePolicy policy = new UsernamePolicy(webPolicy["AnonymousAccountPolicy"]);
|
||||||
|
@ -732,10 +759,15 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
public static int AddWebSitePointer(int siteItemId, string hostName, int domainId)
|
public static int AddWebSitePointer(int siteItemId, string hostName, int domainId)
|
||||||
{
|
{
|
||||||
return AddWebSitePointer(siteItemId, hostName, domainId, true);
|
return AddWebSitePointer(siteItemId, hostName, domainId, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static int AddWebSitePointer(int siteItemId, string hostName, int domainId, bool updateWebSite)
|
internal static int AddWebSitePointer(int siteItemId, string hostName, int domainId, bool updateWebSite)
|
||||||
|
{
|
||||||
|
return AddWebSitePointer(siteItemId, hostName, domainId, updateWebSite, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static int AddWebSitePointer(int siteItemId, string hostName, int domainId, bool updateWebSite, bool ignoreGlobalDNSRecords)
|
||||||
{
|
{
|
||||||
// check account
|
// check account
|
||||||
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
|
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
|
||||||
|
@ -772,14 +804,39 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
{
|
{
|
||||||
// load appropriate zone
|
// load appropriate zone
|
||||||
DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId);
|
DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId);
|
||||||
|
|
||||||
|
|
||||||
if (zone != null)
|
if (zone != null)
|
||||||
{
|
{
|
||||||
// change DNS zone
|
// change DNS zone
|
||||||
|
List<GlobalDnsRecord> tmpDnsRecords = new List<GlobalDnsRecord>();
|
||||||
|
|
||||||
string serviceIp = (ip != null) ? ip.ExternalIP : null;
|
string serviceIp = (ip != null) ? ip.ExternalIP : null;
|
||||||
|
|
||||||
|
if (ignoreGlobalDNSRecords)
|
||||||
|
{
|
||||||
|
foreach (GlobalDnsRecord r in dnsRecords)
|
||||||
|
{
|
||||||
|
if (r.RecordName == "[host_name]")
|
||||||
|
tmpDnsRecords.Add(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
tmpDnsRecords = dnsRecords;
|
||||||
|
|
||||||
|
|
||||||
List<DnsRecord> resourceRecords = DnsServerController.BuildDnsResourceRecords(
|
List<DnsRecord> resourceRecords = DnsServerController.BuildDnsResourceRecords(
|
||||||
dnsRecords, hostName, domain.DomainName, serviceIp);
|
tmpDnsRecords, hostName, domain.DomainName, serviceIp);
|
||||||
|
|
||||||
|
foreach (DnsRecord r in resourceRecords)
|
||||||
|
{
|
||||||
|
if (r.RecordName != "*")
|
||||||
|
{
|
||||||
|
// check if the web site already exists
|
||||||
|
if (DataProvider.CheckDomain(domain.PackageId, string.IsNullOrEmpty(r.RecordName) ? domain.DomainName : r.RecordName + "." + domain.DomainName, true) != 0)
|
||||||
|
return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -796,56 +853,57 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
}
|
}
|
||||||
|
|
||||||
// update host headers
|
// update host headers
|
||||||
if (updateWebSite)
|
List<ServerBinding> bindings = new List<ServerBinding>();
|
||||||
|
|
||||||
|
// get existing web site bindings
|
||||||
|
WebServer web = new WebServer();
|
||||||
|
ServiceProviderProxy.Init(web, siteItem.ServiceId);
|
||||||
|
|
||||||
|
bindings.AddRange(web.GetSiteBindings(siteItem.SiteId));
|
||||||
|
|
||||||
|
// check if web site has dedicated IP assigned
|
||||||
|
bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; });
|
||||||
|
|
||||||
|
// update binding only for "shared" ip addresses
|
||||||
|
if (!dedicatedIp)
|
||||||
{
|
{
|
||||||
// get existing web site bindings
|
// add new host headers
|
||||||
WebServer web = new WebServer();
|
string ipAddr = "*";
|
||||||
ServiceProviderProxy.Init(web, siteItem.ServiceId);
|
if (ip != null)
|
||||||
|
ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP;
|
||||||
|
|
||||||
List<ServerBinding> bindings = new List<ServerBinding>();
|
// fill bindings
|
||||||
bindings.AddRange(web.GetSiteBindings(siteItem.SiteId));
|
FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords);
|
||||||
|
|
||||||
// check if web site has dedicated IP assigned
|
foreach (ServerBinding b in bindings)
|
||||||
bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; });
|
|
||||||
|
|
||||||
// update binding only for "shared" ip addresses
|
|
||||||
if (!dedicatedIp)
|
|
||||||
{
|
{
|
||||||
// add new host headers
|
string header = string.Format("{0} {1} {2}", b.Host, b.IP, b.Port);
|
||||||
string ipAddr = "*";
|
TaskManager.WriteParameter("Add Binding", header);
|
||||||
if (ip != null)
|
|
||||||
ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP;
|
|
||||||
|
|
||||||
// fill bindings
|
|
||||||
FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName);
|
|
||||||
|
|
||||||
foreach (ServerBinding b in bindings)
|
|
||||||
{
|
|
||||||
string header = string.Format("{0} {1} {2}", b.Host, b.IP, b.Port);
|
|
||||||
TaskManager.WriteParameter("Add Binding", header);
|
|
||||||
}
|
|
||||||
|
|
||||||
// update bindings
|
|
||||||
web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update bindings
|
||||||
|
if (updateWebSite)
|
||||||
|
web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// update domain
|
// update domain
|
||||||
domain.WebSiteId = siteItemId;
|
domain.WebSiteId = siteItemId;
|
||||||
//ServerController.UpdateDomain(domain);
|
//ServerController.UpdateDomain(domain);
|
||||||
if (!String.IsNullOrEmpty(hostName))
|
|
||||||
domain.DomainName = hostName + "." + domain.DomainName;
|
|
||||||
else
|
|
||||||
domain.DomainName = domain.DomainName;
|
|
||||||
domain.IsDomainPointer = true;
|
|
||||||
int domainID = ServerController.AddDomain(domain);
|
|
||||||
|
|
||||||
DomainInfo domainTmp = ServerController.GetDomain(domainID);
|
foreach (ServerBinding b in bindings)
|
||||||
if (domainTmp != null)
|
|
||||||
{
|
{
|
||||||
domainTmp.WebSiteId = siteItemId;
|
domain.DomainName = b.Host;
|
||||||
domainTmp.ZoneItemId = domain.ZoneItemId;
|
domain.IsDomainPointer = true;
|
||||||
ServerController.UpdateDomain(domainTmp);
|
int domainID = ServerController.AddDomain(domain);
|
||||||
|
|
||||||
|
DomainInfo domainTmp = ServerController.GetDomain(domainID);
|
||||||
|
if (domainTmp != null)
|
||||||
|
{
|
||||||
|
domainTmp.WebSiteId = siteItemId;
|
||||||
|
domainTmp.ZoneItemId = domain.ZoneItemId;
|
||||||
|
ServerController.UpdateDomain(domainTmp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -863,10 +921,10 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
public static int DeleteWebSitePointer(int siteItemId, int domainId)
|
public static int DeleteWebSitePointer(int siteItemId, int domainId)
|
||||||
{
|
{
|
||||||
return DeleteWebSitePointer(siteItemId, domainId, true);
|
return DeleteWebSitePointer(siteItemId, domainId, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int DeleteWebSitePointer(int siteItemId, int domainId, bool updateWebSite)
|
public static int DeleteWebSitePointer(int siteItemId, int domainId, bool updateWebSite, bool ignoreGlobalDNSRecords)
|
||||||
{
|
{
|
||||||
// check account
|
// check account
|
||||||
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
|
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
|
||||||
|
@ -895,16 +953,29 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
TaskManager.StartTask("WEB_SITE", "DELETE_POINTER", siteItem.Name);
|
TaskManager.StartTask("WEB_SITE", "DELETE_POINTER", siteItem.Name);
|
||||||
TaskManager.ItemId = siteItemId;
|
TaskManager.ItemId = siteItemId;
|
||||||
TaskManager.WriteParameter("Domain pointer", domain.DomainName);
|
TaskManager.WriteParameter("Domain pointer", domain.DomainName);
|
||||||
|
TaskManager.WriteParameter("updateWebSite", updateWebSite.ToString());
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (zone != null)
|
if (zone != null)
|
||||||
{
|
{
|
||||||
// change DNS zone
|
// change DNS zone
|
||||||
|
List<GlobalDnsRecord> tmpDnsRecords = new List<GlobalDnsRecord>();
|
||||||
|
|
||||||
string serviceIp = (ip != null) ? ip.ExternalIP : null;
|
string serviceIp = (ip != null) ? ip.ExternalIP : null;
|
||||||
|
|
||||||
|
if (ignoreGlobalDNSRecords)
|
||||||
|
{
|
||||||
|
foreach (GlobalDnsRecord r in dnsRecords)
|
||||||
|
{
|
||||||
|
if (r.RecordName == "[host_name]")
|
||||||
|
tmpDnsRecords.Add(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else tmpDnsRecords = dnsRecords;
|
||||||
|
|
||||||
List<DnsRecord> resourceRecords = DnsServerController.BuildDnsResourceRecords(
|
List<DnsRecord> resourceRecords = DnsServerController.BuildDnsResourceRecords(
|
||||||
dnsRecords, domain.DomainName, "", serviceIp);
|
tmpDnsRecords, domain.DomainName, "", serviceIp);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -918,36 +989,34 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updateWebSite)
|
// get existing web site bindings
|
||||||
|
WebServer web = new WebServer();
|
||||||
|
ServiceProviderProxy.Init(web, siteItem.ServiceId);
|
||||||
|
|
||||||
|
List<ServerBinding> bindings = new List<ServerBinding>();
|
||||||
|
bindings.AddRange(web.GetSiteBindings(siteItem.SiteId));
|
||||||
|
|
||||||
|
// check if web site has dedicated IP assigned
|
||||||
|
bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; });
|
||||||
|
|
||||||
|
// update binding only for "shared" ip addresses
|
||||||
|
if (!dedicatedIp)
|
||||||
{
|
{
|
||||||
// get existing web site bindings
|
// remove host headers
|
||||||
WebServer web = new WebServer();
|
List<ServerBinding> domainBindings = new List<ServerBinding>();
|
||||||
ServiceProviderProxy.Init(web, siteItem.ServiceId);
|
FillWebServerBindings(domainBindings, dnsRecords, "", domain.DomainName, "", ignoreGlobalDNSRecords);
|
||||||
|
|
||||||
List<ServerBinding> bindings = new List<ServerBinding>();
|
// fill to remove list
|
||||||
bindings.AddRange(web.GetSiteBindings(siteItem.SiteId));
|
List<string> headersToRemove = new List<string>();
|
||||||
|
foreach (ServerBinding domainBinding in domainBindings)
|
||||||
|
headersToRemove.Add(domainBinding.Host);
|
||||||
|
|
||||||
// check if web site has dedicated IP assigned
|
// remove bndings
|
||||||
bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; });
|
bindings.RemoveAll(b => { return headersToRemove.Contains(b.Host) && b.Port == "80"; } );
|
||||||
|
|
||||||
// update binding only for "shared" ip addresses
|
// update bindings
|
||||||
if (!dedicatedIp)
|
if (updateWebSite)
|
||||||
{
|
|
||||||
// remove host headers
|
|
||||||
List<ServerBinding> domainBindings = new List<ServerBinding>();
|
|
||||||
FillWebServerBindings(domainBindings, dnsRecords, "", domain.DomainName, "");
|
|
||||||
|
|
||||||
// fill to remove list
|
|
||||||
List<string> headersToRemove = new List<string>();
|
|
||||||
foreach (ServerBinding domainBinding in domainBindings)
|
|
||||||
headersToRemove.Add(domainBinding.Host);
|
|
||||||
|
|
||||||
// remove bndings
|
|
||||||
bindings.RemoveAll(b => { return headersToRemove.Contains(b.Host) && b.Port == "80"; } );
|
|
||||||
|
|
||||||
// update bindings
|
|
||||||
web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray());
|
web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// update domain
|
// update domain
|
||||||
|
|
|
@ -54,10 +54,12 @@
|
||||||
<td class="SubHead"><asp:Label ID="lblRecordData" runat="server" meta:resourcekey="lblRecordData" Text="Record Data:"></asp:Label></td>
|
<td class="SubHead"><asp:Label ID="lblRecordData" runat="server" meta:resourcekey="lblRecordData" Text="Record Data:"></asp:Label></td>
|
||||||
<td class="Normal" nowrap>
|
<td class="Normal" nowrap>
|
||||||
<asp:TextBox ID="txtRecordData" runat="server" Width="260px" CssClass="NormalTextBox"></asp:TextBox><uc1:SelectIPAddress ID="ipAddress" runat="server" />
|
<asp:TextBox ID="txtRecordData" runat="server" Width="260px" CssClass="NormalTextBox"></asp:TextBox><uc1:SelectIPAddress ID="ipAddress" runat="server" />
|
||||||
|
<!--
|
||||||
<asp:RequiredFieldValidator ID="valRequireData" runat="server" ControlToValidate="txtRecordData"
|
<asp:RequiredFieldValidator ID="valRequireData" runat="server" ControlToValidate="txtRecordData"
|
||||||
ErrorMessage="*" ValidationGroup="DnsRecord" Display="Dynamic"></asp:RequiredFieldValidator>
|
ErrorMessage="*" ValidationGroup="DnsRecord" Display="Dynamic"></asp:RequiredFieldValidator>
|
||||||
|
-->
|
||||||
<asp:CustomValidator ID="IPValidator" runat="server" ControlToValidate="txtRecordData" ValidationGroup="DnsRecord" Display="Dynamic" CssClass="NormalBold"
|
<asp:CustomValidator ID="IPValidator" runat="server" ControlToValidate="txtRecordData" ValidationGroup="DnsRecord" Display="Dynamic" CssClass="NormalBold"
|
||||||
OnServerValidate="Validate" Text="Please enter a valid IP" meta:resourcekey="IPValidator"/>
|
OnServerValidate="Validate" Text="Please enter a valid IP" meta:resourcekey="IPValidator" ValidateEmptyText="True" />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="rowMXPriority" runat="server">
|
<tr id="rowMXPriority" runat="server">
|
||||||
|
|
|
@ -178,14 +178,18 @@ namespace WebsitePanel.Portal
|
||||||
protected void Validate(object source, ServerValidateEventArgs args) {
|
protected void Validate(object source, ServerValidateEventArgs args) {
|
||||||
var ip = args.Value;
|
var ip = args.Value;
|
||||||
System.Net.IPAddress ipaddr;
|
System.Net.IPAddress ipaddr;
|
||||||
args.IsValid = System.Net.IPAddress.TryParse(ip, out ipaddr) && (ip.Contains(":") || ip.Contains(".")) &&
|
if (string.IsNullOrEmpty(args.Value))
|
||||||
((ddlRecordType.SelectedValue == "A" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) ||
|
args.IsValid = true;
|
||||||
(ddlRecordType.SelectedValue == "AAAA" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6));
|
else
|
||||||
|
args.IsValid = System.Net.IPAddress.TryParse(ip, out ipaddr) && (ip.Contains(":") || ip.Contains(".")) &&
|
||||||
|
((ddlRecordType.SelectedValue == "A" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) ||
|
||||||
|
(ddlRecordType.SelectedValue == "AAAA" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveRecord()
|
private void SaveRecord()
|
||||||
{
|
{
|
||||||
if (!Page.IsValid) return;
|
if (!string.IsNullOrEmpty(txtRecordData.Text))
|
||||||
|
if (!Page.IsValid) return;
|
||||||
|
|
||||||
GlobalDnsRecord record = new GlobalDnsRecord();
|
GlobalDnsRecord record = new GlobalDnsRecord();
|
||||||
record.RecordId = (int)ViewState["RecordID"];
|
record.RecordId = (int)ViewState["RecordID"];
|
||||||
|
|
|
@ -1,32 +1,3 @@
|
||||||
// Copyright (c) 2012, Outercurve Foundation.
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
// are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// - Redistributions of source code must retain the above copyright notice, this
|
|
||||||
// list of conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
//
|
|
||||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
|
||||||
// contributors may be used to endorse or promote products derived from this
|
|
||||||
// software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// This code was generated by a tool.
|
// This code was generated by a tool.
|
||||||
|
@ -149,6 +120,24 @@ namespace WebsitePanel.Portal {
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
protected global::WebsitePanel.Portal.SelectIPAddress ipAddress;
|
protected global::WebsitePanel.Portal.SelectIPAddress ipAddress;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// valRequireData control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireData;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// IPValidator control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.CustomValidator IPValidator;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// rowMXPriority control.
|
/// rowMXPriority control.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -176,6 +165,24 @@ namespace WebsitePanel.Portal {
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
protected global::System.Web.UI.WebControls.TextBox txtMXPriority;
|
protected global::System.Web.UI.WebControls.TextBox txtMXPriority;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// valRequireMxPriority control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireMxPriority;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// valRequireCorrectPriority control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RegularExpressionValidator valRequireCorrectPriority;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// rowSRVPriority control.
|
/// rowSRVPriority control.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -97,17 +97,6 @@
|
||||||
Text="Create Web Site" Checked="True" />
|
Text="Create Web Site" Checked="True" />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td class="Normal" width="100%">
|
|
||||||
<asp:Label ID="lblHostName" runat="server" meta:resourcekey="lblHostName" Text="Host name:"></asp:Label>
|
|
||||||
<asp:TextBox ID="txtHostName" runat="server" CssClass="NormalTextBox" Width="250px" MaxLength="64"></asp:TextBox>
|
|
||||||
<asp:RequiredFieldValidator ID="valRequireHostName" runat="server" meta:resourcekey="valRequireHostName" ControlToValidate="txtHostName"
|
|
||||||
ErrorMessage="Enter hostname" ValidationGroup="CreateSite" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
|
|
||||||
<asp:RegularExpressionValidator ID="valRequireCorrectHostName" runat="server"
|
|
||||||
ErrorMessage="Enter valid hostname" ControlToValidate="txtHostName" Display="Dynamic"
|
|
||||||
meta:resourcekey="valRequireCorrectHostName" ValidationExpression="^([0-9a-zA-Z])*[0-9a-zA-Z]+$" SetFocusOnError="True"></asp:RegularExpressionValidator>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
</table>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
|
|
|
@ -124,8 +124,6 @@ namespace WebsitePanel.Portal
|
||||||
string ftpAccount = (rbFtpAccountName.SelectedIndex == 0) ? null : ftpAccountName.Text;
|
string ftpAccount = (rbFtpAccountName.SelectedIndex == 0) ? null : ftpAccountName.Text;
|
||||||
|
|
||||||
string domainName = txtDomainName.Text.Trim();
|
string domainName = txtDomainName.Text.Trim();
|
||||||
|
|
||||||
string hostName = txtHostName.Text.Trim();
|
|
||||||
|
|
||||||
PackageResult result = null;
|
PackageResult result = null;
|
||||||
try
|
try
|
||||||
|
@ -136,7 +134,7 @@ namespace WebsitePanel.Portal
|
||||||
Utils.ParseInt(ddlStatus.SelectedValue, 0),
|
Utils.ParseInt(ddlStatus.SelectedValue, 0),
|
||||||
chkPackageLetter.Checked,
|
chkPackageLetter.Checked,
|
||||||
chkCreateResources.Checked, domainName, true, chkCreateWebSite.Checked,
|
chkCreateResources.Checked, domainName, true, chkCreateWebSite.Checked,
|
||||||
chkCreateFtpAccount.Checked, ftpAccount, chkCreateMailAccount.Checked, hostName);
|
chkCreateFtpAccount.Checked, ftpAccount, chkCreateMailAccount.Checked, "");
|
||||||
|
|
||||||
if (result.Result < 0)
|
if (result.Result < 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -210,42 +210,6 @@ namespace WebsitePanel.Portal {
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
protected global::System.Web.UI.WebControls.CheckBox chkCreateWebSite;
|
protected global::System.Web.UI.WebControls.CheckBox chkCreateWebSite;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// lblHostName control.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// Auto-generated field.
|
|
||||||
/// To modify move field declaration from designer file to code-behind file.
|
|
||||||
/// </remarks>
|
|
||||||
protected global::System.Web.UI.WebControls.Label lblHostName;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// txtHostName control.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// Auto-generated field.
|
|
||||||
/// To modify move field declaration from designer file to code-behind file.
|
|
||||||
/// </remarks>
|
|
||||||
protected global::System.Web.UI.WebControls.TextBox txtHostName;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// valRequireHostName control.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// Auto-generated field.
|
|
||||||
/// To modify move field declaration from designer file to code-behind file.
|
|
||||||
/// </remarks>
|
|
||||||
protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireHostName;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// valRequireCorrectHostName control.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// Auto-generated field.
|
|
||||||
/// To modify move field declaration from designer file to code-behind file.
|
|
||||||
/// </remarks>
|
|
||||||
protected global::System.Web.UI.WebControls.RegularExpressionValidator valRequireCorrectHostName;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// fsFtp control.
|
/// fsFtp control.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<asp:Label ID="lblDomainName" runat="server" meta:resourcekey="lblDomainName" Text="Domain name:"></asp:Label>
|
<asp:Label ID="lblDomainName" runat="server" meta:resourcekey="lblDomainName" Text="Domain name:"></asp:Label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<asp:TextBox ID="txtHostName" runat="server" CssClass="TextBox100" MaxLength="64"></asp:TextBox>.<uc1:DomainsSelectDomainControl ID="domainsSelectDomainControl" runat="server" HideWebSites="true" HideDomainPointers="true" />
|
<asp:TextBox ID="txtHostName" runat="server" CssClass="TextBox100" MaxLength="64" Text="www"></asp:TextBox>.<uc1:DomainsSelectDomainControl ID="domainsSelectDomainControl" runat="server" HideWebSites="true" HideDomainPointers="true" />
|
||||||
<asp:RequiredFieldValidator ID="valRequireHostName" runat="server" meta:resourcekey="valRequireHostName" ControlToValidate="txtHostName"
|
<asp:RequiredFieldValidator ID="valRequireHostName" runat="server" meta:resourcekey="valRequireHostName" ControlToValidate="txtHostName"
|
||||||
ErrorMessage="Enter hostname" ValidationGroup="CreateSite" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
|
ErrorMessage="Enter hostname" ValidationGroup="CreateSite" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
|
||||||
<asp:RegularExpressionValidator ID="valRequireCorrectHostName" runat="server"
|
<asp:RegularExpressionValidator ID="valRequireCorrectHostName" runat="server"
|
||||||
|
|
|
@ -1,31 +1,3 @@
|
||||||
// Copyright (c) 2012, Outercurve Foundation.
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
// are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// - Redistributions of source code must retain the above copyright notice, this
|
|
||||||
// list of conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
//
|
|
||||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
|
||||||
// contributors may be used to endorse or promote products derived from this
|
|
||||||
// software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// This code was generated by a tool.
|
// This code was generated by a tool.
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<asp:Label ID="lblDomainName" runat="server" meta:resourcekey="lblDomainName" Text="Domain name:"></asp:Label>
|
<asp:Label ID="lblDomainName" runat="server" meta:resourcekey="lblDomainName" Text="Domain name:"></asp:Label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<asp:TextBox ID="txtHostName" runat="server" CssClass="TextBox100" MaxLength="64"></asp:TextBox>.<uc1:DomainsSelectDomainControl ID="domainsSelectDomainControl" runat="server" HideWebSites="true" HideDomainPointers="true" />
|
<asp:TextBox ID="txtHostName" runat="server" CssClass="TextBox100" MaxLength="64" Text="www"></asp:TextBox>.<uc1:DomainsSelectDomainControl ID="domainsSelectDomainControl" runat="server" HideWebSites="true" HideDomainPointers="true" />
|
||||||
<asp:RequiredFieldValidator ID="valRequireHostName" runat="server" meta:resourcekey="valRequireHostName" ControlToValidate="txtHostName"
|
<asp:RequiredFieldValidator ID="valRequireHostName" runat="server" meta:resourcekey="valRequireHostName" ControlToValidate="txtHostName"
|
||||||
ErrorMessage="Enter hostname" ValidationGroup="CreateSite" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
|
ErrorMessage="Enter hostname" ValidationGroup="CreateSite" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
|
||||||
<asp:RegularExpressionValidator ID="valRequireCorrectHostName" runat="server"
|
<asp:RegularExpressionValidator ID="valRequireCorrectHostName" runat="server"
|
||||||
|
|
|
@ -1,31 +1,3 @@
|
||||||
// Copyright (c) 2012, Outercurve Foundation.
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
// are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// - Redistributions of source code must retain the above copyright notice, this
|
|
||||||
// list of conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
//
|
|
||||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
|
||||||
// contributors may be used to endorse or promote products derived from this
|
|
||||||
// software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// This code was generated by a tool.
|
// This code was generated by a tool.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue