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,8 +310,11 @@ namespace WebsitePanel.EnterpriseServer
rr.MxPriority = record.MxPriority; rr.MxPriority = record.MxPriority;
if (!String.IsNullOrEmpty(rr.RecordData)) if (!String.IsNullOrEmpty(rr.RecordData))
{
if (rr.RecordName != "[host_name]")
zoneRecords.Add(rr); 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,6 +2005,7 @@ namespace WebsitePanel.EnterpriseServer
} }
// delete zone if required // delete zone if required
if (!domain.IsDomainPointer)
DnsServerController.DeleteZone(domain.ZoneItemId); DnsServerController.DeleteZone(domain.ZoneItemId);
// delete domain // delete domain

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,35 +712,45 @@ 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);
string recordData = string.Empty;
if (tmpName.Contains("."))
recordData = hostName;
else
recordData = tmpName + ((tmpName != "") ? "." : "") + domainName;
bindings.Add(new ServerBinding(ipAddr, "80", recordData));
}
}
/*
if(bindings.Count == bindingsCount)
{ {
bindings.Add(new ServerBinding(ipAddr, "80", domainName)); //only look for the host_nanme record, ignore all others
bindings.Add(new ServerBinding(ipAddr, "80", "www." + domainName)); if (dnsRecord.RecordName == "[host_name]")
{
AddBinding(bindings, new ServerBinding(ipAddr, "80", recordData));
break;
} }
*/
} }
else
{
AddBinding(bindings, new ServerBinding(ipAddr, "80", recordData));
}
}
}
if ((bindings.Count == bindingsCount) | (bindings.Count == 0))
{
AddBinding(bindings, new ServerBinding(ipAddr, "80", string.IsNullOrEmpty(hostName) ? domainName : hostName + "." + domainName));
}
}
private static void AddBinding(List<ServerBinding> bindings, ServerBinding binding)
{
foreach (ServerBinding b in bindings)
{
if (string.Compare(b.Host, binding.Host, true) == 0)
return;
}
bindings.Add(binding);
}
private static string GetWebSiteUsername(UserSettings webPolicy, string domainName) private static string GetWebSiteUsername(UserSettings webPolicy, string domainName)
{ {
@ -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,13 +933,12 @@ namespace WebsitePanel.EnterpriseServer
} }
// update host headers // update host headers
if (updateWebSite) List<ServerBinding> bindings = new List<ServerBinding>();
{
// get existing web site bindings // get existing web site bindings
WebServer web = new WebServer(); WebServer web = new WebServer();
ServiceProviderProxy.Init(web, siteItem.ServiceId); ServiceProviderProxy.Init(web, siteItem.ServiceId);
List<ServerBinding> bindings = new List<ServerBinding>();
bindings.AddRange(web.GetSiteBindings(siteItem.SiteId)); bindings.AddRange(web.GetSiteBindings(siteItem.SiteId));
// check if web site has dedicated IP assigned // check if web site has dedicated IP assigned
@ -817,29 +953,29 @@ namespace WebsitePanel.EnterpriseServer
ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP;
// fill bindings // fill bindings
FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName); FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords);
//for logging purposes
foreach (ServerBinding b in bindings) foreach (ServerBinding b in bindings)
{ {
string header = string.Format("{0} {1} {2}", b.Host, b.IP, b.Port); string header = string.Format("{0} {1} {2}", b.Host, b.IP, b.Port);
TaskManager.WriteParameter("Add Binding", b.Host); TaskManager.WriteParameter("Add Binding", header);
} }
// update bindings // update bindings
if (updateWebSite)
web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray()); 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;
foreach (ServerBinding b in bindings)
{
//add new domain record
domain.DomainName = b.Host;
int domainID = ServerController.AddDomain(domain); int domainID = ServerController.AddDomain(domain);
DomainInfo domainTmp = ServerController.GetDomain(domainID); DomainInfo domainTmp = ServerController.GetDomain(domainID);
if (domainTmp != null) if (domainTmp != null)
{ {
@ -847,7 +983,7 @@ namespace WebsitePanel.EnterpriseServer
domainTmp.ZoneItemId = domain.ZoneItemId; domainTmp.ZoneItemId = domain.ZoneItemId;
ServerController.UpdateDomain(domainTmp); ServerController.UpdateDomain(domainTmp);
} }
}
return 0; return 0;
} }
@ -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,8 +1067,6 @@ namespace WebsitePanel.EnterpriseServer
} }
} }
if (updateWebSite)
{
// get existing web site bindings // get existing web site bindings
WebServer web = new WebServer(); WebServer web = new WebServer();
ServiceProviderProxy.Init(web, siteItem.ServiceId); ServiceProviderProxy.Init(web, siteItem.ServiceId);
@ -935,7 +1082,7 @@ namespace WebsitePanel.EnterpriseServer
{ {
// remove host headers // remove host headers
List<ServerBinding> domainBindings = new List<ServerBinding>(); List<ServerBinding> domainBindings = new List<ServerBinding>();
FillWebServerBindings(domainBindings, dnsRecords, "", domain.DomainName, ""); FillWebServerBindings(domainBindings, dnsRecords, "", domain.DomainName, "", ignoreGlobalDNSRecords);
// fill to remove list // fill to remove list
List<string> headersToRemove = new List<string>(); List<string> headersToRemove = new List<string>();
@ -946,9 +1093,9 @@ namespace WebsitePanel.EnterpriseServer
bindings.RemoveAll(b => { return headersToRemove.Contains(b.Host) && b.Port == "80"; } ); bindings.RemoveAll(b => { return headersToRemove.Contains(b.Host) && b.Port == "80"; } );
// update bindings // update bindings
if (updateWebSite)
web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray()); web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray());
} }
}
// update domain // update domain
domain.WebSiteId = 0; domain.WebSiteId = 0;

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,10 +3380,13 @@ namespace WebsitePanel.Providers.HostedSolution
DirectoryEntry dlDEEntry = GetADObject(AddADPrefix(id)); DirectoryEntry dlDEEntry = GetADObject(AddADPrefix(id));
dlDEEntry.Properties["showInAddressBook"].Clear(); dlDEEntry.Properties["showInAddressBook"].Clear();
if (!HideFromAddressList)
{
foreach (string addressList in addressLists) foreach (string addressList in addressLists)
{ {
dlDEEntry.Properties["showInAddressBook"].Add(addressList); 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>
@ -459,4 +459,31 @@ To connect to web site management service please use username and password provi
<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,15 +176,22 @@ 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;
if (string.IsNullOrEmpty(args.Value))
args.IsValid = true;
else
args.IsValid = System.Net.IPAddress.TryParse(ip, out ipaddr) && (ip.Contains(":") || ip.Contains(".")) && 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 == "A" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) ||
(ddlRecordType.SelectedValue == "AAAA" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)); (ddlRecordType.SelectedValue == "AAAA" && ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6));
*/
args.IsValid = true;
} }
private void SaveRecord() private void SaveRecord()
{ {
if (!string.IsNullOrEmpty(txtRecordData.Text))
if (!Page.IsValid) return; if (!Page.IsValid) return;
GlobalDnsRecord record = new GlobalDnsRecord(); GlobalDnsRecord record = new GlobalDnsRecord();

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>
</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> <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> </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;
// bind unassigned IP addresses
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)) if (!String.IsNullOrEmpty(site.SiteIPAddress))
litIPAddress.Text = String.Format("({0})", 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,6 +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" />
</appSettings> </appSettings>
<system.web.extensions> <system.web.extensions>
<scripting> <scripting>
@ -56,6 +57,9 @@
<add verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/> <add verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>
<add verb="GET,HEAD,POST" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" /> <add verb="GET,HEAD,POST" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" />
</httpHandlers> </httpHandlers>
<httpModules>
<add name="SecureSession" type="WebsitePanel.WebPortal.SecureSessionModule" />
</httpModules>
<!-- Authentication --> <!-- Authentication -->
<authentication mode="Forms"> <authentication mode="Forms">
<forms name=".WEBSITEPANELPORTALAUTHASPX" protection="All" timeout="30" path="/" requireSSL="false" slidingExpiration="true" cookieless="UseDeviceProfile" domain="" enableCrossAppRedirects="false"> <forms name=".WEBSITEPANELPORTALAUTHASPX" protection="All" timeout="30" path="/" requireSSL="false" slidingExpiration="true" cookieless="UseDeviceProfile" domain="" enableCrossAppRedirects="false">

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