This commit is contained in:
rdolezel 2012-09-18 21:01:20 +02:00
commit e2b7191c98
102 changed files with 2361 additions and 964 deletions

View file

@ -323,10 +323,14 @@ namespace WebsitePanel.Setup.Actions
serviceInfo.Comments = string.Empty; serviceInfo.Comments = string.Empty;
//check IIS version //check IIS version
if (ServerSetup.IISVersion.Major >= 7) if (ServerSetup.IISVersion.Major == 7)
{ {
serviceInfo.ProviderId = 101; serviceInfo.ProviderId = 101;
} }
else if (ServerSetup.IISVersion.Major == 8)
{
serviceInfo.ProviderId = 105;
}
else if (ServerSetup.IISVersion.Major == 6) else if (ServerSetup.IISVersion.Major == 6)
{ {
serviceInfo.ProviderId = 2; serviceInfo.ProviderId = 2;

View file

@ -31,6 +31,7 @@ using System.Collections.Generic;
using System.Text; using System.Text;
using System.IO; using System.IO;
using System.Xml; using System.Xml;
using WebsitePanel.Setup.Common;
namespace WebsitePanel.Setup.Actions namespace WebsitePanel.Setup.Actions
{ {
@ -114,6 +115,55 @@ namespace WebsitePanel.Setup.Actions
} }
} }
public class GenerateSessionValidationKeyAction : Action, IInstallAction
{
public const string LogStartInstallMessage = "Generating session validation key...";
void IInstallAction.Run(SetupVariables vars)
{
try
{
Begin(LogStartInstallMessage);
Log.WriteStart(LogStartInstallMessage);
string path = Path.Combine(vars.InstallationFolder, "web.config");
if (!File.Exists(path))
{
Log.WriteInfo(string.Format("File {0} not found", path));
return;
}
Log.WriteStart("Updating configuration file (session validation key)");
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlElement sessionKey = doc.SelectSingleNode("configuration/appSettings/add[@key='SessionValidationKey']") as XmlElement;
if (sessionKey == null)
{
Log.WriteInfo("SessionValidationKey setting not found");
return;
}
sessionKey.SetAttribute("value", StringUtils.GenerateRandomString(16));
doc.Save(path);
Log.WriteEnd("Generated session validation key");
InstallLog.AppendLine("- Generated session validation key");
}
catch (Exception ex)
{
if (Utils.IsThreadAbortException(ex))
return;
//
Log.WriteError("Site settigs error", ex);
//
throw;
}
}
}
public class CreateDesktopShortcutsAction : Action, IInstallAction public class CreateDesktopShortcutsAction : Action, IInstallAction
{ {
public const string LogStartInstallMessage = "Creating shortcut..."; public const string LogStartInstallMessage = "Creating shortcut...";
@ -253,6 +303,7 @@ namespace WebsitePanel.Setup.Actions
new CreateWebSiteAction(), new CreateWebSiteAction(),
new SwitchAppPoolAspNetVersion(), new SwitchAppPoolAspNetVersion(),
new UpdateEnterpriseServerUrlAction(), new UpdateEnterpriseServerUrlAction(),
new GenerateSessionValidationKeyAction(),
new SaveComponentConfigSettingsAction(), new SaveComponentConfigSettingsAction(),
new CreateDesktopShortcutsAction() new CreateDesktopShortcutsAction()
}; };

View file

@ -88,6 +88,7 @@ namespace WebsitePanel.Setup
SwitchServer2AspNet40, SwitchServer2AspNet40,
SwitchEntServer2AspNet40, SwitchEntServer2AspNet40,
SwitchWebPortal2AspNet40, SwitchWebPortal2AspNet40,
ConfigureSecureSessionModuleInWebConfig
} }
public class InstallAction public class InstallAction

View file

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace WebsitePanel.Setup.Common
{
public class StringUtils
{
public static string GenerateRandomString(int length)
{
RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
byte[] data = new byte[length];
crypto.GetNonZeroBytes(data);
return BitConverter.ToString(data).Replace("-", "").ToLowerInvariant();
}
}
}

View file

@ -7,32 +7,6 @@ using WebsitePanel.Setup.Actions;
namespace WebsitePanel.Setup namespace WebsitePanel.Setup
{ {
/// <summary>
/// Release 1.2.2
/// </summary>
public class EnterpriseServer122 : EnterpriseServer
{
public static new object Install(object obj)
{
//
return EnterpriseServer.InstallBase(obj, "1.2.2");
}
public static new DialogResult Uninstall(object obj)
{
return EnterpriseServer.Uninstall(obj);
}
public static new DialogResult Setup(object obj)
{
return EnterpriseServer.Setup(obj);
}
public static new DialogResult Update(object obj)
{
return UpdateBase(obj, "1.2.2", "1.2.1", true);
}
}
/// <summary> /// <summary>
/// Release 1.2.1 /// Release 1.2.1
/// </summary> /// </summary>

View file

@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using WebsitePanel.Setup.Actions;
namespace WebsitePanel.Setup
{
/// <summary>
/// Release 2.0.0
/// </summary>
public class EnterpriseServer200 : EnterpriseServer
{
public static new object Install(object obj)
{
//
return EnterpriseServer.InstallBase(obj, minimalInstallerVersion: "2.0.0");
}
public static new DialogResult Uninstall(object obj)
{
return EnterpriseServer.Uninstall(obj);
}
public static new DialogResult Setup(object obj)
{
return EnterpriseServer.Setup(obj);
}
public static new DialogResult Update(object obj)
{
return UpdateBase(obj,
minimalInstallerVersion: "2.0.0",
versionToUpgrade: "1.2.1",
updateSql: true);
}
}
}

View file

@ -6,33 +6,6 @@ using WebsitePanel.Setup.Actions;
namespace WebsitePanel.Setup namespace WebsitePanel.Setup
{ {
/// <summary>
/// Release 1.2.2
/// </summary>
public class Portal122 : Portal
{
public static new object Install(object obj)
{
//
return Portal.InstallBase(obj, "1.2.2");
}
public static new DialogResult Uninstall(object obj)
{
return Portal.Uninstall(obj);
}
public static new DialogResult Setup(object obj)
{
return Portal.Setup(obj);
}
public static new DialogResult Update(object obj)
{
return UpdateBase(obj, "1.2.2", "1.2.1", false);
}
}
/// <summary> /// <summary>
/// Release 1.2.1 /// Release 1.2.1
/// </summary> /// </summary>

View file

@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using WebsitePanel.Setup.Actions;
namespace WebsitePanel.Setup
{
/// <summary>
/// Release 2.0.0
/// </summary>
public class Portal200 : Portal
{
public static new object Install(object obj)
{
//
return Portal.InstallBase(obj, minimalInstallerVersion: "2.0.0");
}
public static new DialogResult Uninstall(object obj)
{
return Portal.Uninstall(obj);
}
public static new DialogResult Setup(object obj)
{
return Portal.Setup(obj);
}
public static new DialogResult Update(object obj)
{
return UpdateBase(obj,
minimalInstallerVersion: "2.0.0",
versionsToUpgrade: "1.2.1",
updateSql: false,
versionSpecificAction: new InstallAction(ActionTypes.ConfigureSecureSessionModuleInWebConfig));
}
}
}

View file

@ -6,33 +6,6 @@ using WebsitePanel.Setup.Actions;
namespace WebsitePanel.Setup namespace WebsitePanel.Setup
{ {
/// <summary>
/// Release 1.2.2
/// </summary>
public class Server122 : Server
{
public static new object Install(object obj)
{
//
return Server.InstallBase(obj, "1.2.2");
}
public static new object Uninstall(object obj)
{
return Server.Uninstall(obj);
}
public static new object Setup(object obj)
{
return Server.Setup(obj);
}
public static new object Update(object obj)
{
return Server.UpdateBase(obj, "1.2.2", "1.2.1", false);
}
}
/// <summary> /// <summary>
/// Release 1.2.1 /// Release 1.2.1
/// </summary> /// </summary>

View file

@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WebsitePanel.Setup
{
/// <summary>
/// Release 2.0.0
/// </summary>
public class Server200 : Server
{
public static new object Install(object obj)
{
//
return Server.InstallBase(obj, minimalInstallerVersion: "2.0.0");
}
public static new object Uninstall(object obj)
{
return Server.Uninstall(obj);
}
public static new object Setup(object obj)
{
return Server.Setup(obj);
}
public static new object Update(object obj)
{
return Server.UpdateBase(obj,
minimalInstallerVersion: "2.0.0",
versionToUpgrade: "1.2.1",
updateSql: false);
}
}
}

View file

@ -5,18 +5,6 @@ using System.Windows.Forms;
namespace WebsitePanel.Setup namespace WebsitePanel.Setup
{ {
/// <summary>
/// Release 1.2.2
/// </summary>
public class StandaloneServerSetup122 : StandaloneServerSetup
{
public static new object Install(object obj)
{
return StandaloneServerSetup.InstallBase(obj, "1.2.2");
}
}
/// <summary> /// <summary>
/// Release 1.2.1 /// Release 1.2.1
/// </summary> /// </summary>

View file

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace WebsitePanel.Setup
{
/// <summary>
/// Release 2.0.0
/// </summary>
public class StandaloneServerSetup200 : StandaloneServerSetup
{
public static new object Install(object obj)
{
return StandaloneServerSetup.InstallBase(obj, minimalInstallerVersion: "2.0.0");
}
}
}

View file

@ -133,6 +133,7 @@
<Compile Include="Common\SqlProcess.cs" /> <Compile Include="Common\SqlProcess.cs" />
<Compile Include="Common\SqlUtils.cs" /> <Compile Include="Common\SqlUtils.cs" />
<Compile Include="Common\ServerItem.cs" /> <Compile Include="Common\ServerItem.cs" />
<Compile Include="Common\StringUtils.cs" />
<Compile Include="Common\Utils.cs" /> <Compile Include="Common\Utils.cs" />
<Compile Include="Common\WebException.cs" /> <Compile Include="Common\WebException.cs" />
<Compile Include="Common\WebUtils.cs" /> <Compile Include="Common\WebUtils.cs" />
@ -140,8 +141,11 @@
<Compile Include="Common\XmlUtils.cs" /> <Compile Include="Common\XmlUtils.cs" />
<Compile Include="Common\ZipIndicator.cs" /> <Compile Include="Common\ZipIndicator.cs" />
<Compile Include="EnterpriseServer10.cs" /> <Compile Include="EnterpriseServer10.cs" />
<Compile Include="EnterpriseServer20.cs" />
<Compile Include="Portal10.cs" /> <Compile Include="Portal10.cs" />
<Compile Include="Portal20.cs" />
<Compile Include="Server10.cs" /> <Compile Include="Server10.cs" />
<Compile Include="Server20.cs" />
<Compile Include="StandaloneServerSetup.cs" /> <Compile Include="StandaloneServerSetup.cs" />
<Compile Include="EnterpriseServer.cs" /> <Compile Include="EnterpriseServer.cs" />
<Compile Include="Portal.cs" /> <Compile Include="Portal.cs" />
@ -160,6 +164,7 @@
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
</Compile> </Compile>
<Compile Include="StandaloneServerSetup10.cs" /> <Compile Include="StandaloneServerSetup10.cs" />
<Compile Include="StandaloneServerSetup20.cs" />
<Compile Include="Web\AspNetVersion.cs" /> <Compile Include="Web\AspNetVersion.cs" />
<Compile Include="Web\ServerBinding.cs" /> <Compile Include="Web\ServerBinding.cs" />
<Compile Include="Web\ServerState.cs" /> <Compile Include="Web\ServerState.cs" />

View file

@ -258,6 +258,9 @@ namespace WebsitePanel.Setup
case ActionTypes.AddCustomErrorsPage: case ActionTypes.AddCustomErrorsPage:
AddCustomErrorsPage(); AddCustomErrorsPage();
break; break;
case ActionTypes.ConfigureSecureSessionModuleInWebConfig:
ConfigureSecureSessionModuleInWebConfig();
break;
} }
} }
this.progressBar.Value = 100; this.progressBar.Value = 100;
@ -281,6 +284,87 @@ namespace WebsitePanel.Setup
Wizard.GoNext(); Wizard.GoNext();
} }
private void ConfigureSecureSessionModuleInWebConfig()
{
try
{
string webConfigPath = Path.Combine(Wizard.SetupVariables.InstallationFolder, "web.config");
Log.WriteStart("Web.config file is being updated");
// Ensure the web.config exists
if (!File.Exists(webConfigPath))
{
Log.WriteInfo(string.Format("File {0} not found", webConfigPath));
return;
}
// Load web.config
XmlDocument doc = new XmlDocument();
doc.Load(webConfigPath);
// add node:
//<system.webServer>
// <modules>
// <add name="SecureSession" type="WebsitePanel.WebPortal.SecureSessionModule" />
// </modules>
//</system.webServer>
//
// ... or for IIS 6:
//
//<system.web>
// <httpModules>
// <add name="SecureSession" type="WebsitePanel.WebPortal.SecureSessionModule" />
// </httpModules>
//</system.web>
bool iis6 = false;
XmlElement webServer = doc.SelectSingleNode("configuration/system.webServer") as XmlElement;
if (webServer == null)
{
// this is IIS 6
webServer = doc.SelectSingleNode("configuration/system.web") as XmlElement;
iis6 = true;
}
if (webServer != null)
{
var modules = doc.CreateElement(iis6 ? "httpModules" : "modules");
webServer.AppendChild(modules);
var sessionModule = doc.CreateElement("add");
sessionModule.SetAttribute("name", "SecureSession");
sessionModule.SetAttribute("type", "WebsitePanel.WebPortal.SecureSessionModule");
modules.AppendChild(sessionModule);
}
// update /system.web/httpRuntime element
var httpRuntime = doc.SelectSingleNode("configuration/system.web/httpRuntime") as XmlElement;
if (httpRuntime != null)
httpRuntime.SetAttribute("enableVersionHeader", "false");
// add:
//<appSettings>
// <add key="SessionValidationKey" value="XXXXXX" />
//</appSettings>
var appSettings = doc.SelectSingleNode("configuration/appSettings");
if (appSettings != null)
{
var sessionKey = doc.CreateElement("add");
sessionKey.SetAttribute("name", "SessionValidationKey");
sessionKey.SetAttribute("value", StringUtils.GenerateRandomString(16));
appSettings.AppendChild(sessionKey);
}
// save changes have been made
doc.Save(webConfigPath);
//
Log.WriteEnd("Web.config has been updated");
}
catch (Exception ex)
{
if (Utils.IsThreadAbortException(ex))
return;
Log.WriteError("Could not update web.config file", ex);
throw;
}
}
private void SwitchWebPortal2AspNet40(InstallAction action, Setup.SetupVariables setupVariables) private void SwitchWebPortal2AspNet40(InstallAction action, Setup.SetupVariables setupVariables)
{ {
var sam = new WebPortalActionManager(setupVariables); var sam = new WebPortalActionManager(setupVariables);

View file

@ -29,7 +29,7 @@ GO
-- IIS 8.0 -- IIS 8.0
IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Internet Information Services 8.0') IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Internet Information Services 8.0')
BEGIN BEGIN
INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES (105, 2, N'IIS80', N'Internet Information Services 8.0', N'WebsitePanel.Providers.Web.IIs70, WebsitePanel.Providers.Web.IIs70', N'IIS70', NULL) INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES (105, 2, N'IIS80', N'Internet Information Services 8.0', N'WebsitePanel.Providers.Web.IIs80, WebsitePanel.Providers.Web.IIs80', N'IIS70', NULL)
END END
GO GO
@ -168,7 +168,7 @@ GO
-- MS FTP 8.0 -- MS FTP 8.0
IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Microsoft FTP Server 8.0') IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Microsoft FTP Server 8.0')
BEGIN BEGIN
INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES (106, 3, N'MSFTP80', N'Microsoft FTP Server 8.0', N'WebsitePanel.Providers.FTP.MsFTP, WebsitePanel.Providers.FTP.IIs70', N'MSFTP70', NULL) INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES (106, 3, N'MSFTP80', N'Microsoft FTP Server 8.0', N'WebsitePanel.Providers.FTP.MsFTP80, WebsitePanel.Providers.FTP.IIs80', N'MSFTP70', NULL)
END END
GO GO
@ -5211,66 +5211,6 @@ GO
IF NOT EXISTS(select 1 from sys.columns COLS INNER JOIN sys.objects OBJS ON OBJS.object_id=COLS.object_id and OBJS.type='U' AND OBJS.name='ExchangeOrganizationDomains' AND COLS.name='DomainTypeID')
BEGIN
ALTER TABLE [dbo].[ExchangeOrganizationDomains] ADD
[DomainTypeID] [int] NOT NULL CONSTRAINT DF_ExchangeOrganizationDomains_DomainTypeID DEFAULT 0
END
GO
ALTER PROCEDURE [dbo].[GetExchangeOrganizationDomains]
(
@ItemID int
)
AS
SELECT
ED.DomainID,
D.DomainName,
ED.IsHost,
ED.DomainTypeID
FROM
ExchangeOrganizationDomains AS ED
INNER JOIN Domains AS D ON ED.DomainID = D.DomainID
WHERE ED.ItemID = @ItemID
RETURN
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'ChangeExchangeAcceptedDomainType')
BEGIN
EXEC sp_executesql N'
CREATE PROCEDURE [dbo].ChangeExchangeAcceptedDomainType
(
@ItemID int,
@DomainID int,
@DomainTypeID int
)
AS
UPDATE ExchangeOrganizationDomains
SET DomainTypeID=@DomainTypeID
WHERE ItemID=ItemID AND DomainID=@DomainID
RETURN'
END
GO
ALTER PROCEDURE [dbo].[GetPackages] ALTER PROCEDURE [dbo].[GetPackages]
( (
@ActorID int, @ActorID int,

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0"?>
<configuration> <configuration>
<configSections/> <configSections/>
<appSettings> <appSettings>
@ -7,4 +7,4 @@
<add key="enableVerboseLogging" value="false"/> <add key="enableVerboseLogging" value="false"/>
<add key="blockInternalInterTenantOOF" value="true"/> <add key="blockInternalInterTenantOOF" value="true"/>
</appSettings> </appSettings>
</configuration> <startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

View file

@ -115,8 +115,8 @@ namespace WSPTransportAgent
foreach (AcceptedDomain domain in server.AcceptedDomains) foreach (AcceptedDomain domain in server.AcceptedDomains)
{ {
htAcceptedDomains.Add(domain.ToString(), "1"); htAcceptedDomains.Add(domain.ToString().ToLower(), "1");
WriteLine("\tAccepted Domain: " + domain.ToString()); WriteLine("\tAccepted Domain: " + domain.ToString().ToLower());
} }
} }
catch (Exception ex) catch (Exception ex)
@ -154,11 +154,14 @@ namespace WSPTransportAgent
{ {
foreach (EnvelopeRecipient recp in e.MailItem.Recipients) foreach (EnvelopeRecipient recp in e.MailItem.Recipients)
{ {
WriteLine("\t\tFrom: " + e.MailItem.Message.From.SmtpAddress.ToString().ToLower());
WriteLine("\t\tTo: " + recp.Address.ToString().ToLower()); WriteLine("\t\tTo: " + recp.Address.ToString().ToLower());
if (IsMessageBetweenTenants(e.MailItem.FromAddress.DomainPart.ToLower(), recp.Address.DomainPart.ToLower())) string[] tmpFrom = e.MailItem.Message.From.SmtpAddress.Split('@');
string[] tmpTo = recp.Address.ToString().Split('@');
if (IsMessageBetweenTenants(tmpFrom[1].ToLower(), tmpTo[1].ToLower()))
{ {
WriteLine("\t\tMessage routed to domain: " + recp.Address.DomainPart.ToLower() + routingDomain); WriteLine("\t\tMessage routed to domain: " + tmpTo[1].ToLower() + routingDomain);
RoutingDomain myRoutingDomain = new RoutingDomain(recp.Address.DomainPart.ToLower() + routingDomain); RoutingDomain myRoutingDomain = new RoutingDomain(tmpTo[1].ToLower() + routingDomain);
RoutingOverride myRoutingOverride = new RoutingOverride(myRoutingDomain, DeliveryQueueDomain.UseOverrideDomain); RoutingOverride myRoutingOverride = new RoutingOverride(myRoutingDomain, DeliveryQueueDomain.UseOverrideDomain);
source.SetRoutingOverride(recp, myRoutingOverride); source.SetRoutingOverride(recp, myRoutingOverride);
touched = true; touched = true;
@ -173,13 +176,14 @@ namespace WSPTransportAgent
WriteLine("\t\tOOF From: " + e.MailItem.Message.From.SmtpAddress); WriteLine("\t\tOOF From: " + e.MailItem.Message.From.SmtpAddress);
if (e.MailItem.Message.From.SmtpAddress.Contains("@")) if (e.MailItem.Message.From.SmtpAddress.Contains("@"))
{ {
string[] tmp = e.MailItem.Message.From.SmtpAddress.Split('@'); string[] tmpFrom = e.MailItem.Message.From.SmtpAddress.Split('@');
foreach (EnvelopeRecipient recp in e.MailItem.Recipients) foreach (EnvelopeRecipient recp in e.MailItem.Recipients)
{ {
WriteLine("\t\tTo: " + recp.Address.ToString().ToLower()); WriteLine("\t\tTo: " + recp.Address.ToString().ToLower());
if (IsMessageBetweenTenants(tmp[1].ToLower(), recp.Address.DomainPart.ToLower())) string[] tmpTo = recp.Address.ToString().Split('@');
if (IsMessageBetweenTenants(tmpFrom[1].ToLower(), tmpTo[1].ToLower()))
{ {
WriteLine("\t\tRemove: " + recp.Address.DomainPart.ToLower()); WriteLine("\t\tRemove: " + tmpTo[1].ToLower());
e.MailItem.Recipients.Remove(recp); e.MailItem.Recipients.Remove(recp);
} }
} }

View file

@ -10,8 +10,9 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>WSPTransportAgent</RootNamespace> <RootNamespace>WSPTransportAgent</RootNamespace>
<AssemblyName>WSPTransportAgent</AssemblyName> <AssemblyName>WSPTransportAgent</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>

View file

@ -1,11 +1,11 @@
Windows Registry Editor Version 5.00 Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\MEACPTransportAgent] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\WSPTransportAgent]
"MaxSize"=dword:00080000 "MaxSize"=dword:00080000
"AutoBackupLogFiles"=dword:00000000 "AutoBackupLogFiles"=dword:00000000
"Retention"=dword:00000000 "Retention"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\MEACPTransportAgent\MEACPTransportAgent] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\WSPTransportAgent\WSPTransportAgent]
"EventMessageFile"=hex(2):43,00,3a,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,\ "EventMessageFile"=hex(2):43,00,3a,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,\
00,73,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,2e,00,\ 00,73,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,2e,00,\
4e,00,45,00,54,00,5c,00,46,00,72,00,61,00,6d,00,65,00,77,00,6f,00,72,00,6b,\ 4e,00,45,00,54,00,5c,00,46,00,72,00,61,00,6d,00,65,00,77,00,6f,00,72,00,6b,\

View file

@ -0,0 +1,13 @@
WSP Transport Agent Installation
================================
Perform the following steps:
A) Copy the files WSPTransportAgent.dll and WSPTransportAgent.dll.config to "C:\Program Files\Microsoft\Exchange Server\V14\Public"
B) Import the WSPTransportAgent.reg to create the event source
C) Use the registry editor and provide the "NETWORK SERVICE" Full Control on the following Key
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\WSPTransportAgent
D) Run the following powershell command in the exchange management shell:
Install-TransportAgent "WSPTransportAgent" -TransportAgentFactory WSPTransportAgent.WSPRoutingAgentFactory -AssemblyPath "C:\Program Files\Microsoft\Exchange Server\V14\Public\WSPTransportAgent.dll"
E) Enable-TransportAgent "WSPTransportAgent"
F) Restart-Service MSExchangeTransport

View file

@ -26,34 +26,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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.
@ -124,6 +96,10 @@ namespace WebsitePanel.EnterpriseServer {
private System.Threading.SendOrPostCallback DeleteWebSiteOperationCompleted; private System.Threading.SendOrPostCallback DeleteWebSiteOperationCompleted;
private System.Threading.SendOrPostCallback SwitchWebSiteToDedicatedIPOperationCompleted;
private System.Threading.SendOrPostCallback SwitchWebSiteToSharedIPOperationCompleted;
private System.Threading.SendOrPostCallback DeleteVirtualDirectoryOperationCompleted; private System.Threading.SendOrPostCallback DeleteVirtualDirectoryOperationCompleted;
private System.Threading.SendOrPostCallback ChangeSiteStateOperationCompleted; private System.Threading.SendOrPostCallback ChangeSiteStateOperationCompleted;
@ -306,6 +282,12 @@ namespace WebsitePanel.EnterpriseServer {
/// <remarks/> /// <remarks/>
public event DeleteWebSiteCompletedEventHandler DeleteWebSiteCompleted; public event DeleteWebSiteCompletedEventHandler DeleteWebSiteCompleted;
/// <remarks/>
public event SwitchWebSiteToDedicatedIPCompletedEventHandler SwitchWebSiteToDedicatedIPCompleted;
/// <remarks/>
public event SwitchWebSiteToSharedIPCompletedEventHandler SwitchWebSiteToSharedIPCompleted;
/// <remarks/> /// <remarks/>
public event DeleteVirtualDirectoryCompletedEventHandler DeleteVirtualDirectoryCompleted; public event DeleteVirtualDirectoryCompletedEventHandler DeleteVirtualDirectoryCompleted;
@ -855,22 +837,24 @@ namespace WebsitePanel.EnterpriseServer {
/// <remarks/> /// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/AddWebSite", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/AddWebSite", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int AddWebSite(int packageId, string hostName, int domainId, int ipAddressId) { public int AddWebSite(int packageId, string hostName, int domainId, int ipAddressId, bool ignoreGlobalDNSZone) {
object[] results = this.Invoke("AddWebSite", new object[] { object[] results = this.Invoke("AddWebSite", new object[] {
packageId, packageId,
hostName, hostName,
domainId, domainId,
ipAddressId}); ipAddressId,
ignoreGlobalDNSZone});
return ((int)(results[0])); return ((int)(results[0]));
} }
/// <remarks/> /// <remarks/>
public System.IAsyncResult BeginAddWebSite(int packageId, string hostName, int domainId, int ipAddressId, System.AsyncCallback callback, object asyncState) { public System.IAsyncResult BeginAddWebSite(int packageId, string hostName, int domainId, int ipAddressId, bool ignoreGlobalDNSZone, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("AddWebSite", new object[] { return this.BeginInvoke("AddWebSite", new object[] {
packageId, packageId,
hostName, hostName,
domainId, domainId,
ipAddressId}, callback, asyncState); ipAddressId,
ignoreGlobalDNSZone}, callback, asyncState);
} }
/// <remarks/> /// <remarks/>
@ -880,12 +864,12 @@ namespace WebsitePanel.EnterpriseServer {
} }
/// <remarks/> /// <remarks/>
public void AddWebSiteAsync(int packageId, string hostName, int domainId, int ipAddressId) { public void AddWebSiteAsync(int packageId, string hostName, int domainId, int ipAddressId, bool ignoreGlobalDNSZone) {
this.AddWebSiteAsync(packageId, hostName, domainId, ipAddressId, null); this.AddWebSiteAsync(packageId, hostName, domainId, ipAddressId, ignoreGlobalDNSZone, null);
} }
/// <remarks/> /// <remarks/>
public void AddWebSiteAsync(int packageId, string hostName, int domainId, int ipAddressId, object userState) { public void AddWebSiteAsync(int packageId, string hostName, int domainId, int ipAddressId, bool ignoreGlobalDNSZone, object userState) {
if ((this.AddWebSiteOperationCompleted == null)) { if ((this.AddWebSiteOperationCompleted == null)) {
this.AddWebSiteOperationCompleted = new System.Threading.SendOrPostCallback(this.OnAddWebSiteOperationCompleted); this.AddWebSiteOperationCompleted = new System.Threading.SendOrPostCallback(this.OnAddWebSiteOperationCompleted);
} }
@ -893,7 +877,8 @@ namespace WebsitePanel.EnterpriseServer {
packageId, packageId,
hostName, hostName,
domainId, domainId,
ipAddressId}, this.AddWebSiteOperationCompleted, userState); ipAddressId,
ignoreGlobalDNSZone}, this.AddWebSiteOperationCompleted, userState);
} }
private void OnAddWebSiteOperationCompleted(object arg) { private void OnAddWebSiteOperationCompleted(object arg) {
@ -1252,6 +1237,91 @@ namespace WebsitePanel.EnterpriseServer {
} }
} }
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/SwitchWebSiteToDedicatedIP", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int SwitchWebSiteToDedicatedIP(int siteItemId, int ipAddressId) {
object[] results = this.Invoke("SwitchWebSiteToDedicatedIP", new object[] {
siteItemId,
ipAddressId});
return ((int)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginSwitchWebSiteToDedicatedIP(int siteItemId, int ipAddressId, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("SwitchWebSiteToDedicatedIP", new object[] {
siteItemId,
ipAddressId}, callback, asyncState);
}
/// <remarks/>
public int EndSwitchWebSiteToDedicatedIP(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((int)(results[0]));
}
/// <remarks/>
public void SwitchWebSiteToDedicatedIPAsync(int siteItemId, int ipAddressId) {
this.SwitchWebSiteToDedicatedIPAsync(siteItemId, ipAddressId, null);
}
/// <remarks/>
public void SwitchWebSiteToDedicatedIPAsync(int siteItemId, int ipAddressId, object userState) {
if ((this.SwitchWebSiteToDedicatedIPOperationCompleted == null)) {
this.SwitchWebSiteToDedicatedIPOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSwitchWebSiteToDedicatedIPOperationCompleted);
}
this.InvokeAsync("SwitchWebSiteToDedicatedIP", new object[] {
siteItemId,
ipAddressId}, this.SwitchWebSiteToDedicatedIPOperationCompleted, userState);
}
private void OnSwitchWebSiteToDedicatedIPOperationCompleted(object arg) {
if ((this.SwitchWebSiteToDedicatedIPCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.SwitchWebSiteToDedicatedIPCompleted(this, new SwitchWebSiteToDedicatedIPCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/SwitchWebSiteToSharedIP", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int SwitchWebSiteToSharedIP(int siteItemId) {
object[] results = this.Invoke("SwitchWebSiteToSharedIP", new object[] {
siteItemId});
return ((int)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginSwitchWebSiteToSharedIP(int siteItemId, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("SwitchWebSiteToSharedIP", new object[] {
siteItemId}, callback, asyncState);
}
/// <remarks/>
public int EndSwitchWebSiteToSharedIP(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((int)(results[0]));
}
/// <remarks/>
public void SwitchWebSiteToSharedIPAsync(int siteItemId) {
this.SwitchWebSiteToSharedIPAsync(siteItemId, null);
}
/// <remarks/>
public void SwitchWebSiteToSharedIPAsync(int siteItemId, object userState) {
if ((this.SwitchWebSiteToSharedIPOperationCompleted == null)) {
this.SwitchWebSiteToSharedIPOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSwitchWebSiteToSharedIPOperationCompleted);
}
this.InvokeAsync("SwitchWebSiteToSharedIP", new object[] {
siteItemId}, this.SwitchWebSiteToSharedIPOperationCompleted, userState);
}
private void OnSwitchWebSiteToSharedIPOperationCompleted(object arg) {
if ((this.SwitchWebSiteToSharedIPCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.SwitchWebSiteToSharedIPCompleted(this, new SwitchWebSiteToSharedIPCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/> /// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/DeleteVirtualDirectory", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/DeleteVirtualDirectory", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int DeleteVirtualDirectory(int siteItemId, string vdirName) { public int DeleteVirtualDirectory(int siteItemId, string vdirName) {
@ -4422,6 +4492,58 @@ namespace WebsitePanel.EnterpriseServer {
} }
} }
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void SwitchWebSiteToDedicatedIPCompletedEventHandler(object sender, SwitchWebSiteToDedicatedIPCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class SwitchWebSiteToDedicatedIPCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal SwitchWebSiteToDedicatedIPCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public int Result {
get {
this.RaiseExceptionIfNecessary();
return ((int)(this.results[0]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void SwitchWebSiteToSharedIPCompletedEventHandler(object sender, SwitchWebSiteToSharedIPCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class SwitchWebSiteToSharedIPCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal SwitchWebSiteToSharedIPCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public int Result {
get {
this.RaiseExceptionIfNecessary();
return ((int)(this.results[0]));
}
}
}
/// <remarks/> /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void DeleteVirtualDirectoryCompletedEventHandler(object sender, DeleteVirtualDirectoryCompletedEventArgs e); public delegate void DeleteVirtualDirectoryCompletedEventHandler(object sender, DeleteVirtualDirectoryCompletedEventArgs e);

View file

@ -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
{ {

View file

@ -33,6 +33,7 @@ using System.Data.SqlClient;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using WebsitePanel.Providers.HostedSolution; using WebsitePanel.Providers.HostedSolution;
using Microsoft.ApplicationBlocks.Data; using Microsoft.ApplicationBlocks.Data;
using System.Collections.Generic;
namespace WebsitePanel.EnterpriseServer namespace WebsitePanel.EnterpriseServer
{ {
@ -2152,18 +2153,6 @@ namespace WebsitePanel.EnterpriseServer
); );
} }
public static void ChangeExchangeAcceptedDomainType(int itemId, int domainId, int domainTypeId)
{
SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"ChangeExchangeAcceptedDomainType",
new SqlParameter("@ItemID", itemId),
new SqlParameter("@DomainID", domainId),
new SqlParameter("@DomainTypeID", domainTypeId)
);
}
public static IDataReader GetExchangeOrganizationStatistics(int itemId) public static IDataReader GetExchangeOrganizationStatistics(int itemId)
{ {
return SqlHelper.ExecuteReader( return SqlHelper.ExecuteReader(
@ -3411,5 +3400,45 @@ namespace WebsitePanel.EnterpriseServer
#endregion #endregion
public static int GetPackageIdByName(string Name)
{
// get Helicon Zoo provider
int packageId = -1;
List<ProviderInfo> providers = ServerController.GetProviders();
foreach (ProviderInfo providerInfo in providers)
{
if (string.Equals(Name, providerInfo.ProviderName, StringComparison.OrdinalIgnoreCase))
{
packageId = providerInfo.ProviderId;
break;
}
}
if (-1 == packageId)
{
throw new Exception("Provider not found");
}
return packageId;
}
public static int GetServiceIdByProviderForServer(int providerId, int serverId)
{
IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text,
@"SELECT TOP 1
ServiceID
FROM Services
WHERE ProviderID = @ProviderID AND ServerID = @ServerID",
new SqlParameter("@ProviderID", providerId),
new SqlParameter("@ServerID", serverId));
if (reader.Read())
{
return (int)reader["ServiceID"];
}
return -1;
}
} }
} }

View file

@ -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;

View file

@ -41,6 +41,7 @@ using WebsitePanel.Providers.OS;
using OS = WebsitePanel.Providers.OS; using OS = WebsitePanel.Providers.OS;
using System.Collections; using System.Collections;
namespace WebsitePanel.EnterpriseServer namespace WebsitePanel.EnterpriseServer
{ {
public class OperatingSystemController : IImportController, IBackupController public class OperatingSystemController : IImportController, IBackupController
@ -409,6 +410,23 @@ namespace WebsitePanel.EnterpriseServer
#region Web Platform Installer #region Web Platform Installer
public static bool CheckLoadUserProfile(int serverId)
{
int packageId = DataProvider.GetPackageIdByName("IIS70");
int serviceId = DataProvider.GetServiceIdByProviderForServer(packageId, serverId);
return WebServerController.GetWebServer(serviceId).CheckLoadUserProfile();
}
public static void EnableLoadUserProfile(int serverId)
{
int packageId = DataProvider.GetPackageIdByName("IIS70");
int serviceId = DataProvider.GetServiceIdByProviderForServer(packageId, serverId);
WebServerController.GetWebServer(serviceId).EnableLoadUserProfile();
}
public static void InitWPIFeeds(int serverId, string feedUrls) public static void InitWPIFeeds(int serverId, string feedUrls)
{ {
GetServerService(serverId).InitWPIFeeds(feedUrls); GetServerService(serverId).InitWPIFeeds(feedUrls);
@ -747,6 +765,7 @@ namespace WebsitePanel.EnterpriseServer
} }
#endregion #endregion
} }
} }

View file

@ -481,7 +481,7 @@ namespace WebsitePanel.EnterpriseServer
// create web site // create web site
try try
{ {
int webSiteId = WebServerController.AddWebSite(packageId, hostName, domainId, 0, true); int webSiteId = WebServerController.AddWebSite(packageId, hostName, domainId, 0, true, false);
if (webSiteId < 0) if (webSiteId < 0)
{ {
result.Result = webSiteId; result.Result = webSiteId;

View file

@ -1729,7 +1729,7 @@ namespace WebsitePanel.EnterpriseServer
int webSiteId = 0; int webSiteId = 0;
if (webEnabled && createWebSite) if (webEnabled && createWebSite)
{ {
webSiteId = WebServerController.AddWebSite(packageId, hostName, domainId, 0, createInstantAlias); webSiteId = WebServerController.AddWebSite(packageId, hostName, domainId, 0, createInstantAlias, false);
if (webSiteId < 0) if (webSiteId < 0)
{ {
@ -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);

View file

@ -157,11 +157,11 @@ namespace WebsitePanel.EnterpriseServer
public static int AddWebSite(int packageId, string hostName, int domainId, int ipAddressId) public static int AddWebSite(int packageId, string hostName, int domainId, int ipAddressId)
{ {
return AddWebSite(packageId, hostName, domainId, ipAddressId, false); return AddWebSite(packageId, hostName, domainId, ipAddressId, false, true);
} }
public static int AddWebSite(int packageId, string hostName, int domainId, int packageAddressId, public static int AddWebSite(int packageId, string hostName, int domainId, int packageAddressId,
bool addInstantAlias) bool addInstantAlias, bool ignoreGlobalDNSRecords)
{ {
// check account // check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
@ -180,12 +180,15 @@ namespace WebsitePanel.EnterpriseServer
DomainInfo domain = ServerController.GetDomain(domainId); DomainInfo domain = ServerController.GetDomain(domainId);
string domainName = domain.DomainName; string domainName = domain.DomainName;
// check if the web site already exists string siteName = string.IsNullOrEmpty(hostName) ? domainName : hostName + "." + domainName;
if (PackageController.GetPackageItemByName(packageId, domainName, typeof(WebSite)) != null)
// check if the web site already exists (legacy)
if (PackageController.GetPackageItemByName(packageId, siteName, typeof(WebSite)) != null)
return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS;
if (DataProvider.CheckDomain(domain.PackageId, siteName, true) != 0)
return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS;
string siteName = string.IsNullOrEmpty(hostName) ? domainName : hostName + "." + domainName; ;
// place log record // place log record
TaskManager.StartTask("WEB_SITE", "ADD", siteName); TaskManager.StartTask("WEB_SITE", "ADD", siteName);
@ -240,13 +243,6 @@ namespace WebsitePanel.EnterpriseServer
if (ip != null) if (ip != null)
ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP;
// load domain instant alias
/*
string instantAlias = ServerController.GetDomainAlias(packageId, domainName);
DomainInfo instantDomain = ServerController.GetDomain(instantAlias);
if (instantDomain == null || instantDomain.WebSiteId > 0)
instantAlias = "";
*/
// load web DNS records // load web DNS records
List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(serviceId); List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(serviceId);
@ -258,17 +254,15 @@ namespace WebsitePanel.EnterpriseServer
{ {
// SHARED IP // SHARED IP
// fill main domain bindings // fill main domain bindings
/* FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords);
FillWebServerBindings(bindings, dnsRecords, ipAddr, domain.DomainName);
// fill alias bindings if required //double check all bindings
if (addInstantAlias && !String.IsNullOrEmpty(instantAlias)) foreach (ServerBinding b in bindings)
{ {
// fill bindings from DNS "A" records if (DataProvider.CheckDomain(domain.PackageId, b.Host, true) != 0)
FillWebServerBindings(bindings, dnsRecords, ipAddr, instantAlias); return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS;
} }
*/
bindings.Add(new ServerBinding(ipAddr, "80", siteName));
} }
else else
{ {
@ -392,13 +386,8 @@ namespace WebsitePanel.EnterpriseServer
// update domain // update domain
// add main pointer // add main pointer
AddWebSitePointer(siteItemId, hostName, domain.DomainId, false); AddWebSitePointer(siteItemId, hostName, domain.DomainId, false, ignoreGlobalDNSRecords);
// add instant pointer
/*
if (addInstantAlias && !String.IsNullOrEmpty(instantAlias))
AddWebSitePointer(siteItemId, instantDomain.DomainId, false);
*/
// add parking page // add parking page
// load package // load package
@ -574,12 +563,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,8 +600,110 @@ namespace WebsitePanel.EnterpriseServer
} }
} }
public static int SwitchWebSiteToDedicatedIP(int siteItemId, int ipAddressId)
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
// load web site item
WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId);
if (siteItem == null)
return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND;
// load assigned IP address
IPAddressInfo ip = ServerController.GetIPAddress(ipAddressId);
if (ip == null)
return BusinessErrorCodes.ERROR_WEB_SITE_IP_ADDRESS_NOT_SPECIFIED;
string ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP;
// place log record
TaskManager.StartTask("WEB_SITE", "SWITCH_TO_DEDICATED_IP", siteItem.Name);
TaskManager.ItemId = siteItemId;
try
{
// get web site pointers
var sitePointers = GetWebSitePointers(siteItemId);
// get existing web site bindings
WebServer web = new WebServer();
ServiceProviderProxy.Init(web, siteItem.ServiceId);
var bindings = web.GetSiteBindings(siteItem.SiteId);
// update site bindings
web.UpdateSiteBindings(siteItem.SiteId, new ServerBinding[] { new ServerBinding(ipAddr, "80", "") });
// update site item
siteItem.SiteIPAddressId = ipAddressId;
PackageController.UpdatePackageItem(siteItem);
// associate IP with web site
if (ipAddressId != 0)
ServerController.AddItemIPAddress(siteItemId, ipAddressId);
// TODO - what would be correct logic here?
// re-create pointers
foreach (var pointer in sitePointers)
DeleteWebSitePointer(siteItemId, pointer.DomainId, false, true);
foreach (var pointer in sitePointers)
AddWebSitePointer(siteItemId, null, pointer.DomainId, false);
return 0;
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static int SwitchWebSiteToSharedIP(int siteItemId)
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
// load web site item
WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId);
if (siteItem == null)
return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND;
// place log record
TaskManager.StartTask("WEB_SITE", "SWITCH_TO_SHARED_IP", siteItem.Name);
TaskManager.ItemId = siteItemId;
try
{
// get web site pointers
var sitePointers = GetWebSitePointers(siteItemId);
// get existing web site bindings
WebServer web = new WebServer();
ServiceProviderProxy.Init(web, siteItem.ServiceId);
var bindings = web.GetSiteBindings(siteItem.SiteId);
// TODO - what would be correct logic here?
return 0;
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
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;
@ -621,36 +712,46 @@ namespace WebsitePanel.EnterpriseServer
if ((dnsRecord.RecordType == "A" || dnsRecord.RecordType == "AAAA" || dnsRecord.RecordType == "CNAME") && if ((dnsRecord.RecordType == "A" || dnsRecord.RecordType == "AAAA" || dnsRecord.RecordType == "CNAME") &&
dnsRecord.RecordName != "*") dnsRecord.RecordName != "*")
{ {
/* string recordData = Utils.ReplaceStringVariable(dnsRecord.RecordName, "host_name", hostName, true);
string recordData = dnsRecord.RecordName +
((dnsRecord.RecordName != "") ? "." : "") + domainName;
bindings.Add(new ServerBinding(ipAddr, "80", recordData)); if (!string.IsNullOrEmpty(domainName))
*/ recordData = recordData + ((string.IsNullOrEmpty(recordData)) ? "" : ".") + domainName;
//otherwise full recordData is supplied by hostName
string tmpName = string.Empty; if (ignoreGlobalDNSRecords)
if (!String.IsNullOrEmpty(hostName)) {
tmpName = Utils.ReplaceStringVariable(dnsRecord.RecordName, "host_name", hostName); //only look for the host_nanme record, ignore all others
if (dnsRecord.RecordName == "[host_name]")
string recordData = string.Empty; {
if (tmpName.Contains(".")) AddBinding(bindings, new ServerBinding(ipAddr, "80", recordData));
recordData = hostName; break;
}
}
else else
recordData = tmpName + ((tmpName != "") ? "." : "") + domainName; {
AddBinding(bindings, new ServerBinding(ipAddr, "80", recordData));
bindings.Add(new ServerBinding(ipAddr, "80", recordData)); }
} }
} }
/* if ((bindings.Count == bindingsCount) | (bindings.Count == 0))
if(bindings.Count == bindingsCount)
{ {
bindings.Add(new ServerBinding(ipAddr, "80", domainName)); AddBinding(bindings, new ServerBinding(ipAddr, "80", string.IsNullOrEmpty(hostName) ? domainName : hostName + "." + domainName));
bindings.Add(new ServerBinding(ipAddr, "80", "www." + 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"]);
@ -736,10 +837,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);
@ -755,6 +861,10 @@ namespace WebsitePanel.EnterpriseServer
if (domain == null) if (domain == null)
return BusinessErrorCodes.ERROR_DOMAIN_PACKAGE_ITEM_NOT_FOUND; return BusinessErrorCodes.ERROR_DOMAIN_PACKAGE_ITEM_NOT_FOUND;
// check if the web site already exists
if (DataProvider.CheckDomain(domain.PackageId, string.IsNullOrEmpty(hostName) ? domain.DomainName : hostName + "." + domain.DomainName, true) != 0)
return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS;
// get zone records for the service // get zone records for the service
List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(siteItem.ServiceId); List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(siteItem.ServiceId);
@ -773,13 +883,40 @@ 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;
//filter initiat GlobaDNSRecords list
if (ignoreGlobalDNSRecords)
{
//ignore all other except the host_name record
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,59 +933,58 @@ 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 //for logging purposes
bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; }); foreach (ServerBinding b in bindings)
// 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", b.Host);
}
// 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);
if (!String.IsNullOrEmpty(hostName))
domain.DomainName = hostName + "." + domain.DomainName;
else
domain.DomainName = domain.DomainName;
domain.IsDomainPointer = true; domain.IsDomainPointer = true;
int domainID = ServerController.AddDomain(domain); foreach (ServerBinding b in bindings)
DomainInfo domainTmp = ServerController.GetDomain(domainID);
if (domainTmp != null)
{ {
domainTmp.WebSiteId = siteItemId; //add new domain record
domainTmp.ZoneItemId = domain.ZoneItemId; domain.DomainName = b.Host;
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);
}
} }
return 0; return 0;
} }
catch (Exception ex) catch (Exception ex)
@ -863,10 +999,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 +1031,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]") | ((r.RecordName + (string.IsNullOrEmpty(r.RecordName) ? domain.ZoneName : "." + domain.ZoneName)) == domain.DomainName))
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 +1067,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

View file

@ -199,7 +199,7 @@ namespace WebsitePanel.EnterpriseServer
try try
{ {
int webSiteId = WebServerController.AddWebSite( int webSiteId = WebServerController.AddWebSite(
createdPackageId, hostName, domainId, 0, true); createdPackageId, hostName, domainId, 0, true, false);
if (webSiteId < 0) if (webSiteId < 0)
{ {
// rollback wizard // rollback wizard

View file

@ -5,11 +5,11 @@
</configSections> </configSections>
<!-- Connection strings --> <!-- Connection strings -->
<connectionStrings> <connectionStrings>
<add name="EnterpriseServer" connectionString="server=HSTPROV01;database=WebsitePanelMerge;uid=WebsitePanel;pwd=aj7ep6fyhmw3b5qeth7c;" providerName="System.Data.SqlClient" /> <add name="EnterpriseServer" connectionString="Server=(local)\SQLExpress;Database=WebsitePanel;uid=WebsitePanel;pwd=Password12" providerName="System.Data.SqlClient" />
</connectionStrings> </connectionStrings>
<appSettings> <appSettings>
<!-- Encryption util settings --> <!-- Encryption util settings -->
<add key="WebsitePanel.CryptoKey" value="3x7eqt7zabc5n5afs6dg" /> <add key="WebsitePanel.CryptoKey" value="1234567890" />
<!-- A1D4KDHUE83NKHddF --> <!-- A1D4KDHUE83NKHddF -->
<add key="WebsitePanel.EncryptionEnabled" value="true" /> <add key="WebsitePanel.EncryptionEnabled" value="true" />
<!-- Web Applications --> <!-- Web Applications -->

View file

@ -670,6 +670,20 @@ namespace WebsitePanel.EnterpriseServer
#region Web Platform Installer #region Web Platform Installer
[WebMethod]
public bool CheckLoadUserProfile(int serverId)
{
return OperatingSystemController.CheckLoadUserProfile(serverId);
}
[WebMethod]
public void EnableLoadUserProfile(int serverId)
{
OperatingSystemController.EnableLoadUserProfile(serverId);
}
[WebMethod] [WebMethod]
public void InitWPIFeeds(int serverId) public void InitWPIFeeds(int serverId)
{ {

View file

@ -104,9 +104,9 @@ namespace WebsitePanel.EnterpriseServer
} }
[WebMethod] [WebMethod]
public int AddWebSite(int packageId, string hostName, int domainId, int ipAddressId) public int AddWebSite(int packageId, string hostName, int domainId, int ipAddressId, bool ignoreGlobalDNSZone)
{ {
return WebServerController.AddWebSite(packageId, hostName, domainId, ipAddressId, true); return WebServerController.AddWebSite(packageId, hostName, domainId, ipAddressId, true, ignoreGlobalDNSZone);
} }
[WebMethod] [WebMethod]
@ -157,6 +157,18 @@ namespace WebsitePanel.EnterpriseServer
return WebServerController.DeleteWebSite(siteItemId); return WebServerController.DeleteWebSite(siteItemId);
} }
[WebMethod]
public int SwitchWebSiteToDedicatedIP(int siteItemId, int ipAddressId)
{
return WebServerController.SwitchWebSiteToDedicatedIP(siteItemId, ipAddressId);
}
[WebMethod]
public int SwitchWebSiteToSharedIP(int siteItemId)
{
return WebServerController.SwitchWebSiteToSharedIP(siteItemId);
}
[WebMethod] [WebMethod]
public int DeleteVirtualDirectory(int siteItemId, string vdirName) public int DeleteVirtualDirectory(int siteItemId, string vdirName)
{ {

View file

@ -119,6 +119,8 @@ namespace WebsitePanel.Providers.Web
// web app gallery // web app gallery
bool CheckLoadUserProfile();
void EnableLoadUserProfile();
void InitFeeds(int UserId, string[] feeds); void InitFeeds(int UserId, string[] feeds);
void SetResourceLanguage(int UserId, string resourceLanguage); void SetResourceLanguage(int UserId, string resourceLanguage);
bool IsMsDeployInstalled(); bool IsMsDeployInstalled();
@ -153,5 +155,7 @@ namespace WebsitePanel.Providers.Web
ResultObject DeleteCertificate(SSLCertificate certificate, WebSite website); ResultObject DeleteCertificate(SSLCertificate certificate, WebSite website);
SSLCertificate ImportCertificate(WebSite website); SSLCertificate ImportCertificate(WebSite website);
bool CheckCertificate(WebSite webSite); bool CheckCertificate(WebSite webSite);
}
}
} }

View file

@ -87,7 +87,7 @@ namespace WebsitePanel.Providers.WebAppGallery
//SiteUserPassword = 549755813888, //SiteUserPassword = 549755813888,
ALLKNOWN = AllKnown =
AppHostConfig | AppHostConfig |
AppPoolConfig | AppPoolConfig |
Boolean | Boolean |
@ -155,5 +155,21 @@ namespace WebsitePanel.Providers.WebAppGallery
return String.Format("{0}=\"{1}\", Tags={2}", Name, Value, WellKnownTags.ToString()); return String.Format("{0}=\"{1}\", Tags={2}", Name, Value, WellKnownTags.ToString());
} }
#endif #endif
public void SetWellKnownTagsFromRawString(string rawTags)
{
string[] tags = rawTags.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries);
DeploymentParameterWellKnownTag wellKnownTags = DeploymentParameterWellKnownTag.None;
foreach (string tag in tags)
{
try
{
wellKnownTags |= (DeploymentParameterWellKnownTag)Enum.Parse(typeof(DeploymentParameterWellKnownTag), tag, true);
}
catch(Exception){}
}
WellKnownTags = wellKnownTags & DeploymentParameterWellKnownTag.AllKnown;
}
} }
} }

View file

@ -954,7 +954,7 @@ namespace WebsitePanel.Providers.FTP
#endregion #endregion
protected bool IsMsFTPInstalled() protected virtual bool IsMsFTPInstalled()
{ {
int value = 0; int value = 0;
RegistryKey root = Registry.LocalMachine; RegistryKey root = Registry.LocalMachine;
@ -966,7 +966,7 @@ namespace WebsitePanel.Providers.FTP
} }
RegistryKey ftp = root.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\ftpsvc"); RegistryKey ftp = root.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\ftpsvc");
bool res = (value == 7 || value == 8) && ftp != null; bool res = (value == 7) && ftp != null;
if (ftp != null) if (ftp != null)
ftp.Close(); ftp.Close();

View file

@ -0,0 +1,39 @@
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WebsitePanel.Providers.FTP
{
public class MsFTP80 : MsFTP
{
public MsFTP80() : base()
{
}
protected override bool IsMsFTPInstalled()
{
int value = 0;
RegistryKey root = Registry.LocalMachine;
RegistryKey rk = root.OpenSubKey("SOFTWARE\\Microsoft\\InetStp");
if (rk != null)
{
value = (int)rk.GetValue("MajorVersion", null);
rk.Close();
}
RegistryKey ftp = root.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\ftpsvc");
bool res = (value == 8) && ftp != null;
if (ftp != null)
ftp.Close();
return res;
}
public override bool IsInstalled()
{
return IsMsFTPInstalled();
}
}
}

View file

@ -0,0 +1,21 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("WebsitePanel.Providers.FTP.IIs80")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("WebsitePanel.Providers.FTP.IIs80")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("587b5738-51db-4525-bcf5-60de49e89be4")]

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>WebsitePanel.Providers.FTP.IIs80</RootNamespace>
<AssemblyName>WebsitePanel.Providers.FTP.IIs80</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\WebsitePanel.Server\bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\WebsitePanel.Server\bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\VersionInfo.cs">
<Link>VersionInfo.cs</Link>
</Compile>
<Compile Include="MsFTP80.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\WebsitePanel.Providers.Base\WebsitePanel.Providers.Base.csproj">
<Project>{684c932a-6c75-46ac-a327-f3689d89eb42}</Project>
<Name>WebsitePanel.Providers.Base</Name>
</ProjectReference>
<ProjectReference Include="..\WebsitePanel.Providers.FTP.IIs70\WebsitePanel.Providers.FTP.IIs70.csproj">
<Project>{a28bd694-c308-449f-8fd2-f08f3d54aba0}</Project>
<Name>WebsitePanel.Providers.FTP.IIs70</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View file

@ -230,11 +230,6 @@ namespace WebsitePanel.Providers.HostedSolution
{ {
DeleteAuthoritativeDomainInternal(domain); DeleteAuthoritativeDomainInternal(domain);
} }
public void ChangeAcceptedDomainType(string domainName, ExchangeAcceptedDomainType domainType)
{
ChangeAcceptedDomainTypeInternal(domainName, domainType);
}
#endregion #endregion
#region Mailboxes #region Mailboxes
@ -3358,7 +3353,7 @@ namespace WebsitePanel.Providers.HostedSolution
//fix showInAddressBook Attribute //fix showInAddressBook Attribute
if (addressLists.Length > 0) if (addressLists.Length > 0)
FixShowInAddressBook(runSpace, email, addressLists); FixShowInAddressBook(runSpace, email, addressLists, false);
} }
catch (Exception ex) catch (Exception ex)
@ -3375,7 +3370,7 @@ namespace WebsitePanel.Providers.HostedSolution
ExchangeLog.LogEnd("CreateDistributionListInternal"); ExchangeLog.LogEnd("CreateDistributionListInternal");
} }
private void FixShowInAddressBook(Runspace runSpace, string accountName, string[] addressLists) private void FixShowInAddressBook(Runspace runSpace, string accountName, string[] addressLists, bool HideFromAddressList)
{ {
Command cmd = new Command("Get-DistributionGroup"); Command cmd = new Command("Get-DistributionGroup");
cmd.Parameters.Add("Identity", accountName); cmd.Parameters.Add("Identity", accountName);
@ -3385,9 +3380,12 @@ namespace WebsitePanel.Providers.HostedSolution
DirectoryEntry dlDEEntry = GetADObject(AddADPrefix(id)); DirectoryEntry dlDEEntry = GetADObject(AddADPrefix(id));
dlDEEntry.Properties["showInAddressBook"].Clear(); dlDEEntry.Properties["showInAddressBook"].Clear();
foreach (string addressList in addressLists) if (!HideFromAddressList)
{ {
dlDEEntry.Properties["showInAddressBook"].Add(addressList); foreach (string addressList in addressLists)
{
dlDEEntry.Properties["showInAddressBook"].Add(addressList);
}
} }
dlDEEntry.CommitChanges(); dlDEEntry.CommitChanges();
} }
@ -3547,7 +3545,7 @@ namespace WebsitePanel.Providers.HostedSolution
} }
if (addressLists.Length > 0) if (addressLists.Length > 0)
FixShowInAddressBook(runSpace, accountName, addressLists); FixShowInAddressBook(runSpace, accountName, addressLists, hideFromAddressBook);
} }
finally finally
@ -3617,7 +3615,14 @@ namespace WebsitePanel.Providers.HostedSolution
} }
if (addressLists.Length > 0) if (addressLists.Length > 0)
FixShowInAddressBook(runSpace, accountName, addressLists); {
cmd = new Command("Get-DistributionGroup");
cmd.Parameters.Add("Identity", accountName);
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd);
PSObject distributionGroup = result[0];
FixShowInAddressBook(runSpace, accountName, addressLists, (bool)GetPSObjectProperty(distributionGroup, "HiddenFromAddressListsEnabled"));
}
} }
finally finally
@ -3653,7 +3658,14 @@ namespace WebsitePanel.Providers.HostedSolution
} }
if (addressLists.Length > 0) if (addressLists.Length > 0)
FixShowInAddressBook(runSpace, accountName, addressLists); {
cmd = new Command("Get-DistributionGroup");
cmd.Parameters.Add("Identity", accountName);
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd);
PSObject distributionGroup = result[0];
FixShowInAddressBook(runSpace, accountName, addressLists, (bool)GetPSObjectProperty(distributionGroup, "HiddenFromAddressListsEnabled"));
}
} }
finally finally
@ -3725,7 +3737,14 @@ namespace WebsitePanel.Providers.HostedSolution
ExecuteShellCommand(runSpace, cmd); ExecuteShellCommand(runSpace, cmd);
if (addressLists.Length > 0) if (addressLists.Length > 0)
FixShowInAddressBook(runSpace, accountName, addressLists); {
cmd = new Command("Get-DistributionGroup");
cmd.Parameters.Add("Identity", accountName);
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd);
PSObject distributionGroup = result[0];
FixShowInAddressBook(runSpace, accountName, addressLists, (bool)GetPSObjectProperty(distributionGroup, "HiddenFromAddressListsEnabled"));
}
} }
finally finally
@ -3861,7 +3880,14 @@ namespace WebsitePanel.Providers.HostedSolution
ExecuteShellCommand(runSpace, cmd); ExecuteShellCommand(runSpace, cmd);
if (addressLists.Length > 0) if (addressLists.Length > 0)
FixShowInAddressBook(runSpace, accountName, addressLists); {
cmd = new Command("Get-DistributionGroup");
cmd.Parameters.Add("Identity", accountName);
Collection<PSObject> r = ExecuteShellCommand(runSpace, cmd);
PSObject distributionGroup = r[0];
FixShowInAddressBook(runSpace, accountName, addressLists, (bool)GetPSObjectProperty(distributionGroup, "HiddenFromAddressListsEnabled"));
}
} }
finally finally
{ {
@ -3960,17 +3986,24 @@ namespace WebsitePanel.Providers.HostedSolution
if (sendOnBehalfAccounts == null) if (sendOnBehalfAccounts == null)
throw new ArgumentNullException("sendOnBehalfAccounts"); throw new ArgumentNullException("sendOnBehalfAccounts");
Runspace runspace = null; Runspace runSpace = null;
try try
{ {
runspace = OpenRunspace(); runSpace = OpenRunspace();
string cn = GetDistributionListCommonName(runspace, accountName); string cn = GetDistributionListCommonName(runSpace, accountName);
ExchangeDistributionList distributionList = GetDistributionListPermissionsInternal(organizationId, accountName, runspace); ExchangeDistributionList distributionList = GetDistributionListPermissionsInternal(organizationId, accountName, runSpace);
SetSendAsPermissions(runspace, distributionList.SendAsAccounts, cn, sendAsAccounts); SetSendAsPermissions(runSpace, distributionList.SendAsAccounts, cn, sendAsAccounts);
SetDistributionListSendOnBehalfAccounts(runspace, accountName, sendOnBehalfAccounts); SetDistributionListSendOnBehalfAccounts(runSpace, accountName, sendOnBehalfAccounts);
if (addressLists.Length > 0) if (addressLists.Length > 0)
FixShowInAddressBook(runspace, accountName, addressLists); {
Command cmd = new Command("Get-DistributionGroup");
cmd.Parameters.Add("Identity", accountName);
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd);
PSObject distributionGroup = result[0];
FixShowInAddressBook(runSpace, accountName, addressLists, (bool)GetPSObjectProperty(distributionGroup, "HiddenFromAddressListsEnabled"));
}
} }
catch (Exception ex) catch (Exception ex)
@ -3980,7 +4013,7 @@ namespace WebsitePanel.Providers.HostedSolution
} }
finally finally
{ {
CloseRunspace(runspace); CloseRunspace(runSpace);
} }
ExchangeLog.LogEnd("SetDistributionListPermissionsInternal"); ExchangeLog.LogEnd("SetDistributionListPermissionsInternal");
@ -5921,31 +5954,6 @@ namespace WebsitePanel.Providers.HostedSolution
ExchangeLog.LogEnd("CreateAuthoritativeDomainInternal"); ExchangeLog.LogEnd("CreateAuthoritativeDomainInternal");
} }
private void ChangeAcceptedDomainTypeInternal(string domainName, ExchangeAcceptedDomainType domainType)
{
ExchangeLog.LogStart("ChangeAcceptedDomainType");
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
SetAcceptedDomainType(runSpace, domainName,domainType);
}
catch (Exception ex)
{
ExchangeLog.LogError("ChangeAcceptedDomainType", ex);
throw;
}
finally
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("ChangeAcceptedDomainType");
}
private void DeleteAcceptedDomain(string domainName) private void DeleteAcceptedDomain(string domainName)
{ {
ExchangeLog.LogStart("DeleteAcceptedDomain"); ExchangeLog.LogStart("DeleteAcceptedDomain");
@ -6010,17 +6018,6 @@ namespace WebsitePanel.Providers.HostedSolution
ExchangeLog.LogEnd("RemoveAcceptedDomain"); ExchangeLog.LogEnd("RemoveAcceptedDomain");
} }
private void SetAcceptedDomainType(Runspace runSpace, string id, ExchangeAcceptedDomainType domainType)
{
ExchangeLog.LogStart("SetAcceptedDomainType");
Command cmd = new Command("Set-AcceptedDomain");
cmd.Parameters.Add("Identity", id);
cmd.Parameters.Add("DomainType", domainType.ToString());
cmd.Parameters.Add("Confirm", false);
ExecuteShellCommand(runSpace, cmd);
ExchangeLog.LogEnd("SetAcceptedDomainType");
}
#endregion #endregion
#region ActiveSync #region ActiveSync

View file

@ -3477,7 +3477,7 @@ namespace WebsitePanel.Providers.Web
#endregion #endregion
public new bool IsIISInstalled() public override bool IsIISInstalled()
{ {
int value = 0; int value = 0;
RegistryKey root = Registry.LocalMachine; RegistryKey root = Registry.LocalMachine;
@ -3488,7 +3488,7 @@ namespace WebsitePanel.Providers.Web
rk.Close(); rk.Close();
} }
return value == 7 || value == 8; return value == 7;
} }
public override bool IsInstalled() public override bool IsInstalled()
@ -4042,6 +4042,26 @@ namespace WebsitePanel.Providers.Web
// moved down to IIs60 // moved down to IIs60
override public bool CheckLoadUserProfile()
{
using (var srvman = new ServerManager())
{
return srvman.ApplicationPools["WebsitePanel Server"].ProcessModel.LoadUserProfile;
}
}
override public void EnableLoadUserProfile()
{
using (var srvman = new ServerManager())
{
srvman.ApplicationPools["WebsitePanel Server"].ProcessModel.LoadUserProfile = true;
// save changes
srvman.CommitChanges();
}
}
#endregion #endregion
} }
} }

View file

@ -19,13 +19,3 @@ using System.Runtime.InteropServices;
// The following GUID is for the ID of the typelib if this project is exposed to COM // The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("0eb18093-bb95-406a-ab78-a2e45f4cb972")] [assembly: Guid("0eb18093-bb95-406a-ab78-a2e45f4cb972")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:

View file

@ -3368,7 +3368,7 @@ namespace WebsitePanel.Providers.Web
} }
#endregion #endregion
public bool IsIISInstalled() public virtual bool IsIISInstalled()
{ {
int value = 0; int value = 0;
RegistryKey root = Registry.LocalMachine; RegistryKey root = Registry.LocalMachine;
@ -3394,6 +3394,18 @@ namespace WebsitePanel.Providers.Web
private const string WPI_INSTANCE_VIEWER = "viewer"; private const string WPI_INSTANCE_VIEWER = "viewer";
private const string WPI_INSTANCE_INSTALLER = "installer"; private const string WPI_INSTANCE_INSTALLER = "installer";
virtual public bool CheckLoadUserProfile()
{
throw new NotImplementedException("LoadUserProfile option valid only on IIS7 or higer");
}
virtual public void EnableLoadUserProfile()
{
throw new NotImplementedException("LoadUserProfile option valid only on IIS7 or higer");
}
public void InitFeeds(int UserId, string[] feeds) public void InitFeeds(int UserId, string[] feeds)
{ {
//need to call InitFeeds() before any operation with WPIApplicationGallery() //need to call InitFeeds() before any operation with WPIApplicationGallery()
@ -3667,5 +3679,10 @@ namespace WebsitePanel.Providers.Web
throw new NotSupportedException(); throw new NotSupportedException();
} }
#endregion #endregion
}
}
} }

View file

@ -44,6 +44,7 @@ using System.Web;
using System.Diagnostics; using System.Diagnostics;
using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations; using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;
using DeploymentParameter = WebsitePanel.Providers.WebAppGallery.DeploymentParameter; using DeploymentParameter = WebsitePanel.Providers.WebAppGallery.DeploymentParameter;
using DeploymentParameterWPI = Microsoft.Web.PlatformInstaller.DeploymentParameter;
namespace WebsitePanel.Providers.Web.WPIWebApplicationGallery namespace WebsitePanel.Providers.Web.WPIWebApplicationGallery
{ {
@ -268,10 +269,10 @@ namespace WebsitePanel.Providers.Web.WPIWebApplicationGallery
Product product = wpi.GetProduct(id); Product product = wpi.GetProduct(id);
List<DeploymentParameter> deploymentParameters = new List<DeploymentParameter>(); List<DeploymentParameter> deploymentParameters = new List<DeploymentParameter>();
IList<DeclaredParameter> appDecalredParameters = wpi.GetAppDecalredParameters(id); IList<DeploymentParameterWPI> appDeploymentWPIParameters = wpi.GetAppDecalredParameters(id);
foreach (DeclaredParameter declaredParameter in appDecalredParameters) foreach (DeploymentParameterWPI deploymentParameter in appDeploymentWPIParameters)
{ {
deploymentParameters.Add(MakeDeploymentParameterFromDecalredParameter(declaredParameter)); deploymentParameters.Add(MakeDeploymentParameterFromDecalredParameter(deploymentParameter));
} }
return deploymentParameters; return deploymentParameters;
@ -398,28 +399,41 @@ namespace WebsitePanel.Providers.Web.WPIWebApplicationGallery
}; };
} }
protected static DeploymentParameter MakeDeploymentParameterFromDecalredParameter(DeclaredParameter d) protected static DeploymentParameter MakeDeploymentParameterFromDecalredParameter(DeploymentParameterWPI d)
{ {
DeploymentParameter r = new DeploymentParameter(); DeploymentParameter r = new DeploymentParameter();
r.Name = d.Name; r.Name = d.Name;
r.FriendlyName = d.FriendlyName; r.FriendlyName = d.FriendlyName;
r.DefaultValue = d.DefaultValue; r.DefaultValue = d.DefaultValue;
r.Description = d.Description; r.Description = d.Description;
#pragma warning disable 612,618 r.SetWellKnownTagsFromRawString(d.RawTags);
r.WellKnownTags = DeploymentParameterWellKnownTag.ALLKNOWN & (DeploymentParameterWellKnownTag) d.Tags; if (!string.IsNullOrEmpty(d.ValidationString))
if (null != d.Validation)
{ {
r.ValidationKind = (DeploymentParameterValidationKind) d.Validation.Kind; // synchronized with Microsoft.Web.Deployment.DeploymentSyncParameterValidationKind
r.ValidationString = d.Validation.ValidationString; if (d.HasValidation((int)DeploymentParameterValidationKind.AllowEmpty))
{
r.ValidationKind |= DeploymentParameterValidationKind.AllowEmpty;
}
if (d.HasValidation((int)DeploymentParameterValidationKind.RegularExpression))
{
r.ValidationKind |= DeploymentParameterValidationKind.RegularExpression;
}
if (d.HasValidation((int)DeploymentParameterValidationKind.Enumeration))
{
r.ValidationKind |= DeploymentParameterValidationKind.Enumeration;
}
if (d.HasValidation((int)DeploymentParameterValidationKind.Boolean))
{
r.ValidationKind |= DeploymentParameterValidationKind.Boolean;
}
r.ValidationString = d.ValidationString;
} }
else else
{ {
r.ValidationKind = DeploymentParameterValidationKind.None; r.ValidationKind = DeploymentParameterValidationKind.None;
} }
#pragma warning restore 612,618
return r; return r;
} }

View file

@ -77,11 +77,6 @@
<HintPath>..\..\Lib\References\Microsoft\Microsoft.Web.PlatformInstaller.dll</HintPath> <HintPath>..\..\Lib\References\Microsoft\Microsoft.Web.PlatformInstaller.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Microsoft.Web.PlatformInstaller.WebDeployShim, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\References\Microsoft\Microsoft.Web.PlatformInstaller.WebDeployShim.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.DirectoryServices" /> <Reference Include="System.DirectoryServices" />

View file

@ -0,0 +1,34 @@
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WebsitePanel.Providers.Web
{
public class IIs80 : IIs70, IWebServer
{
public IIs80() : base()
{
}
public override bool IsIISInstalled()
{
int value = 0;
RegistryKey root = Registry.LocalMachine;
RegistryKey rk = root.OpenSubKey("SOFTWARE\\Microsoft\\InetStp");
if (rk != null)
{
value = (int)rk.GetValue("MajorVersion", null);
rk.Close();
}
return value == 8;
}
public override bool IsInstalled()
{
return IsIISInstalled();
}
}
}

View file

@ -0,0 +1,21 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("WebsitePanel.Providers.Web.IIs80")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("WebsitePanel.Providers.Web.IIs80")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("b0305c67-ead3-4d69-a0d8-548f6d0f705b")]

View file

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{6E348968-461D-45A1-B235-4F552947B9F1}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>WebsitePanel.Providers.Web</RootNamespace>
<AssemblyName>WebsitePanel.Providers.Web.IIs80</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\WebsitePanel.Server\bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\WebsitePanel.Server\bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\VersionInfo.cs">
<Link>VersionInfo.cs</Link>
</Compile>
<Compile Include="IIs80.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\WebsitePanel.Providers.Base\WebsitePanel.Providers.Base.csproj">
<Project>{684c932a-6c75-46ac-a327-f3689d89eb42}</Project>
<Name>WebsitePanel.Providers.Base</Name>
</ProjectReference>
<ProjectReference Include="..\WebsitePanel.Providers.Web.IIs60\WebsitePanel.Providers.Web.IIs60.csproj">
<Project>{9be0317d-e42e-4ff6-9a87-8c801f046ea1}</Project>
<Name>WebsitePanel.Providers.Web.IIs60</Name>
</ProjectReference>
<ProjectReference Include="..\WebsitePanel.Providers.Web.IIS70\WebsitePanel.Providers.Web.IIs70.csproj">
<Project>{1b9dce85-c664-49fc-b6e1-86c63cab88d1}</Project>
<Name>WebsitePanel.Providers.Web.IIs70</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View file

@ -1,8 +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 // - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer. // list of conditions and the following disclaimer.
@ -52,6 +47,7 @@ namespace WebsitePanel.Providers.Web
using WebsitePanel.Providers.Common; using WebsitePanel.Providers.Common;
/// <remarks/> /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()]
@ -180,6 +176,10 @@ namespace WebsitePanel.Providers.Web
private System.Threading.SendOrPostCallback DeleteHeliconApeGroupOperationCompleted; private System.Threading.SendOrPostCallback DeleteHeliconApeGroupOperationCompleted;
private System.Threading.SendOrPostCallback CheckLoadUserProfileOperationCompleted;
private System.Threading.SendOrPostCallback EnableLoadUserProfileOperationCompleted;
private System.Threading.SendOrPostCallback InitFeedsOperationCompleted; private System.Threading.SendOrPostCallback InitFeedsOperationCompleted;
private System.Threading.SendOrPostCallback SetResourceLanguageOperationCompleted; private System.Threading.SendOrPostCallback SetResourceLanguageOperationCompleted;
@ -416,6 +416,12 @@ namespace WebsitePanel.Providers.Web
/// <remarks/> /// <remarks/>
public event DeleteHeliconApeGroupCompletedEventHandler DeleteHeliconApeGroupCompleted; public event DeleteHeliconApeGroupCompletedEventHandler DeleteHeliconApeGroupCompleted;
/// <remarks/>
public event CheckLoadUserProfileCompletedEventHandler CheckLoadUserProfileCompleted;
/// <remarks/>
public event EnableLoadUserProfileCompletedEventHandler EnableLoadUserProfileCompleted;
/// <remarks/> /// <remarks/>
public event InitFeedsCompletedEventHandler InitFeedsCompleted; public event InitFeedsCompletedEventHandler InitFeedsCompleted;
@ -3005,6 +3011,82 @@ namespace WebsitePanel.Providers.Web
} }
} }
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CheckLoadUserProfile", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public bool CheckLoadUserProfile() {
object[] results = this.Invoke("CheckLoadUserProfile", new object[0]);
return ((bool)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginCheckLoadUserProfile(System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("CheckLoadUserProfile", new object[0], callback, asyncState);
}
/// <remarks/>
public bool EndCheckLoadUserProfile(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((bool)(results[0]));
}
/// <remarks/>
public void CheckLoadUserProfileAsync() {
this.CheckLoadUserProfileAsync(null);
}
/// <remarks/>
public void CheckLoadUserProfileAsync(object userState) {
if ((this.CheckLoadUserProfileOperationCompleted == null)) {
this.CheckLoadUserProfileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckLoadUserProfileOperationCompleted);
}
this.InvokeAsync("CheckLoadUserProfile", new object[0], this.CheckLoadUserProfileOperationCompleted, userState);
}
private void OnCheckLoadUserProfileOperationCompleted(object arg) {
if ((this.CheckLoadUserProfileCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.CheckLoadUserProfileCompleted(this, new CheckLoadUserProfileCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/EnableLoadUserProfile", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public void EnableLoadUserProfile() {
this.Invoke("EnableLoadUserProfile", new object[0]);
}
/// <remarks/>
public System.IAsyncResult BeginEnableLoadUserProfile(System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("EnableLoadUserProfile", new object[0], callback, asyncState);
}
/// <remarks/>
public void EndEnableLoadUserProfile(System.IAsyncResult asyncResult) {
this.EndInvoke(asyncResult);
}
/// <remarks/>
public void EnableLoadUserProfileAsync() {
this.EnableLoadUserProfileAsync(null);
}
/// <remarks/>
public void EnableLoadUserProfileAsync(object userState) {
if ((this.EnableLoadUserProfileOperationCompleted == null)) {
this.EnableLoadUserProfileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnEnableLoadUserProfileOperationCompleted);
}
this.InvokeAsync("EnableLoadUserProfile", new object[0], this.EnableLoadUserProfileOperationCompleted, userState);
}
private void OnEnableLoadUserProfileOperationCompleted(object arg) {
if ((this.EnableLoadUserProfileCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.EnableLoadUserProfileCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/> /// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/InitFeeds", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/InitFeeds", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
@ -5064,6 +5146,36 @@ namespace WebsitePanel.Providers.Web
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void DeleteHeliconApeGroupCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); public delegate void DeleteHeliconApeGroupCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void CheckLoadUserProfileCompletedEventHandler(object sender, CheckLoadUserProfileCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class CheckLoadUserProfileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal CheckLoadUserProfileCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public bool Result {
get {
this.RaiseExceptionIfNecessary();
return ((bool)(this.results[0]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void EnableLoadUserProfileCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
/// <remarks/> /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void InitFeedsCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); public delegate void InitFeedsCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);

View file

@ -1,5 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2010 # Visual Studio 2012
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Caching Application Block", "Caching Application Block", "{C8E6F2E4-A5B8-486A-A56E-92D864524682}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Caching Application Block", "Caching Application Block", "{C8E6F2E4-A5B8-486A-A56E-92D864524682}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
Bin\Microsoft.Practices.EnterpriseLibrary.Common.dll = Bin\Microsoft.Practices.EnterpriseLibrary.Common.dll Bin\Microsoft.Practices.EnterpriseLibrary.Common.dll = Bin\Microsoft.Practices.EnterpriseLibrary.Common.dll
@ -107,6 +107,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Providers.Mail
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Providers.OS.Windows2012", "WebsitePanel.Providers.OS.Windows2012\WebsitePanel.Providers.OS.Windows2012.csproj", "{27130BBB-76FA-411E-8B4D-51CD4DC821AF}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Providers.OS.Windows2012", "WebsitePanel.Providers.OS.Windows2012\WebsitePanel.Providers.OS.Windows2012.csproj", "{27130BBB-76FA-411E-8B4D-51CD4DC821AF}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Providers.Web.IIs80", "WebsitePanel.Providers.Web.IIs80\WebsitePanel.Providers.Web.IIs80.csproj", "{6E348968-461D-45A1-B235-4F552947B9F1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Providers.FTP.IIs80", "WebsitePanel.Providers.FTP.IIs80\WebsitePanel.Providers.FTP.IIs80.csproj", "{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -587,6 +591,26 @@ Global
{27130BBB-76FA-411E-8B4D-51CD4DC821AF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {27130BBB-76FA-411E-8B4D-51CD4DC821AF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{27130BBB-76FA-411E-8B4D-51CD4DC821AF}.Release|Mixed Platforms.Build.0 = Release|Any CPU {27130BBB-76FA-411E-8B4D-51CD4DC821AF}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{27130BBB-76FA-411E-8B4D-51CD4DC821AF}.Release|x86.ActiveCfg = Release|Any CPU {27130BBB-76FA-411E-8B4D-51CD4DC821AF}.Release|x86.ActiveCfg = Release|Any CPU
{6E348968-461D-45A1-B235-4F552947B9F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6E348968-461D-45A1-B235-4F552947B9F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6E348968-461D-45A1-B235-4F552947B9F1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{6E348968-461D-45A1-B235-4F552947B9F1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{6E348968-461D-45A1-B235-4F552947B9F1}.Debug|x86.ActiveCfg = Debug|Any CPU
{6E348968-461D-45A1-B235-4F552947B9F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6E348968-461D-45A1-B235-4F552947B9F1}.Release|Any CPU.Build.0 = Release|Any CPU
{6E348968-461D-45A1-B235-4F552947B9F1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{6E348968-461D-45A1-B235-4F552947B9F1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{6E348968-461D-45A1-B235-4F552947B9F1}.Release|x86.ActiveCfg = Release|Any CPU
{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Debug|x86.ActiveCfg = Debug|Any CPU
{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Release|Any CPU.Build.0 = Release|Any CPU
{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{D73CCF4C-9CFF-4D61-9030-34DCAF0C50D6}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View file

@ -38,6 +38,7 @@ using System.Threading;
using Microsoft.Web.Deployment; using Microsoft.Web.Deployment;
using Microsoft.Web.PlatformInstaller; using Microsoft.Web.PlatformInstaller;
using Installer = Microsoft.Web.PlatformInstaller.Installer; using Installer = Microsoft.Web.PlatformInstaller.Installer;
using DeploymentParameterWPI = Microsoft.Web.PlatformInstaller.DeploymentParameter;
namespace WebsitePanel.Server.Code namespace WebsitePanel.Server.Code
{ {
@ -453,11 +454,11 @@ namespace WebsitePanel.Server.Code
return products; return products;
} }
public IList<DeclaredParameter> GetAppDecalredParameters(string productId) public IList<DeploymentParameterWPI> GetAppDecalredParameters(string productId)
{ {
Product app = _productManager.GetProduct(productId); Product app = _productManager.GetProduct(productId);
Installer appInstaller = app.GetInstaller(GetLanguage(null)); Installer appInstaller = app.GetInstaller(GetLanguage(null));
return appInstaller.MSDeployPackage.DeclaredParameters; return appInstaller.MSDeployPackage.DeploymentParameters;
} }
public bool InstallApplication( public bool InstallApplication(
@ -501,7 +502,7 @@ namespace WebsitePanel.Server.Code
DeploymentWellKnownTag dbTag = (DeploymentWellKnownTag)GetDbTag(updatedValues); DeploymentWellKnownTag dbTag = (DeploymentWellKnownTag)GetDbTag(updatedValues);
// remove parameters with alien db tags // remove parameters with alien db tags
foreach (DeclaredParameter parameter in appInstaller.MSDeployPackage.DeclaredParameters) foreach (DeploymentParameterWPI parameter in appInstaller.MSDeployPackage.DeploymentParameters)
{ {
if (IsAlienDbTaggedParameter(dbTag, parameter)) if (IsAlienDbTaggedParameter(dbTag, parameter))
{ {
@ -726,13 +727,16 @@ namespace WebsitePanel.Server.Code
return DeploymentWellKnownTag.None; return DeploymentWellKnownTag.None;
} }
private static bool IsAlienDbTaggedParameter(DeploymentWellKnownTag dbTag, DeclaredParameter parameter) private static bool IsAlienDbTaggedParameter(DeploymentWellKnownTag dbTag, DeploymentParameterWPI parameter)
{ {
return parameter.HasTags((long)databaseEngineTags) && !parameter.HasTags((long)dbTag);
/*
#pragma warning disable 612,618 #pragma warning disable 612,618
return (parameter.Tags & databaseEngineTags) != DeploymentWellKnownTag.None return (parameter.Tags & databaseEngineTags) != DeploymentWellKnownTag.None
&& &&
(parameter.Tags & dbTag) == DeploymentWellKnownTag.None; (parameter.Tags & dbTag) == DeploymentWellKnownTag.None;
#pragma warning restore 612,618 #pragma warning restore 612,618
*/
} }
private static void RemoveUnusedProviders(MSDeployPackage msDeployPackage, DeploymentWellKnownTag dbTag) private static void RemoveUnusedProviders(MSDeployPackage msDeployPackage, DeploymentWellKnownTag dbTag)

View file

@ -1061,6 +1061,42 @@ namespace WebsitePanel.Server
#endregion #endregion
#region Web Application Gallery #region Web Application Gallery
[WebMethod, SoapHeader("settings")]
public bool CheckLoadUserProfile()
{
try
{
Log.WriteStart("CheckLoadUserProfile");
return WebProvider.CheckLoadUserProfile();
Log.WriteEnd("CheckLoadUserProfile");
}
catch (Exception ex)
{
Log.WriteError("CheckLoadUserProfile", ex);
throw;
}
}
[WebMethod, SoapHeader("settings")]
public void EnableLoadUserProfile()
{
try
{
Log.WriteStart("EnableLoadUserProfile");
WebProvider.EnableLoadUserProfile();
Log.WriteEnd("EnableLoadUserProfile");
}
catch (Exception ex)
{
Log.WriteError("EnableLoadUserProfile", ex);
throw;
}
}
[WebMethod, SoapHeader("settings")] [WebMethod, SoapHeader("settings")]
public void InitFeeds(int UserId, string[] feeds) public void InitFeeds(int UserId, string[] feeds)
{ {

View file

@ -876,6 +876,9 @@
<data name="Error.WPI_LOAD_FEED" xml:space="preserve"> <data name="Error.WPI_LOAD_FEED" xml:space="preserve">
<value>Error loading feeds. Please check system settings</value> <value>Error loading feeds. Please check system settings</value>
</data> </data>
<data name="Error.WPI_CHECK_LOAD_USER_PROFILE" xml:space="preserve">
<value>Error checking 'Load user profile' application pool setting.</value>
</data>
<data name="Error.SPACE_LETTER_GET" xml:space="preserve"> <data name="Error.SPACE_LETTER_GET" xml:space="preserve">
<value>Error building hosting space summary letter</value> <value>Error building hosting space summary letter</value>
</data> </data>
@ -5125,9 +5128,6 @@
<data name="ResourceGroup.Lync" xml:space="preserve"> <data name="ResourceGroup.Lync" xml:space="preserve">
<value>Lync Server</value> <value>Lync Server</value>
</data> </data>
<data name="Success.UPDATE_LYNC_USER" xml:space="preserve">
<value>General Lync User settings have been successfully updated.</value>
</data>
<data name="Warning.CREATE_LYNC_USER" xml:space="preserve"> <data name="Warning.CREATE_LYNC_USER" xml:space="preserve">
<value>Lync User has been successfully created but the following errors have been occured:</value> <value>Lync User has been successfully created but the following errors have been occured:</value>
</data> </data>
@ -5191,14 +5191,12 @@
<data name="Success.EXCHANGE_STAMPMAILBOXES" xml:space="preserve"> <data name="Success.EXCHANGE_STAMPMAILBOXES" xml:space="preserve">
<value>Succesfully stamp mailboxes</value> <value>Succesfully stamp mailboxes</value>
</data> </data>
<data name="Error.EXCHANGE_UPDATEPLANS" xml:space="preserve"> <data name="Error.EXCHANGE_UPDATEPLANS" xml:space="preserve">
<value>Mailbox plan update failed</value> <value>Mailbox plan update failed</value>
</data> </data>
<data name="Success.EXCHANGE_UPDATEPLANS" xml:space="preserve"> <data name="Success.EXCHANGE_UPDATEPLANS" xml:space="preserve">
<value>Mailbox plan updated</value> <value>Mailbox plan updated</value>
</data> </data>
<data name="Error.LYNC_APPLYPLANTEMPLATE" xml:space="preserve"> <data name="Error.LYNC_APPLYPLANTEMPLATE" xml:space="preserve">
<value>Failed to apply plans template</value> <value>Failed to apply plans template</value>
</data> </data>
@ -5208,7 +5206,16 @@
<data name="Success.REQUEST_COMPLETED_SUCCESFULLY" xml:space="preserve"> <data name="Success.REQUEST_COMPLETED_SUCCESFULLY" xml:space="preserve">
<value>Request Completed Succesfully</value> <value>Request Completed Succesfully</value>
</data> </data>
<data name="Error.WEB_SWITCH_TO_DEDICATED_IP" xml:space="preserve">
<value>Error updating web site to dedicated IP</value>
</data>
<data name="Error.WEB_SWITCH_TO_SHARED_IP" xml:space="preserve">
<value>Error updating web site to shared IP</value>
</data>
<data name="Success.WEB_SWITCH_TO_DEDICATED_IP" xml:space="preserve">
<value>Web site has been updated to dedicated IP</value>
</data>
<data name="Success.WEB_SWITCH_TO_SHARED_IP" xml:space="preserve">
<value>Web site has been updated to shared IP</value>
</data>
</root> </root>

View file

@ -151,6 +151,6 @@
<value>Status</value> <value>Status</value>
</data> </data>
<data name="locSubscriberNumber.Text" xml:space="preserve"> <data name="locSubscriberNumber.Text" xml:space="preserve">
<value>Subscriber Number:</value> <value>Account Number:</value>
</data> </data>
</root> </root>

View file

@ -160,7 +160,7 @@
<value>Secondary E-Mail:</value> <value>Secondary E-Mail:</value>
</data> </data>
<data name="lblSubscriberNumber.Text" xml:space="preserve"> <data name="lblSubscriberNumber.Text" xml:space="preserve">
<value>Subscriber Number:</value> <value>Account Number:</value>
</data> </data>
<data name="lblUsername.Text" xml:space="preserve"> <data name="lblUsername.Text" xml:space="preserve">
<value>User name:</value> <value>User name:</value>

View file

@ -202,6 +202,6 @@
<value>*</value> <value>*</value>
</data> </data>
<data name="lblSubscriberNumber" xml:space="preserve"> <data name="lblSubscriberNumber" xml:space="preserve">
<value>Subscriber Number:</value> <value>Account Number:</value>
</data> </data>
</root> </root>

View file

@ -112,10 +112,10 @@
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="btnAdd.Text" xml:space="preserve"> <data name="btnAdd.Text" xml:space="preserve">
<value>Add Pointer</value> <value>Add Pointer</value>
@ -124,6 +124,6 @@
<value>Cancel</value> <value>Cancel</value>
</data> </data>
<data name="lblDomainName.Text" xml:space="preserve"> <data name="lblDomainName.Text" xml:space="preserve">
<value>Domain Alias:</value> <value>Web Site Pointer:</value>
</data> </data>
</root> </root>

View file

@ -112,10 +112,10 @@
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="btnAdd.OnClientClick" xml:space="preserve"> <data name="btnAdd.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Creating web site...');</value> <value>ShowProgressDialog('Creating web site...');</value>
@ -126,11 +126,14 @@
<data name="btnCancel.Text" xml:space="preserve"> <data name="btnCancel.Text" xml:space="preserve">
<value>Cancel</value> <value>Cancel</value>
</data> </data>
<data name="chkIgnoreGlobalDNSRecords.Text" xml:space="preserve">
<value>Ignore Zone Template</value>
</data>
<data name="lblAspNetVersion.Text" xml:space="preserve"> <data name="lblAspNetVersion.Text" xml:space="preserve">
<value>ASP.NET Version:</value> <value>ASP.NET Version:</value>
</data> </data>
<data name="lblDomainName.Text" xml:space="preserve"> <data name="lblDomainName.Text" xml:space="preserve">
<value>Domain Name:</value> <value>Site:</value>
</data> </data>
<data name="lblIPAddress.Text" xml:space="preserve"> <data name="lblIPAddress.Text" xml:space="preserve">
<value>IP address:</value> <value>IP address:</value>
@ -138,6 +141,9 @@
<data name="lblIPHelp.Text" xml:space="preserve"> <data name="lblIPHelp.Text" xml:space="preserve">
<value>If you need your web site to be accessible via dedicated IP address or you are planning to enable SSL for your site you should choose "Dedicated IP" option; otherwise leave this settings by default. In order to create IP-based site you need to purchase IP address from your host.</value> <value>If you need your web site to be accessible via dedicated IP address or you are planning to enable SSL for your site you should choose "Dedicated IP" option; otherwise leave this settings by default. In order to create IP-based site you need to purchase IP address from your host.</value>
</data> </data>
<data name="lblIPHelp2.Text" xml:space="preserve">
<value>Note: A Zone Template is often defined by your host and contains additional Web Site Pointers to create when creating a new Web Site. Static record definitions such as 'www' conflicts when creating an additional Web Site in the same Domain. &lt;/p&gt;Check this option to ignore the Zone Template and create the new Web Site with this Web Site Pointer only. </value>
</data>
<data name="rbDedicatedIP.Text" xml:space="preserve"> <data name="rbDedicatedIP.Text" xml:space="preserve">
<value>Dedicated</value> <value>Dedicated</value>
</data> </data>

View file

@ -112,10 +112,10 @@
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="btnAddFolder.Text" xml:space="preserve"> <data name="btnAddFolder.Text" xml:space="preserve">
<value>Add Folder</value> <value>Add Folder</value>
@ -243,7 +243,7 @@
<data name="gvHeliconApeGroupsName.Header" xml:space="preserve"> <data name="gvHeliconApeGroupsName.Header" xml:space="preserve">
<value>.htaccess Groups</value> <value>.htaccess Groups</value>
</data> </data>
<data name="gvMimeTypes.Empty" xml:space="preserve"> <data name="gvMimeTypes.Empty" xml:space="preserve">
<value>Custom MIME types are not defined</value> <value>Custom MIME types are not defined</value>
</data> </data>
<data name="gvMimeTypesExtension.Header" xml:space="preserve"> <data name="gvMimeTypesExtension.Header" xml:space="preserve">
@ -408,55 +408,82 @@ To connect to web site management service please use username and password provi
<data name="Tab.SSL" xml:space="preserve"> <data name="Tab.SSL" xml:space="preserve">
<value>SSL</value> <value>SSL</value>
</data> </data>
<data name="Tab.WebDeployPublishing" xml:space="preserve"> <data name="Tab.WebDeployPublishing" xml:space="preserve">
<value>Web Publishing</value> <value>Web Publishing</value>
</data> </data>
<data name="WDeploySitePublishingDisabled.Text" xml:space="preserve"> <data name="WDeploySitePublishingDisabled.Text" xml:space="preserve">
<value>Web Deploy Publishing is Disabled.</value> <value>Web Deploy Publishing is Disabled.</value>
</data> </data>
<data name="WDeploySitePublishingEnabled.Text" xml:space="preserve"> <data name="WDeploySitePublishingEnabled.Text" xml:space="preserve">
<value>Web Deploy Publishing is Enabled.</value> <value>Web Deploy Publishing is Enabled.</value>
</data> </data>
<data name="WDeploySitePublishingEnablementHint.Text" xml:space="preserve"> <data name="WDeploySitePublishingEnablementHint.Text" xml:space="preserve">
<value>To enable Web Publishing for this web site specify account user name and password and then click "Enable" button.</value> <value>To enable Web Publishing for this web site specify account user name and password and then click "Enable" button.</value>
</data> </data>
<data name="PubProfileMsSqlLocalize.Text" xml:space="preserve"> <data name="PubProfileMsSqlLocalize.Text" xml:space="preserve">
<value>Please choose a Microsoft SQL database:</value> <value>Please choose a Microsoft SQL database:</value>
</data> </data>
<data name="WDeployBuildPublishingProfileWizard.Text" xml:space="preserve"> <data name="WDeployBuildPublishingProfileWizard.Text" xml:space="preserve">
<value>Build Publising Profile Wizard</value> <value>Build Publising Profile Wizard</value>
</data> </data>
<data name="WDeployBuildSitePublishingProfileHint.Text" xml:space="preserve"> <data name="WDeployBuildSitePublishingProfileHint.Text" xml:space="preserve">
<value>Please use the link below to build a publishing profile that makes it easy to configure publishing settings for your convenience.</value> <value>Please use the link below to build a publishing profile that makes it easy to configure publishing settings for your convenience.</value>
</data> </data>
<data name="WDeployChangePublishingPasswButton.Text" xml:space="preserve"> <data name="WDeployChangePublishingPasswButton.Text" xml:space="preserve">
<value>Change Password</value> <value>Change Password</value>
</data> </data>
<data name="WDeployDisablePublishingButton.Text" xml:space="preserve"> <data name="WDeployDisablePublishingButton.Text" xml:space="preserve">
<value>Disable</value> <value>Disable</value>
</data> </data>
<data name="WDeployEnabePublishingButton.Text" xml:space="preserve"> <data name="WDeployEnabePublishingButton.Text" xml:space="preserve">
<value>Enable</value> <value>Enable</value>
</data> </data>
<data name="WDeployPublishingAccountLocalize.Text" xml:space="preserve"> <data name="WDeployPublishingAccountLocalize.Text" xml:space="preserve">
<value>Username:</value> <value>Username:</value>
</data> </data>
<data name="WDeployPublishingConfirmPasswordLocalize.Text" xml:space="preserve"> <data name="WDeployPublishingConfirmPasswordLocalize.Text" xml:space="preserve">
<value>Confim password:</value> <value>Confim password:</value>
</data> </data>
<data name="WDeployPublishingPasswordLocalize.Text" xml:space="preserve"> <data name="WDeployPublishingPasswordLocalize.Text" xml:space="preserve">
<value>Password:</value> <value>Password:</value>
</data> </data>
<data name="WDeployPublishingProfileUsageNotes.Text" xml:space="preserve"> <data name="WDeployPublishingProfileUsageNotes.Text" xml:space="preserve">
<value>Now you can publish content to this site easily via either Web Matrix or Visual Studio .NET 2010. Please use the link below to download publishing profile that makes it easy to publish the content online for your convenience. You also have an option to re-build publishing profile if you decide to change or update your publishing settings.</value> <value>Now you can publish content to this site easily via either Web Matrix or Visual Studio .NET 2010. Please use the link below to download publishing profile that makes it easy to publish the content online for your convenience. You also have an option to re-build publishing profile if you decide to change or update your publishing settings.</value>
</data> </data>
<data name="WebPublishing.ChooseDatabasePrompt" xml:space="preserve"> <data name="WebPublishing.ChooseDatabasePrompt" xml:space="preserve">
<value>Choose database...</value> <value>Choose database...</value>
</data> </data>
<data name="WebPublishing.ChooseDatabaseUserPrompt" xml:space="preserve"> <data name="WebPublishing.ChooseDatabaseUserPrompt" xml:space="preserve">
<value>Choose database user...</value> <value>Choose database user...</value>
</data> </data>
<data name="WebPublishing.ChooseFtpAccountPrompt" xml:space="preserve"> <data name="WebPublishing.ChooseFtpAccountPrompt" xml:space="preserve">
<value>Choose FTP account...</value> <value>Choose FTP account...</value>
</data> </data>
<data name="cmdApplyDedicatedIP.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Applying changes...');</value>
</data>
<data name="cmdApplyDedicatedIP.Text" xml:space="preserve">
<value>Apply</value>
</data>
<data name="cmdCancelDedicatedIP.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="cmdSwitchToDedicatedIP.Text" xml:space="preserve">
<value>Switch to dedicated IP</value>
</data>
<data name="cmdSwitchToSharedIP.OnClientClick" xml:space="preserve">
<value>if(!confirm('Do you really want to switch this web site to shared IP?')) return false;ShowProgressDialog('Applying changes...');</value>
</data>
<data name="cmdSwitchToSharedIP.Text" xml:space="preserve">
<value>Switch to shared IP</value>
</data>
<data name="locDedicatedIPAddress.Text" xml:space="preserve">
<value>IP address:</value>
</data>
<data name="locSelectIPAddress.Text" xml:space="preserve">
<value>Select IP address:</value>
</data>
<data name="locSharedIPAddress.Text" xml:space="preserve">
<value>IP address: Shared</value>
</data>
</root> </root>

View file

@ -157,7 +157,7 @@
<value>Password: *</value> <value>Password: *</value>
</data> </data>
<data name="locSubscriberNumber.Text" xml:space="preserve"> <data name="locSubscriberNumber.Text" xml:space="preserve">
<value>Subscriber Number: *</value> <value>Account Number: *</value>
</data> </data>
<data name="locTitle.Text" xml:space="preserve"> <data name="locTitle.Text" xml:space="preserve">
<value>Create New Mailbox</value> <value>Create New Mailbox</value>
@ -187,7 +187,7 @@
<value>*</value> <value>*</value>
</data> </data>
<data name="valRequireSubscriberNumber.ErrorMessage" xml:space="preserve"> <data name="valRequireSubscriberNumber.ErrorMessage" xml:space="preserve">
<value>Enter Subscriber Number</value> <value>Enter Account Number</value>
</data> </data>
<data name="valRequireSubscriberNumber.Text" xml:space="preserve"> <data name="valRequireSubscriberNumber.Text" xml:space="preserve">
<value>*</value> <value>*</value>

View file

@ -186,4 +186,10 @@
<data name="Text.PageName" xml:space="preserve"> <data name="Text.PageName" xml:space="preserve">
<value>Storage Usage</value> <value>Storage Usage</value>
</data> </data>
<data name="locAverageMailboxSize.Text" xml:space="preserve">
<value>Avg. Mailbox Size (MB):</value>
</data>
<data name="locTotalMailboxes.Text" xml:space="preserve">
<value>Total Mailboxes:</value>
</data>
</root> </root>

View file

@ -145,7 +145,7 @@
<value>Password: *</value> <value>Password: *</value>
</data> </data>
<data name="locSubscriberNumber.Text" xml:space="preserve"> <data name="locSubscriberNumber.Text" xml:space="preserve">
<value>Subscriber Number: *</value> <value>Account Number: *</value>
</data> </data>
<data name="locTitle.Text" xml:space="preserve"> <data name="locTitle.Text" xml:space="preserve">
<value>Create New User</value> <value>Create New User</value>
@ -160,7 +160,7 @@
<value>*</value> <value>*</value>
</data> </data>
<data name="valRequireSubscriberNumber.ErrorMessage" xml:space="preserve"> <data name="valRequireSubscriberNumber.ErrorMessage" xml:space="preserve">
<value>Enter Subscriber Number</value> <value>Enter Account Number</value>
</data> </data>
<data name="valRequireSubscriberNumber.Text" xml:space="preserve"> <data name="valRequireSubscriberNumber.Text" xml:space="preserve">
<value>*</value> <value>*</value>

View file

@ -201,7 +201,7 @@
<value>State/Province:</value> <value>State/Province:</value>
</data> </data>
<data name="locSubscriberNumber.Text" xml:space="preserve"> <data name="locSubscriberNumber.Text" xml:space="preserve">
<value>Subscriber Number:</value> <value>Account Number:</value>
</data> </data>
<data name="locTitle.Text" xml:space="preserve"> <data name="locTitle.Text" xml:space="preserve">
<value>Edit User</value> <value>Edit User</value>

View file

@ -142,7 +142,7 @@
<value>E-mail Address</value> <value>E-mail Address</value>
</data> </data>
<data name="ddlSearchColumnSubscriberNumber" xml:space="preserve"> <data name="ddlSearchColumnSubscriberNumber" xml:space="preserve">
<value>Subscriber Number</value> <value>Account Number</value>
</data> </data>
<data name="gvSubscriberNumber.Header" xml:space="preserve"> <data name="gvSubscriberNumber.Header" xml:space="preserve">
<value>Subscriber</value> <value>Subscriber</value>

View file

@ -58,7 +58,10 @@ namespace WebsitePanel.Portal.ExchangeServer
} }
} }
if (ddlDomains.Items.Count == 0) btnAdd.Enabled = false; if (ddlDomains.Items.Count == 0)
{
ddlDomains.Visible= btnAdd.Enabled = false;
}

View file

@ -95,11 +95,11 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="FormLabel150"><asp:Localize ID="locSubscriberNumber" runat="server" meta:resourcekey="locSubscriberNumber" Text="Subscriber Number: *"></asp:Localize></td> <td class="FormLabel150"><asp:Localize ID="locSubscriberNumber" runat="server" meta:resourcekey="locSubscriberNumber" Text="Account Number: *"></asp:Localize></td>
<td> <td>
<asp:TextBox ID="txtSubscriberNumber" runat="server" CssClass="HugeTextBox200"></asp:TextBox> <asp:TextBox ID="txtSubscriberNumber" runat="server" CssClass="HugeTextBox200"></asp:TextBox>
<asp:RequiredFieldValidator ID="valRequireSubscriberNumber" runat="server" meta:resourcekey="valRequireSubscriberNumber" ControlToValidate="txtSubscriberNumber" <asp:RequiredFieldValidator ID="valRequireSubscriberNumber" runat="server" meta:resourcekey="valRequireSubscriberNumber" ControlToValidate="txtSubscriberNumber"
ErrorMessage="Enter Subscriber Number" ValidationGroup="CreateMailbox" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator> ErrorMessage="Enter Account Number" ValidationGroup="CreateMailbox" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
</td> </td>
</tr> </tr>
<tr> <tr>

View file

@ -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.

View file

@ -45,7 +45,7 @@
<asp:ListItem Value="DisplayName" meta:resourcekey="ddlSearchColumnDisplayName">DisplayName</asp:ListItem> <asp:ListItem Value="DisplayName" meta:resourcekey="ddlSearchColumnDisplayName">DisplayName</asp:ListItem>
<asp:ListItem Value="PrimaryEmailAddress" meta:resourcekey="ddlSearchColumnEmail">Email</asp:ListItem> <asp:ListItem Value="PrimaryEmailAddress" meta:resourcekey="ddlSearchColumnEmail">Email</asp:ListItem>
<asp:ListItem Value="AccountName" meta:resourcekey="ddlSearchColumnAccountName">AccountName</asp:ListItem> <asp:ListItem Value="AccountName" meta:resourcekey="ddlSearchColumnAccountName">AccountName</asp:ListItem>
<asp:ListItem Value="SubscriberNumber" meta:resourcekey="ddlSearchColumnSubscriberNumber">Subscriber Number</asp:ListItem> <asp:ListItem Value="SubscriberNumber" meta:resourcekey="ddlSearchColumnSubscriberNumber">Account Number</asp:ListItem>
</asp:DropDownList><asp:TextBox ID="txtSearchValue" runat="server" CssClass="NormalTextBox" Width="100"></asp:TextBox><asp:ImageButton ID="cmdSearch" Runat="server" meta:resourcekey="cmdSearch" SkinID="SearchButton" </asp:DropDownList><asp:TextBox ID="txtSearchValue" runat="server" CssClass="NormalTextBox" Width="100"></asp:TextBox><asp:ImageButton ID="cmdSearch" Runat="server" meta:resourcekey="cmdSearch" SkinID="SearchButton"
CausesValidation="false"/> CausesValidation="false"/>
</asp:Panel> </asp:Panel>

View file

@ -155,14 +155,5 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.QuotaViewer mailboxesQuota; protected global::WebsitePanel.Portal.QuotaViewer mailboxesQuota;
/// <summary>
/// FormComments 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.Localize FormComments;
} }
} }

View file

@ -42,6 +42,11 @@
</asp:GridView> </asp:GridView>
<br /> <br />
<table cellpadding="2"> <table cellpadding="2">
<tr>
<td class="FormLabel150"><asp:Localize ID="locTotalMailboxes" runat="server" meta:resourcekey="locTotalMailboxes" Text="Total Mailboxes:"></asp:Localize></td>
<td><asp:Label ID="lblTotalMailboxes" runat="server" CssClass="NormalBold">177</asp:Label></td>
</tr>
<tr> <tr>
<td class="FormLabel150"><asp:Localize ID="locTotalMailboxItems" runat="server" meta:resourcekey="locTotalMailboxItems" Text="Total Items:"></asp:Localize></td> <td class="FormLabel150"><asp:Localize ID="locTotalMailboxItems" runat="server" meta:resourcekey="locTotalMailboxItems" Text="Total Items:"></asp:Localize></td>
<td><asp:Label ID="lblTotalMailboxItems" runat="server" CssClass="NormalBold">177</asp:Label></td> <td><asp:Label ID="lblTotalMailboxItems" runat="server" CssClass="NormalBold">177</asp:Label></td>
@ -50,6 +55,11 @@
<td class="FormLabel150"><asp:Localize ID="locTotalMailboxesSize" runat="server" meta:resourcekey="locTotalMailboxesSize" Text="Total Size (MB):"></asp:Localize></td> <td class="FormLabel150"><asp:Localize ID="locTotalMailboxesSize" runat="server" meta:resourcekey="locTotalMailboxesSize" Text="Total Size (MB):"></asp:Localize></td>
<td><asp:Label ID="lblTotalMailboxSize" runat="server" CssClass="NormalBold">100</asp:Label></td> <td><asp:Label ID="lblTotalMailboxSize" runat="server" CssClass="NormalBold">100</asp:Label></td>
</tr> </tr>
<tr>
<td class="FormLabel150"><asp:Localize ID="Localize1" runat="server" meta:resourcekey="locAverageMailboxSize" Text="Avg. Size (MB):"></asp:Localize></td>
<td><asp:Label ID="lblAverageMailboxSize" runat="server" CssClass="NormalBold">100</asp:Label></td>
</tr>
</table> </table>
<br /> <br />
</asp:Panel> </asp:Panel>

View file

@ -70,8 +70,13 @@ namespace WebsitePanel.Portal.ExchangeServer
totalMailboxesSizeMB += item.TotalSizeMB; totalMailboxesSizeMB += item.TotalSizeMB;
} }
OrganizationStatistics stats = ES.Services.ExchangeServer.GetOrganizationStatisticsByOrganization(PanelRequest.ItemID);
lblTotalMailboxItems.Text = totalMailboxItems.ToString(); lblTotalMailboxItems.Text = totalMailboxItems.ToString();
lblTotalMailboxSize.Text = totalMailboxesSizeMB.ToString(); lblTotalMailboxSize.Text = totalMailboxesSizeMB.ToString();
lblTotalMailboxes.Text = stats.CreatedMailboxes.ToString();
int avgSize = totalMailboxesSizeMB / stats.CreatedMailboxes;
lblAverageMailboxSize.Text = avgSize.ToString("N2");
} }
} }
} }

View file

@ -84,6 +84,24 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.GridView gvMailboxes; protected global::System.Web.UI.WebControls.GridView gvMailboxes;
/// <summary>
/// locTotalMailboxes 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.Localize locTotalMailboxes;
/// <summary>
/// lblTotalMailboxes 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 lblTotalMailboxes;
/// <summary> /// <summary>
/// locTotalMailboxItems control. /// locTotalMailboxItems control.
/// </summary> /// </summary>
@ -121,12 +139,21 @@ namespace WebsitePanel.Portal.ExchangeServer {
protected global::System.Web.UI.WebControls.Label lblTotalMailboxSize; protected global::System.Web.UI.WebControls.Label lblTotalMailboxSize;
/// <summary> /// <summary>
/// FormComments control. /// Localize1 control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize FormComments; protected global::System.Web.UI.WebControls.Localize Localize1;
/// <summary>
/// lblAverageMailboxSize 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 lblAverageMailboxSize;
} }
} }

View file

@ -68,11 +68,11 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="FormLabel150"><asp:Localize ID="locSubscriberNumber" runat="server" meta:resourcekey="locSubscriberNumber" Text="Subscriber Number: *"></asp:Localize></td> <td class="FormLabel150"><asp:Localize ID="locSubscriberNumber" runat="server" meta:resourcekey="locSubscriberNumber" Text="Account Number: *"></asp:Localize></td>
<td> <td>
<asp:TextBox ID="txtSubscriberNumber" runat="server" CssClass="HugeTextBox200"></asp:TextBox> <asp:TextBox ID="txtSubscriberNumber" runat="server" CssClass="HugeTextBox200"></asp:TextBox>
<asp:RequiredFieldValidator ID="valRequireSubscriberNumber" runat="server" meta:resourcekey="valRequireSubscriberNumber" ControlToValidate="txtSubscriberNumber" <asp:RequiredFieldValidator ID="valRequireSubscriberNumber" runat="server" meta:resourcekey="valRequireSubscriberNumber" ControlToValidate="txtSubscriberNumber"
ErrorMessage="Enter Subscriber Number" ValidationGroup="CreateMailbox" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator> ErrorMessage="Enter Account Number" ValidationGroup="CreateMailbox" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
</td> </td>
</tr> </tr>
<tr> <tr>

View file

@ -236,14 +236,5 @@ namespace WebsitePanel.Portal.HostedSolution {
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary1; protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary1;
/// <summary>
/// FormComments 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.Localize FormComments;
} }
} }

View file

@ -46,7 +46,7 @@
<asp:ListItem Value="DisplayName" meta:resourcekey="ddlSearchColumnDisplayName">DisplayName</asp:ListItem> <asp:ListItem Value="DisplayName" meta:resourcekey="ddlSearchColumnDisplayName">DisplayName</asp:ListItem>
<asp:ListItem Value="PrimaryEmailAddress" meta:resourcekey="ddlSearchColumnEmail">Email</asp:ListItem> <asp:ListItem Value="PrimaryEmailAddress" meta:resourcekey="ddlSearchColumnEmail">Email</asp:ListItem>
<asp:ListItem Value="AccountName" meta:resourcekey="ddlSearchColumnAccountName">AccountName</asp:ListItem> <asp:ListItem Value="AccountName" meta:resourcekey="ddlSearchColumnAccountName">AccountName</asp:ListItem>
<asp:ListItem Value="SubscriberNumber" meta:resourcekey="ddlSearchColumnSubscriberNumber">Subscriber Number</asp:ListItem> <asp:ListItem Value="SubscriberNumber" meta:resourcekey="ddlSearchColumnSubscriberNumber">Account Number</asp:ListItem>
</asp:DropDownList><asp:TextBox ID="txtSearchValue" runat="server" CssClass="NormalTextBox" Width="100"></asp:TextBox><asp:ImageButton ID="cmdSearch" Runat="server" meta:resourcekey="cmdSearch" SkinID="SearchButton" </asp:DropDownList><asp:TextBox ID="txtSearchValue" runat="server" CssClass="NormalTextBox" Width="100"></asp:TextBox><asp:ImageButton ID="cmdSearch" Runat="server" meta:resourcekey="cmdSearch" SkinID="SearchButton"
CausesValidation="false"/> CausesValidation="false"/>
</asp:Panel> </asp:Panel>

View file

@ -155,14 +155,5 @@ namespace WebsitePanel.Portal.HostedSolution {
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.QuotaViewer usersQuota; protected global::WebsitePanel.Portal.QuotaViewer usersQuota;
/// <summary>
/// FormComments 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.Localize FormComments;
} }
} }

View file

@ -54,10 +54,13 @@
<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">

View file

@ -176,16 +176,23 @@ 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));
*/
args.IsValid = true;
} }
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"];

View file

@ -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>

View file

@ -126,6 +126,16 @@ h2.ProductTitle {
</script> </script>
<asp:Panel runat="server" ID="CheckLoadUserProfilePanel" Visible="False">
<div class="MessageBox Yellow">
To continue "Load User Profile" setting for the current application pool must be enabled.
<br/>
Enable this setting now? (May require relogin)
<br/>
<br/>
<asp:Button runat="server" ID="EnableLoadUserProfileButton" Text="Yes" OnClick="EnableLoadUserProfileButton_OnClick"/>
</div>
</asp:Panel>
<asp:Panel ID="SearchPanel" class="FormBody" runat="server"> <asp:Panel ID="SearchPanel" class="FormBody" runat="server">
@ -284,7 +294,7 @@ h2.ProductTitle {
<ContentTemplate> <ContentTemplate>
<asp:Timer ID="ProgressTimer" runat="server" Enabled="False" Interval="3000" OnTick="ProgressTimerTick"></asp:Timer> <asp:Timer ID="ProgressTimer" runat="server" Enabled="False" Interval="3000" OnTick="ProgressTimerTick"></asp:Timer>
<asp:Panel ID="ProgressMessagePanel" class="FormBody" runat="server"> <asp:Panel ID="ProgressMessagePanel" class="FormBody" runat="server">
<h3 class="NormalBold">Selected products are installed now:</h3> <h3 class="NormalBold">Selected products are being installed now:</h3>
<br/> <br/>
<asp:Image runat="server" ID="ProgressAnimation" ImageAlign="AbsMiddle" ImageUrl="" CssClass="ProgressAnimation"></asp:Image> <asp:Image runat="server" ID="ProgressAnimation" ImageAlign="AbsMiddle" ImageUrl="" CssClass="ProgressAnimation"></asp:Image>
<asp:Label ID="ProgressMessage" runat="server">initializing...</asp:Label> <asp:Label ID="ProgressMessage" runat="server">initializing...</asp:Label>

View file

@ -52,6 +52,33 @@ namespace WebsitePanel.Portal
{ {
if (!IsPostBack) if (!IsPostBack)
{ {
try
{
if (!ES.Services.Servers.CheckLoadUserProfile(PanelRequest.ServerId))
{
CheckLoadUserProfilePanel.Visible = true;
}
}
catch (NotImplementedException ex)
{
CheckLoadUserProfilePanel.Visible = false;
ShowWarningMessage("Server application pool \"Load User Profile\" setting unavailable. IIS7 or higher is expected.");
}
catch (Exception ex)
{
CheckLoadUserProfilePanel.Visible = false;
ProductsPanel.Visible = false;
keywordsList.Visible = false;
SearchPanel.Visible = false;
InstallButtons1.Visible = false;
InstallButtons2.Visible = false;
ShowErrorMessage("WPI_CHECK_LOAD_USER_PROFILE", ex);
}
try try
{ {
ES.Services.Servers.InitWPIFeeds(PanelRequest.ServerId); ES.Services.Servers.InitWPIFeeds(PanelRequest.ServerId);
@ -582,5 +609,11 @@ namespace WebsitePanel.Portal
WpiLogsPre.InnerText = msg; WpiLogsPre.InnerText = msg;
} }
} }
protected void EnableLoadUserProfileButton_OnClick(object sender, EventArgs e)
{
ES.Services.Servers.EnableLoadUserProfile(PanelRequest.ServerId);
CheckLoadUserProfilePanel.Visible = false;
}
} }
} }

View file

@ -26,7 +26,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // 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.
@ -59,6 +58,24 @@ namespace WebsitePanel.Portal {
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.ServerHeaderControl ServerHeaderControl1; protected global::WebsitePanel.Portal.ServerHeaderControl ServerHeaderControl1;
/// <summary>
/// CheckLoadUserProfilePanel 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.Panel CheckLoadUserProfilePanel;
/// <summary>
/// EnableLoadUserProfileButton 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.Button EnableLoadUserProfileButton;
/// <summary> /// <summary>
/// SearchPanel control. /// SearchPanel control.
/// </summary> /// </summary>

View file

@ -14,7 +14,7 @@
<td class="Normal"><asp:Literal ID="litFullName" runat="server"></asp:Literal></td> <td class="Normal"><asp:Literal ID="litFullName" runat="server"></asp:Literal></td>
</tr> </tr>
<tr> <tr>
<td class="SubHead"><asp:Localize ID="locSubscriberNumber" runat="server" meta:resourcekey="locSubscriberNumber" Text="Subscriber Number:"/></td> <td class="SubHead"><asp:Localize ID="locSubscriberNumber" runat="server" meta:resourcekey="locSubscriberNumber" Text="Account Number:"/></td>
<td class="Normal"><asp:Literal ID="litSubscriberNumber" runat="server"></asp:Literal></td> <td class="Normal"><asp:Literal ID="litSubscriberNumber" runat="server"></asp:Literal></td>
</tr> </tr>
<tr> <tr>

View file

@ -38,7 +38,7 @@
<tr> <tr>
<td class="SubHead"> <td class="SubHead">
<asp:Label ID="lblSubscriberNumber" runat="server" meta:resourcekey="lblSubscriberNumber" Text="Subscriber Number:"></asp:Label> <asp:Label ID="lblSubscriberNumber" runat="server" meta:resourcekey="lblSubscriberNumber" Text="Account Number:"></asp:Label>
</td> </td>
<td class="NormalBold"> <td class="NormalBold">
<asp:TextBox id="txtSubscriberNumber" runat="server" CssClass="NormalTextBox"></asp:TextBox> <asp:TextBox id="txtSubscriberNumber" runat="server" CssClass="NormalTextBox"></asp:TextBox>

View file

@ -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>

View file

@ -125,8 +125,6 @@ namespace WebsitePanel.Portal
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)
{ {

View file

@ -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>

View file

@ -55,7 +55,7 @@
<tr> <tr>
<td class="SubHead"> <td class="SubHead">
<asp:Label ID="lblSubscriberNumber" runat="server" meta:resourcekey="lblSubscriberNumber" Text="Subscriber Number:"></asp:Label> <asp:Label ID="lblSubscriberNumber" runat="server" meta:resourcekey="lblSubscriberNumber" Text="Account Number:"></asp:Label>
</td> </td>
<td class="NormalBold"> <td class="NormalBold">
<asp:TextBox ID="txtSubscriberNumber" runat="server" CssClass="NormalTextBox"></asp:TextBox> <asp:TextBox ID="txtSubscriberNumber" runat="server" CssClass="NormalTextBox"></asp:TextBox>

View file

@ -155,7 +155,7 @@ namespace WebsitePanel.Portal
} }
// MySQL Server // MySQL Server
else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.MySql) != null) if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.MySql) != null)
{ {
// load package context // load package context
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
@ -170,15 +170,15 @@ namespace WebsitePanel.Portal
} }
// SQLite // SQLite
else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.SqLite) != null) if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.SqLite) != null)
AddDatabaseEngine(DeploymentParameterWellKnownTag.SqLite, "", GetLocalizedString("DatabaseEngine.SQLite")); AddDatabaseEngine(DeploymentParameterWellKnownTag.SqLite, "", GetLocalizedString("DatabaseEngine.SQLite"));
// Flat File // Flat File
else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.FlatFile) != null) if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.FlatFile) != null)
AddDatabaseEngine(DeploymentParameterWellKnownTag.FlatFile, "", GetLocalizedString("DatabaseEngine.FlatFile")); AddDatabaseEngine(DeploymentParameterWellKnownTag.FlatFile, "", GetLocalizedString("DatabaseEngine.FlatFile"));
// VistaFB // VistaFB
else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.VistaDB) != null) if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.VistaDB) != null)
AddDatabaseEngine(DeploymentParameterWellKnownTag.VistaDB, "", GetLocalizedString("DatabaseEngine.VistaDB")); AddDatabaseEngine(DeploymentParameterWellKnownTag.VistaDB, "", GetLocalizedString("DatabaseEngine.VistaDB"));

View file

@ -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"

View file

@ -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.

View file

@ -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"
@ -19,6 +19,21 @@
meta:resourcekey="valRequireCorrectHostName" ValidationExpression="^([0-9a-zA-Z])*[0-9a-zA-Z]+$" SetFocusOnError="True"></asp:RegularExpressionValidator> meta:resourcekey="valRequireCorrectHostName" ValidationExpression="^([0-9a-zA-Z])*[0-9a-zA-Z]+$" SetFocusOnError="True"></asp:RegularExpressionValidator>
</td> </td>
</tr> </tr>
<tr>
<td class="Normal" nowrap rowspan="2"></td>
<td class="Normal">
<asp:CheckBox ID="chkIgnoreGlobalDNSRecords" runat="server" meta:resourcekey="chkIgnoreGlobalDNSRecords"
Text="This hostname only, Ignore Zone Template" Checked="True" />
</td>
</tr>
<tr>
<td class="Normal">
<div class="Small" style="padding-top: 10px;">
<asp:Label ID="lblIgnoreGlobalDNSRecords" runat="server" meta:resourcekey="lblIPHelp2" Text="If you need your site..."></asp:Label>
</div>
</td>
</tr>
<tr> <tr>
<td> <td>
<br/> <br/>

View file

@ -53,6 +53,8 @@ namespace WebsitePanel.Portal
// bind IP Addresses // bind IP Addresses
BindIPAddresses(); BindIPAddresses();
BindIgnoreZoneTemplate();
// toggle // toggle
ToggleControls(); ToggleControls();
} }
@ -63,6 +65,19 @@ namespace WebsitePanel.Portal
rowDedicatedIP.Visible = rbDedicatedIP.Checked; rowDedicatedIP.Visible = rbDedicatedIP.Checked;
} }
private void BindIgnoreZoneTemplate()
{
/*
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
if (cntx.Quotas[Quotas.WEB_SITES].QuotaUsedValue > 0)
chkIgnoreGlobalDNSRecords.Visible = chkIgnoreGlobalDNSRecords.Checked = lblIgnoreGlobalDNSRecords.Visible = true;
else
chkIgnoreGlobalDNSRecords.Visible = chkIgnoreGlobalDNSRecords.Checked = lblIgnoreGlobalDNSRecords.Visible= false;
*/
chkIgnoreGlobalDNSRecords.Checked = false;
}
private void BindIPAddresses() private void BindIPAddresses()
{ {
ddlIpAddresses.Items.Add(new ListItem("<Select IP>", "")); ddlIpAddresses.Items.Add(new ListItem("<Select IP>", ""));
@ -92,7 +107,7 @@ namespace WebsitePanel.Portal
int packageAddressId = rbDedicatedIP.Checked ? Utils.ParseInt(ddlIpAddresses.SelectedValue, 0) : 0; int packageAddressId = rbDedicatedIP.Checked ? Utils.ParseInt(ddlIpAddresses.SelectedValue, 0) : 0;
siteItemId = ES.Services.WebServers.AddWebSite(PanelSecurity.PackageId, txtHostName.Text.ToLower(), domainsSelectDomainControl.DomainId, siteItemId = ES.Services.WebServers.AddWebSite(PanelSecurity.PackageId, txtHostName.Text.ToLower(), domainsSelectDomainControl.DomainId,
packageAddressId); packageAddressId, chkIgnoreGlobalDNSRecords.Checked);
if (siteItemId < 0) if (siteItemId < 0)
{ {

View file

@ -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.
@ -94,6 +66,24 @@ namespace WebsitePanel.Portal {
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RegularExpressionValidator valRequireCorrectHostName; protected global::System.Web.UI.WebControls.RegularExpressionValidator valRequireCorrectHostName;
/// <summary>
/// chkIgnoreGlobalDNSRecords 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.CheckBox chkIgnoreGlobalDNSRecords;
/// <summary>
/// lblIgnoreGlobalDNSRecords 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 lblIgnoreGlobalDNSRecords;
/// <summary> /// <summary>
/// rowSiteIP control. /// rowSiteIP control.
/// </summary> /// </summary>

View file

@ -115,18 +115,38 @@
BackgroundCssClass="modalBackground" DropShadow="false" CancelControlID="PubProfileWizardCancelButton" /> BackgroundCssClass="modalBackground" DropShadow="false" CancelControlID="PubProfileWizardCancelButton" />
<div class="FormBody"> <div class="FormBody">
<wsp:SimpleMessageBox id="messageBox" runat="server" EnableViewState="false" /> <wsp:SimpleMessageBox id="messageBox" runat="server" EnableViewState="false" />
<table width="100%" cellpadding="0" cellspacing="0" border="0"> <table style="width:100%" cellpadding="0" cellspacing="0" border="0">
<tr> <tr>
<td valign="top"> <td valign="top">
<table cellpadding="7" border="0"> <table cellpadding="7" border="0">
<tr> <tr>
<td class="Big"> <td class="Big">
<asp:HyperLink ID="lnkSiteName" runat="server" NavigateUrl="#" Target="_blank">domain.com</asp:HyperLink> <asp:HyperLink ID="lnkSiteName" runat="server" NavigateUrl="#" Target="_blank">domain.com</asp:HyperLink>
<asp:Literal ID="litIPAddress" runat="server"></asp:Literal>
</td> </td>
<td>
<asp:Panel ID="sharedIP" runat="server">
<asp:Localize ID="locSharedIPAddress" runat="server" meta:resourcekey="locSharedIPAddress" Text="IP address: Shared" />
&nbsp;&nbsp;&nbsp;
<asp:LinkButton ID="cmdSwitchToDedicatedIP" meta:resourcekey="cmdSwitchToDedicatedIP" runat="server" Text="Switch to dedicated IP" OnClick="cmdSwitchToDedicatedIP_Click"></asp:LinkButton>
</asp:Panel>
<asp:Panel ID="dedicatedIP" runat="server">
<asp:Localize ID="locDedicatedIPAddress" runat="server" meta:resourcekey="locDedicatedIPAddress" Text="IP address:" />
<asp:Literal ID="litIPAddress" runat="server"></asp:Literal>
&nbsp;&nbsp;&nbsp;
<asp:LinkButton ID="cmdSwitchToSharedIP" meta:resourcekey="cmdSwitchToSharedIP" runat="server" Text="Switch to shared IP" OnClick="cmdSwitchToSharedIP_Click"></asp:LinkButton>
</asp:Panel>
<asp:Panel ID="switchToDedicatedIP" runat="server" Visible="false">
<asp:Localize ID="locSelectIPAddress" runat="server" meta:resourcekey="locSelectIPAddress" Text="Select IP address:" />
<asp:dropdownlist id="ddlIpAddresses" Runat="server" CssClass="NormalTextBox"></asp:dropdownlist>
&nbsp;
<asp:LinkButton ID="cmdApplyDedicatedIP" meta:resourcekey="cmdApplyDedicatedIP" runat="server" Text="Apply" OnClick="cmdApplyDedicatedIP_Click"></asp:LinkButton>
&nbsp;
<asp:LinkButton ID="cmdCancelDedicatedIP" meta:resourcekey="cmdCancelDedicatedIP" runat="server" Text="Cancel" OnClick="cmdCancelDedicatedIP_Click"></asp:LinkButton>
</asp:Panel>
</td>
</tr> </tr>
<tr> <tr>
<td> <td colspan="2">
<div class="FormButtonsBar"> <div class="FormButtonsBar">
<asp:Button ID="btnAddPointer" runat="server" Text="Add Pointer" CssClass="Button2" <asp:Button ID="btnAddPointer" runat="server" Text="Add Pointer" CssClass="Button2"
meta:resourcekey="btnAddPointer" OnClick="btnAddPointer_Click" /> meta:resourcekey="btnAddPointer" OnClick="btnAddPointer_Click" />

View file

@ -163,8 +163,29 @@ namespace WebsitePanel.Portal
lnkSiteName.Text = site.Name; lnkSiteName.Text = site.Name;
lnkSiteName.NavigateUrl = "http://" + site.Name; lnkSiteName.NavigateUrl = "http://" + site.Name;
if (!String.IsNullOrEmpty(site.SiteIPAddress)) // bind unassigned IP addresses
litIPAddress.Text = String.Format("({0})", site.SiteIPAddress); PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(site.PackageId, IPAddressPool.WebSites);
foreach (PackageIPAddress ip in ips)
{
string fullIP = ip.ExternalIP;
if (ip.InternalIP != null &&
ip.InternalIP != "" &&
ip.InternalIP != ip.ExternalIP)
fullIP += " (" + ip.InternalIP + ")";
ddlIpAddresses.Items.Add(new ListItem(fullIP, ip.PackageAddressID.ToString()));
}
bool isDedicatedIP = false;
if (!String.IsNullOrEmpty(site.SiteIPAddress))
{
litIPAddress.Text = site.SiteIPAddress;
isDedicatedIP = true;
}
dedicatedIP.Visible = isDedicatedIP;
sharedIP.Visible = !isDedicatedIP;
cmdSwitchToDedicatedIP.Visible = (ddlIpAddresses.Items.Count > 0);
litFrontPageUnavailable.Visible = false; litFrontPageUnavailable.Visible = false;
@ -981,5 +1002,74 @@ namespace WebsitePanel.Portal
PortalUtils.SPACE_ID_PARAM + "=" + PanelSecurity.PackageId.ToString())); PortalUtils.SPACE_ID_PARAM + "=" + PanelSecurity.PackageId.ToString()));
} }
#endregion #endregion
protected void cmdSwitchToDedicatedIP_Click(object sender, EventArgs e)
{
sharedIP.Visible = false;
switchToDedicatedIP.Visible = true;
}
protected void cmdSwitchToSharedIP_Click(object sender, EventArgs e)
{
// call web service
try
{
int result = ES.Services.WebServers.SwitchWebSiteToSharedIP(PanelRequest.ItemID);
if (result < 0)
{
ShowResultMessage(result);
return;
}
ShowSuccessMessage("WEB_SWITCH_TO_SHARED_IP");
}
catch (Exception ex)
{
ShowErrorMessage("WEB_SWITCH_TO_SHARED_IP", ex);
return;
}
// rebind
BindWebSite();
}
protected void cmdApplyDedicatedIP_Click(object sender, EventArgs e)
{
// call web service
try
{
int addressId = Int32.Parse(ddlIpAddresses.SelectedValue);
int result = ES.Services.WebServers.SwitchWebSiteToDedicatedIP(PanelRequest.ItemID, addressId);
if (result < 0)
{
ShowResultMessage(result);
return;
}
ShowSuccessMessage("WEB_SWITCH_TO_DEDICATED_IP");
}
catch (Exception ex)
{
ShowErrorMessage("WEB_SWITCH_TO_DEDICATED_IP", ex);
return;
}
// rebind
HideDedicatedIPPanel();
BindWebSite();
}
protected void cmdCancelDedicatedIP_Click(object sender, EventArgs e)
{
HideDedicatedIPPanel();
}
private void HideDedicatedIPPanel()
{
switchToDedicatedIP.Visible = false;
sharedIP.Visible = true;
}
} }
} }

View file

@ -192,6 +192,51 @@ namespace WebsitePanel.Portal {
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.HyperLink lnkSiteName; protected global::System.Web.UI.WebControls.HyperLink lnkSiteName;
/// <summary>
/// sharedIP 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.Panel sharedIP;
/// <summary>
/// locSharedIPAddress 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.Localize locSharedIPAddress;
/// <summary>
/// cmdSwitchToDedicatedIP 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.LinkButton cmdSwitchToDedicatedIP;
/// <summary>
/// dedicatedIP 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.Panel dedicatedIP;
/// <summary>
/// locDedicatedIPAddress 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.Localize locDedicatedIPAddress;
/// <summary> /// <summary>
/// litIPAddress control. /// litIPAddress control.
/// </summary> /// </summary>
@ -201,6 +246,60 @@ namespace WebsitePanel.Portal {
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Literal litIPAddress; protected global::System.Web.UI.WebControls.Literal litIPAddress;
/// <summary>
/// cmdSwitchToSharedIP 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.LinkButton cmdSwitchToSharedIP;
/// <summary>
/// switchToDedicatedIP 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.Panel switchToDedicatedIP;
/// <summary>
/// locSelectIPAddress 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.Localize locSelectIPAddress;
/// <summary>
/// ddlIpAddresses 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.DropDownList ddlIpAddresses;
/// <summary>
/// cmdApplyDedicatedIP 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.LinkButton cmdApplyDedicatedIP;
/// <summary>
/// cmdCancelDedicatedIP 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.LinkButton cmdCancelDedicatedIP;
/// <summary> /// <summary>
/// btnAddPointer control. /// btnAddPointer control.
/// </summary> /// </summary>

View file

@ -4,7 +4,7 @@
<add key="WebPortal.ThemeProvider" value="WebsitePanel.Portal.WebPortalThemeProvider, WebsitePanel.Portal.Modules"/> <add key="WebPortal.ThemeProvider" value="WebsitePanel.Portal.WebPortalThemeProvider, WebsitePanel.Portal.Modules"/>
<add key="WebPortal.PageTitleProvider" value="WebsitePanel.Portal.WebPortalPageTitleProvider, WebsitePanel.Portal.Modules"/> <add key="WebPortal.PageTitleProvider" value="WebsitePanel.Portal.WebPortalPageTitleProvider, WebsitePanel.Portal.Modules"/>
<add key="ChartImageHandler" value="storage=file;timeout=20;" /> <add key="ChartImageHandler" value="storage=file;timeout=20;" />
<add key="SessionValidationKey" value="DAD46D476F85E0198BCA134D7AA5CC1D7" /> <add key="SessionValidationKey" value="DAD46D476F85E0198BCA134D7AA5CC1D7" />
</appSettings> </appSettings>
<system.web> <system.web>
<!-- SiteMap settings --> <!-- SiteMap settings -->
@ -48,8 +48,8 @@
<handlers> <handlers>
<add name="ChartImg" path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" resourceType="Unspecified" preCondition="integratedMode" /> <add name="ChartImg" path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" resourceType="Unspecified" preCondition="integratedMode" />
</handlers> </handlers>
<modules> <modules>
<add name="SecureSession" type="WebsitePanel.WebPortal.SecureSessionModule" /> <add name="SecureSession" type="WebsitePanel.WebPortal.SecureSessionModule" />
</modules> </modules>
</system.webServer> </system.webServer>
</configuration> </configuration>

Some files were not shown because too many files have changed in this diff Show more