diff --git a/WebsitePanel.WHMCSModule/includes/hooks/websitepanel_addons.php b/WebsitePanel.WHMCSModule/includes/hooks/websitepanel_addons.php index 25de3672..4666d0e4 100644 --- a/WebsitePanel.WHMCSModule/includes/hooks/websitepanel_addons.php +++ b/WebsitePanel.WHMCSModule/includes/hooks/websitepanel_addons.php @@ -54,6 +54,11 @@ function websitepanel_addons_AddonActivation($params) // Retrieve the WebsitePanel Addons module settings $modSettings = websitepanel_addons_GetSettings(); + if (empty($modSettings['username']) || empty($modSettings['password'])) || empty($modSettings['serverhost'])) || empty($modSettings['serverport']))) + { + // The module is disabled or has not yet been configured - stop + return; + } // Get the associated WebsitePanel username from WHMCS $results = select_query('tblhosting', 'username', array('id' => $params['serviceid'])); diff --git a/WebsitePanel.WHMCSModule/includes/hooks/websitepanel_sync.php b/WebsitePanel.WHMCSModule/includes/hooks/websitepanel_sync.php index 12ff3ad0..1487b98e 100644 --- a/WebsitePanel.WHMCSModule/includes/hooks/websitepanel_sync.php +++ b/WebsitePanel.WHMCSModule/includes/hooks/websitepanel_sync.php @@ -53,6 +53,11 @@ function websitepanel_sync_ClientEdit($params) // Retrieve the WebsitePanel Addons module settings $modSettings = websitepanel_sync_GetSettings(); + if (empty($modSettings['username']) || empty($modSettings['password'])) || empty($modSettings['serverhost'])) || empty($modSettings['serverport']))) + { + // The module is disabled or has not yet been configured - stop + return; + } // Create the WebsitePanel object instance $wsp = new WebsitePanel($modSettings['username'], $modSettings['password'], $modSettings['serverhost'], $modSettings['serverport'], (($modSettings['serversecured']) == 'on' ? TRUE : FALSE)); @@ -74,9 +79,9 @@ function websitepanel_sync_ClientEdit($params) // We cannot use the details provided by the get_users_paged_recursive method as it does not return all the required elements to fully update the user $currentRoot = $rootPath->Table1->$i; $userDetails = (array)$wsp->get_user_by_username($currentRoot->Username); - + // Update the current user - $wsp->update_user_details($userDetails['RoleId'], (($userDetails['RoleId'] == 2) ? 'Reseller' : 'User'), $userDetails['StatusId'], $userDetails['Status'], $userDetails['LoginStatusId'], $userDetails['LoginStatus'], $userDetails['FailedLogins'], $userDetails['UserId'], $userDetails['OwnerId'], $userDetails['Created'], $userDetails['Changed'], $userDetails['IsDemo'], $userDetails['IsPeer'], $currentRoot->Comments, $params['lastname'], $userDetails['Username'], $userDetails['Password'], $params['firstname'], $params['email'], $params['phonenumber'], $params['postcode'], '', '', '', '', $params['country'], $params['address1'] . (!empty($params['address2']) ? " {$params['address2']}" : ''), $params['city'], $params['state'], TRUE, $params['companyname'], (($userDetails['RoleId'] == 2) ? TRUE : FALSE)); + $wsp->update_user_details($userDetails['RoleId'], (($userDetails['RoleId'] == 2) ? 'Reseller' : 'User'), $userDetails['StatusId'], $userDetails['Status'], $userDetails['LoginStatusId'], $userDetails['LoginStatus'], $userDetails['FailedLogins'], $userDetails['UserId'], $userDetails['OwnerId'], $userDetails['Created'], $userDetails['Changed'], $userDetails['IsDemo'], $userDetails['IsPeer'], $currentRoot->Comments, $userDetails['Username'], $userDetails['Password'], $params['firstname'], $params['lastname'], $params['email'], $params['phonenumber'], $params['postcode'], '', '', '', '', $params['country'], $params['address1'] . (!empty($params['address2']) ? " {$params['address2']}" : ''), $params['city'], $params['state'], TRUE, $params['companyname'], (($userDetails['RoleId'] == 2) ? TRUE : FALSE)); // Add log entry to client log logactivity("WebsitePanel Sync - Account {$currentRoot->Username} contact details updated successfully", $params['userid']); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs index dfd90b61..f65d5497 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs @@ -164,6 +164,10 @@ namespace WebsitePanel.EnterpriseServer { private System.Threading.SendOrPostCallback DisableHeliconApeOperationCompleted; + private System.Threading.SendOrPostCallback EnableHeliconApeGloballyOperationCompleted; + + private System.Threading.SendOrPostCallback DisableHeliconApeGloballyOperationCompleted; + private System.Threading.SendOrPostCallback GetHeliconApeFoldersOperationCompleted; private System.Threading.SendOrPostCallback GetHeliconApeHttpdFolderOperationCompleted; @@ -384,6 +388,12 @@ namespace WebsitePanel.EnterpriseServer { /// public event DisableHeliconApeCompletedEventHandler DisableHeliconApeCompleted; + /// + public event EnableHeliconApeGloballyCompletedEventHandler EnableHeliconApeGloballyCompleted; + + /// + public event DisableHeliconApeGloballyCompletedEventHandler DisableHeliconApeGloballyCompleted; + /// public event GetHeliconApeFoldersCompletedEventHandler GetHeliconApeFoldersCompleted; @@ -2705,6 +2715,88 @@ namespace WebsitePanel.EnterpriseServer { } } + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/EnableHeliconApeGlobally", 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 EnableHeliconApeGlobally(int serviceId) { + object[] results = this.Invoke("EnableHeliconApeGlobally", new object[] { + serviceId}); + return ((int)(results[0])); + } + + /// + public System.IAsyncResult BeginEnableHeliconApeGlobally(int serviceId, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("EnableHeliconApeGlobally", new object[] { + serviceId}, callback, asyncState); + } + + /// + public int EndEnableHeliconApeGlobally(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((int)(results[0])); + } + + /// + public void EnableHeliconApeGloballyAsync(int serviceId) { + this.EnableHeliconApeGloballyAsync(serviceId, null); + } + + /// + public void EnableHeliconApeGloballyAsync(int serviceId, object userState) { + if ((this.EnableHeliconApeGloballyOperationCompleted == null)) { + this.EnableHeliconApeGloballyOperationCompleted = new System.Threading.SendOrPostCallback(this.OnEnableHeliconApeGloballyOperationCompleted); + } + this.InvokeAsync("EnableHeliconApeGlobally", new object[] { + serviceId}, this.EnableHeliconApeGloballyOperationCompleted, userState); + } + + private void OnEnableHeliconApeGloballyOperationCompleted(object arg) { + if ((this.EnableHeliconApeGloballyCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.EnableHeliconApeGloballyCompleted(this, new EnableHeliconApeGloballyCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/DisableHeliconApeGlobally", 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 DisableHeliconApeGlobally(int serviceId) { + object[] results = this.Invoke("DisableHeliconApeGlobally", new object[] { + serviceId}); + return ((int)(results[0])); + } + + /// + public System.IAsyncResult BeginDisableHeliconApeGlobally(int serviceId, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("DisableHeliconApeGlobally", new object[] { + serviceId}, callback, asyncState); + } + + /// + public int EndDisableHeliconApeGlobally(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((int)(results[0])); + } + + /// + public void DisableHeliconApeGloballyAsync(int serviceId) { + this.DisableHeliconApeGloballyAsync(serviceId, null); + } + + /// + public void DisableHeliconApeGloballyAsync(int serviceId, object userState) { + if ((this.DisableHeliconApeGloballyOperationCompleted == null)) { + this.DisableHeliconApeGloballyOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDisableHeliconApeGloballyOperationCompleted); + } + this.InvokeAsync("DisableHeliconApeGlobally", new object[] { + serviceId}, this.DisableHeliconApeGloballyOperationCompleted, userState); + } + + private void OnDisableHeliconApeGloballyOperationCompleted(object arg) { + if ((this.DisableHeliconApeGloballyCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.DisableHeliconApeGloballyCompleted(this, new DisableHeliconApeGloballyCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetHeliconApeFolders", 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 HtaccessFolder[] GetHeliconApeFolders(int siteItemId) { @@ -5332,6 +5424,58 @@ namespace WebsitePanel.EnterpriseServer { } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + public delegate void EnableHeliconApeGloballyCompletedEventHandler(object sender, EnableHeliconApeGloballyCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class EnableHeliconApeGloballyCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal EnableHeliconApeGloballyCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public int Result { + get { + this.RaiseExceptionIfNecessary(); + return ((int)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + public delegate void DisableHeliconApeGloballyCompletedEventHandler(object sender, DisableHeliconApeGloballyCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class DisableHeliconApeGloballyCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal DisableHeliconApeGloballyCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public int Result { + get { + this.RaiseExceptionIfNecessary(); + return ((int)(this.results[0])); + } + } + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetHeliconApeFoldersCompletedEventHandler(object sender, GetHeliconApeFoldersCompletedEventArgs e); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index 1590849d..a0b96690 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -2869,7 +2869,6 @@ namespace WebsitePanel.EnterpriseServer #endregion - #region Helicon Ape public static int EnableHeliconApe(int siteItemId) { @@ -2939,7 +2938,48 @@ namespace WebsitePanel.EnterpriseServer } } - /// + /// + /// Enables Helicon Ape on the server globally. Requires Administrator role to execute. + /// + /// + /// + public static int EnableHeliconApeGlobally(int ServiceId) + { + int accountCheck = SecurityContext.CheckAccount(DemandAccount.IsAdmin | DemandAccount.IsActive | DemandAccount.NotDemo); + if (accountCheck < 0) + { + return accountCheck; + } + + WebServer web = GetWebServer(ServiceId); + web.EnableHeliconApe(""); + + return 0; + } + + + /// + /// Disables Helicon Ape on the server globally. Requires Administrator role to execute. + /// + /// + /// + public static int DisableHeliconApeGlobally(int ServiceId) + { + int accountCheck = SecurityContext.CheckAccount(DemandAccount.IsAdmin | DemandAccount.IsActive | DemandAccount.NotDemo); + // + if (accountCheck < 0) + { + return accountCheck; + } + + WebServer web = GetWebServer(ServiceId); + web.DisableHeliconApe(""); + + return 0; + } + + + /// /// Retrieves Helicon Ape extension status from the server. Requires Administrator role to execute. /// /// diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs index 00dc32d0..3c1a6034 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs @@ -378,6 +378,18 @@ namespace WebsitePanel.EnterpriseServer return WebServerController.DisableHeliconApe(siteItemId); } + [WebMethod] + public int EnableHeliconApeGlobally(int serviceId) + { + return WebServerController.EnableHeliconApeGlobally(serviceId); + } + + [WebMethod] + public int DisableHeliconApeGlobally(int serviceId) + { + return WebServerController.DisableHeliconApeGlobally(serviceId); + } + [WebMethod] public HtaccessFolder[] GetHeliconApeFolders(int siteItemId) { diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/HtaccessFolder.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/HtaccessFolder.cs index 220da27b..05f17c7f 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/HtaccessFolder.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/HtaccessFolder.cs @@ -51,7 +51,7 @@ namespace WebsitePanel.Providers.Web #endregion #region parsing regexps - protected static readonly Regex RE_AUTH_NAME = new Regex(@"^\s*AuthName\s+(.+)\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled); + protected static readonly Regex RE_AUTH_NAME = new Regex("^\\s*AuthName\\s+\"?([^\"]+)\"?\\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled); protected static readonly Regex RE_AUTH_TYPE = new Regex(@"^\s*AuthType\s+(basic|digest)\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled); protected static readonly Regex RE_REQUIRE = new Regex(@"^\s*Require\s+(.+)\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled); protected static readonly Regex RE_AUTH_PROVIDER = new Regex(@"^\s*Auth(Basic|Digest)Provider\s+(file)\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/WebSite.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/WebSite.cs index f55588ea..30ba4d9f 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/WebSite.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/WebSite.cs @@ -30,6 +30,7 @@ using System; using System.ComponentModel; using System.Collections.Generic; using System.Collections.Specialized; +using WebsitePanel.Providers.ResultObjects; namespace WebsitePanel.Providers.Web { @@ -61,6 +62,7 @@ namespace WebsitePanel.Providers.Web private bool securedFoldersInstalled; private bool heliconApeInstalled; private bool heliconApeEnabled; + private HeliconApeStatus heliconApeStatus; public WebSite() { @@ -179,6 +181,12 @@ namespace WebsitePanel.Providers.Web get { return this.heliconApeEnabled; } set { this.heliconApeEnabled = value; } } + + public HeliconApeStatus HeliconApeStatus + { + get { return this.heliconApeStatus; } + set { this.heliconApeStatus = value; } + } } [Flags] diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Database.MySQL/MySqlServer.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Database.MySQL/MySqlServer.cs index d7aca68c..9dbb49b9 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Database.MySQL/MySqlServer.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Database.MySQL/MySqlServer.cs @@ -39,7 +39,7 @@ using WebsitePanel.Server.Utils; using WebsitePanel.Providers.Utils; using WebsitePanel.Providers; using System.Reflection; - +using System.Data.Common; namespace WebsitePanel.Providers.Database { @@ -129,49 +129,36 @@ namespace WebsitePanel.Providers.Database static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { - // + + + // if (!args.Name.Contains("MySql.Data")) return null; + + if (args.Name.Contains("MySql.Data.resources")) + return null; + // string connectorKeyName = "SOFTWARE\\MySQL AB\\MySQL Connector/Net"; - string connectorLocation = String.Empty; string connectorVersion = String.Empty; // if (PInvoke.RegistryHive.HKLM.SubKeyExists_x86(connectorKeyName)) { - connectorLocation = PInvoke.RegistryHive.HKLM.GetSubKeyValue_x86(connectorKeyName, "Location"); connectorVersion = PInvoke.RegistryHive.HKLM.GetSubKeyValue_x86(connectorKeyName, "Version"); } - // - if (String.IsNullOrEmpty(connectorLocation)) - { - Log.WriteInfo("Connector location is either null or empty"); - return null; - } - - string assemblyFile = args.Name.Split(',')[0] + ".dll"; - // 1st location - string assemblyPath = Path.Combine(connectorLocation, @"Binaries\.NET 2.0\" + assemblyFile); - if (!File.Exists(assemblyPath)) + + + string assemblyFullName = string.Format("MySql.Data, Version={0}.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d", connectorVersion); + + if (assemblyFullName == args.Name) { - // 2nd location - assemblyPath = Path.Combine(connectorLocation, @"Assemblies\" + assemblyFile); - - if (!File.Exists(assemblyPath)) - { - // 3rd location - assemblyPath = Path.Combine(connectorLocation, @"Assemblies\v2.0" + assemblyFile); - - if (!File.Exists(assemblyPath)) - { - Log.WriteInfo("Connector assembly could not be found or does not exist"); - return null; // sorry, cannot find - } - } + return null; //avoid of stack overflow } - return Assembly.LoadFrom(assemblyPath); + + return Assembly.Load(assemblyFullName); + } #endregion @@ -185,8 +172,14 @@ namespace WebsitePanel.Providers.Database public virtual bool CheckConnectivity(string databaseName, string username, string password) { - MySqlConnection conn = new MySqlConnection(String.Format("server={0};port={1};database={2};uid={3};password={4}", - ServerName, ServerPort, databaseName, username, password)); + MySqlConnection conn = new MySqlConnection( + String.Format("server={0};port={1};database={2};uid={3};password={4}", + ServerName, + ServerPort, + databaseName, + username, + password) + ); try { conn.Open(); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Database.MySQL/MySqlServer55.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Database.MySQL/MySqlServer55.cs index 8b0e740f..173441dd 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Database.MySQL/MySqlServer55.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Database.MySQL/MySqlServer55.cs @@ -32,7 +32,7 @@ using System.Text; using System.Text.RegularExpressions; using System.Data; using Microsoft.Win32; -using MySql.Data.MySqlClient; +//using MySql.Data.MySqlClient; using System.IO; using WebsitePanel.Server.Utils; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs index 7aed795b..a6a5d76b 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs @@ -101,7 +101,11 @@ namespace WebsitePanel.Providers.Web public const string DOTNETPANEL_IISMODULES = "DotNetPanel.IIsModules"; - public const string HeliconApeModule = "Helicon Ape"; + public const string HeliconApeModulePrevName = "Helicon Ape"; + // true module name + public const string HeliconApeModule = "Helicon.Ape"; + // true handler name + public const string HeliconApeHandler = "Helicon.Ape Handler"; public const string HeliconApeHandlerPath = "*.apehandler"; public const string IsapiModule = "IsapiModule"; @@ -1165,6 +1169,7 @@ namespace WebsitePanel.Providers.Web HeliconApeStatus heliconApeStatus = GetHeliconApeStatus(srvman, siteId); site.HeliconApeInstalled = heliconApeStatus.IsInstalled; site.HeliconApeEnabled = heliconApeStatus.IsEnabled; + site.HeliconApeStatus = heliconApeStatus; // site.SiteState = GetSiteState(srvman, siteId); @@ -1860,6 +1865,9 @@ namespace WebsitePanel.Providers.Web #endregion + + + #region Helicon Ape public override HeliconApeStatus GetHeliconApeStatus(string siteId) @@ -1894,7 +1902,11 @@ namespace WebsitePanel.Providers.Web foreach (var moduleEntry in modulesCollection) { - if (String.Equals(moduleEntry["name"].ToString(), Constants.HeliconApeModule, StringComparison.InvariantCultureIgnoreCase)) + if ( + String.Equals(moduleEntry["name"].ToString(), Constants.HeliconApeModule, StringComparison.InvariantCultureIgnoreCase) + || + String.Equals(moduleEntry["name"].ToString(), Constants.HeliconApeModulePrevName, StringComparison.InvariantCultureIgnoreCase) + ) return true; } // @@ -1986,7 +1998,13 @@ namespace WebsitePanel.Providers.Web private string GetHeliconApeInstallDir(string siteId) { //Check global registration - return Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Helicon\\Ape", "InstallDir", string.Empty) as string; + string installDir = Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Helicon\\Ape", "InstallDir", string.Empty) as string; + if (string.Empty == installDir) + { + installDir = Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Helicon\\Ape", "InstallDir", string.Empty) as string; + } + + return installDir; } private bool IsHeliconApeInstalled(ServerManager srvman, string siteId, string installDir) @@ -2013,7 +2031,26 @@ namespace WebsitePanel.Providers.Web if (string.IsNullOrEmpty(installDir)) return HELICON_APE_NOT_REGISTERED; - return System.Diagnostics.FileVersionInfo.GetVersionInfo(Path.Combine(installDir, "Helicon.Ape.Editor.dll")).FileVersion; + string apeModulePath = Path.Combine(installDir, "bin\\Helicon.Ape.dll"); + if (File.Exists(apeModulePath)) + { + return System.Diagnostics.FileVersionInfo.GetVersionInfo(apeModulePath).FileVersion; + } + + apeModulePath = Path.Combine(installDir, "ManualInstall\\bin\\Helicon.Ape.dll"); + if (File.Exists(apeModulePath)) + { + return System.Diagnostics.FileVersionInfo.GetVersionInfo(apeModulePath).FileVersion; + } + + apeModulePath = Path.Combine(installDir, "Helicon.Ape.dll"); + if (File.Exists(apeModulePath)) + { + return System.Diagnostics.FileVersionInfo.GetVersionInfo(apeModulePath).FileVersion; + } + + + return HELICON_APE_NOT_REGISTERED; } private string GetHeliconApeModuleType(string siteId) @@ -2147,120 +2184,150 @@ namespace WebsitePanel.Providers.Web return registrationInfo.StartsWith("Registered to:"); } + /// + /// Enables Helicon Ape module & handler on the web site or server globally. + /// + /// + /// Web site id or empty string ("") for server-wide enabling + /// public override void EnableHeliconApe(string siteId) { - WebSite webSite = null; - using (ServerManager srvman = webObjectsSvc.GetServerManager()) + if (null == siteId) { - // - if (String.IsNullOrEmpty(siteId)) - throw new ArgumentNullException("siteId"); - - // Helicon.Ape.ApeModule works for apps working in Integrated Pipeline mode - // Switch automatically to the app pool with Integrated Pipeline enabled - webSite = webObjectsSvc.GetWebSiteFromIIS(srvman, siteId); - // - if (webSite == null) - throw new ApplicationException(String.Format("Could not find a web site with the following identifier: {0}.", siteId)); - - // Fill ASP.NET settings - FillAspNetSettingsFromIISObject(srvman, webSite); + throw new ArgumentNullException("siteId"); } - // - var aphl = new WebAppPoolHelper(ProviderSettings); - var currentPool = aphl.match_webapp_pool(webSite); - var dotNetVersion = aphl.dotNetVersion(currentPool.Mode); - var sisMode = aphl.isolation(currentPool.Mode); - // AT least ASP.NET 2.0 is allowed to provide such capabilities... - if (dotNetVersion == SiteAppPoolMode.dotNetFramework1) - dotNetVersion = SiteAppPoolMode.dotNetFramework2; - // and Integrated pipeline... - if (aphl.pipeline(currentPool.Mode) != SiteAppPoolMode.Integrated) + if ("" != siteId) { - // Lookup for the opposite pool matching the criteria - var oppositePool = Array.Find(aphl.SupportedAppPools.ToArray(), - x => aphl.dotNetVersion(x.Mode) == dotNetVersion && aphl.isolation(x.Mode) == sisMode - && aphl.pipeline(x.Mode) == SiteAppPoolMode.Integrated); - // - webSite.AspNetInstalled = oppositePool.AspNetInstalled; - // - SetWebSiteApplicationPool(webSite, false); + // prepare enabling Ape for web site + + WebSite webSite = null; + using (ServerManager srvman = webObjectsSvc.GetServerManager()) + { + // Helicon.Ape.ApeModule works for apps working in Integrated Pipeline mode + // Switch automatically to the app pool with Integrated Pipeline enabled + webSite = webObjectsSvc.GetWebSiteFromIIS(srvman, siteId); + if (webSite == null) + throw new ApplicationException( + String.Format("Could not find a web site with the following identifier: {0}.", siteId)); + + // Fill ASP.NET settings + FillAspNetSettingsFromIISObject(srvman, webSite); + } + // + var aphl = new WebAppPoolHelper(ProviderSettings); + var currentPool = aphl.match_webapp_pool(webSite); + var dotNetVersion = aphl.dotNetVersion(currentPool.Mode); + var sisMode = aphl.isolation(currentPool.Mode); + // AT least ASP.NET 2.0 is allowed to provide such capabilities... + if (dotNetVersion == SiteAppPoolMode.dotNetFramework1) + dotNetVersion = SiteAppPoolMode.dotNetFramework2; + // and Integrated pipeline... + if (aphl.pipeline(currentPool.Mode) != SiteAppPoolMode.Integrated) + { + // Lookup for the opposite pool matching the criteria + var oppositePool = Array.Find(aphl.SupportedAppPools.ToArray(), + x => + aphl.dotNetVersion(x.Mode) == dotNetVersion && + aphl.isolation(x.Mode) == sisMode + && aphl.pipeline(x.Mode) == SiteAppPoolMode.Integrated); + // + webSite.AspNetInstalled = oppositePool.AspNetInstalled; + // + SetWebSiteApplicationPool(webSite, false); + // + using (var srvman = webObjectsSvc.GetServerManager()) + { + var iisSiteObject = srvman.Sites[siteId]; + iisSiteObject.Applications["/"].ApplicationPoolName = webSite.ApplicationPool; + // + srvman.CommitChanges(); + } + } + + #region Disable automatically Integrated Windows Authentication + using (var srvman = webObjectsSvc.GetServerManager()) { - var iisSiteObject = srvman.Sites[siteId]; - iisSiteObject.Applications["/"].ApplicationPoolName = webSite.ApplicationPool; + PropertyBag winAuthBag = winAuthSvc.GetAuthenticationSettings(srvman, siteId); // - srvman.CommitChanges(); - } - } + if ((bool) winAuthBag[AuthenticationGlobals.Enabled]) + { + Configuration config = srvman.GetApplicationHostConfiguration(); - #region Disable automatically Integrated Windows Authentication - using (var srvman = webObjectsSvc.GetServerManager()) - { - PropertyBag winAuthBag = winAuthSvc.GetAuthenticationSettings(srvman, siteId); - // - if ((bool)winAuthBag[AuthenticationGlobals.Enabled]) + ConfigurationSection windowsAuthenticationSection = config.GetSection( + "system.webServer/security/authentication/windowsAuthentication", + siteId); + // + windowsAuthenticationSection["enabled"] = false; + // + srvman.CommitChanges(); + } + } + + #endregion + + #region Disable automatically Secured Folders + + if (IsSecuredFoldersInstalled(siteId)) { - Configuration config = srvman.GetApplicationHostConfiguration(); - - ConfigurationSection windowsAuthenticationSection = config.GetSection( - "system.webServer/security/authentication/windowsAuthentication", - siteId); - // - windowsAuthenticationSection["enabled"] = false; - // - srvman.CommitChanges(); + UninstallSecuredFolders(siteId); } + + #endregion } - #endregion - #region Disable automatically Secured Folders - if (IsSecuredFoldersInstalled(siteId)) - { - UninstallSecuredFolders(siteId); - } - #endregion - - - // using (var srvman = webObjectsSvc.GetServerManager()) { - // Configuration appConfig = srvman.GetApplicationHostConfiguration(); // add Helicon.Ape module ConfigurationSection modulesSection = appConfig.GetSection(Constants.ModulesSection, siteId); ConfigurationElementCollection modulesCollection = modulesSection.GetCollection(); - ConfigurationElement moduleAdd = modulesCollection.CreateElement("add"); - moduleAdd["name"] = Constants.HeliconApeModule; - moduleAdd["type"] = GetHeliconApeModuleType(siteId); - // - modulesCollection.Add(moduleAdd); + // + ConfigurationElement heliconApeModuleEntry = modulesCollection.CreateElement("add"); + heliconApeModuleEntry["name"] = Constants.HeliconApeModule; + heliconApeModuleEntry["type"] = GetHeliconApeModuleType(siteId); + + // this way make and copy all modules list from ancestor + //modulesCollection.AddAt(0, heliconApeModuleEntry); + // this way just insert single ape module entry + modulesCollection.Add(heliconApeModuleEntry); + + + + // add Helicon.Ape handler ConfigurationSection handlersSection = appConfig.GetSection(Constants.HandlersSection, siteId); ConfigurationElementCollection handlersCollection = handlersSection.GetCollection(); - ConfigurationElement handlerAdd = handlersCollection.CreateElement("add"); - handlerAdd["name"] = Constants.HeliconApeModule; - handlerAdd["type"] = GetHeliconApeHandlerType(siteId); - handlerAdd["path"] = Constants.HeliconApeHandlerPath; - handlerAdd["verb"] = "*"; - handlerAdd["resourceType"] = "Unspecified"; - // - handlersCollection.Add(handlerAdd); - // + + // + ConfigurationElement heliconApeHandlerEntry = handlersCollection.CreateElement("add"); + heliconApeHandlerEntry["name"] = Constants.HeliconApeHandler; + heliconApeHandlerEntry["type"] = GetHeliconApeHandlerType(siteId); + heliconApeHandlerEntry["path"] = Constants.HeliconApeHandlerPath; + heliconApeHandlerEntry["verb"] = "*"; + heliconApeHandlerEntry["resourceType"] = "Unspecified"; + + handlersCollection.AddAt(0, heliconApeHandlerEntry); + srvman.CommitChanges(); } } + /// + /// Disables Helicon Ape module & handler on the web site or server globally. + /// + /// + /// Web site id or empty string ("") for server-wide disabling + /// public override void DisableHeliconApe(string siteId) { - // - if (String.IsNullOrEmpty(siteId)) + if (null == siteId) throw new ArgumentNullException("siteId"); - // + using (var srvman = webObjectsSvc.GetServerManager()) { // @@ -2269,40 +2336,48 @@ namespace WebsitePanel.Providers.Web // remove Helicon.Ape module ConfigurationSection modulesSection = appConfig.GetSection(Constants.ModulesSection, siteId); ConfigurationElementCollection modulesCollection = modulesSection.GetCollection(); - ConfigurationElement htaccessModuleEntry = null; + List heliconApeModuleEntriesList = new List(); foreach (ConfigurationElement moduleEntry in modulesCollection) { - if (String.Equals(moduleEntry["name"].ToString(), Constants.HeliconApeModule, StringComparison.InvariantCultureIgnoreCase)) + if ( + String.Equals(moduleEntry["name"].ToString(), Constants.HeliconApeModule, StringComparison.InvariantCultureIgnoreCase) + || + String.Equals(moduleEntry["name"].ToString(), Constants.HeliconApeModulePrevName, StringComparison.InvariantCultureIgnoreCase) + ) { - htaccessModuleEntry = moduleEntry; - break; + heliconApeModuleEntriesList.Add(moduleEntry); } } - if (htaccessModuleEntry != null) + foreach (ConfigurationElement heliconApeElement in heliconApeModuleEntriesList) { - modulesCollection.Remove(htaccessModuleEntry); + modulesCollection.Remove(heliconApeElement); } // remove Helicon.Ape handler ConfigurationSection handlersSection = appConfig.GetSection(Constants.HandlersSection, siteId); ConfigurationElementCollection handlersCollection = handlersSection.GetCollection(); - ConfigurationElement htaccessHandlerEntry = null; + List heliconApeHandlerEntriesList = new List(); foreach (ConfigurationElement handlerEntry in handlersCollection) { - if (String.Equals(handlerEntry["name"].ToString(), Constants.HeliconApeModule, StringComparison.InvariantCultureIgnoreCase)) + if ( + String.Equals(handlerEntry["name"].ToString(), Constants.HeliconApeModule, StringComparison.InvariantCultureIgnoreCase) + || + String.Equals(handlerEntry["name"].ToString(), Constants.HeliconApeModulePrevName, StringComparison.InvariantCultureIgnoreCase) + || + String.Equals(handlerEntry["name"].ToString(), Constants.HeliconApeHandler, StringComparison.InvariantCultureIgnoreCase) + ) { - htaccessHandlerEntry = handlerEntry; - break; + heliconApeHandlerEntriesList.Add(handlerEntry); } } // - if (htaccessHandlerEntry != null) + foreach (ConfigurationElement heliconApeHandlerEntry in heliconApeHandlerEntriesList) { - handlersCollection.Remove(htaccessHandlerEntry); + handlersCollection.Remove(heliconApeHandlerEntry); } // commit changes to metabase - if (htaccessModuleEntry != null || htaccessHandlerEntry != null) + if (heliconApeModuleEntriesList.Count > 0 || heliconApeHandlerEntriesList.Count > 0) { srvman.CommitChanges(); } diff --git a/WebsitePanel/Sources/WebsitePanel.Server/Code/WPIHelper.cs b/WebsitePanel/Sources/WebsitePanel.Server/Code/WPIHelper.cs index a1d56b26..09ec94c2 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/Code/WPIHelper.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/Code/WPIHelper.cs @@ -219,6 +219,12 @@ namespace WebsitePanel.Server.Code continue; } + if (product.GetAttributeValue("searchExclude") != null) + { + // skip it, this is internal not visible product + continue; + } + if (string.IsNullOrEmpty(filter)) { products.Add(product); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomain.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomain.ascx.resx index 49b87726..2389512c 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomain.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomain.ascx.resx @@ -163,10 +163,10 @@ Provisioning Options - Point to existing Mail Domain + Assign to existing Mail Domain - Point to existing Web Site + Assign to existing Web Site Please, enter correct sub-domain name, for example "subdomain" or "sub.subdomain". diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomainSelectType.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomainSelectType.ascx.resx index 0a0fbe79..007137a7 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomainSelectType.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomainSelectType.ascx.resx @@ -121,13 +121,13 @@ Cancel - Create a Top-Level Domain (TLD). + Create a Top-Level Domain (TLD). You can create a new web site for domain or assign it to an existing web site. Domain - Create a Top-Level Domain (TLD) or sub-domain that could point to the existing web site only. + Create a Top-Level Domain (TLD) or sub-domain that can point to the existing web site only. Domain Alias @@ -136,13 +136,13 @@ Please choose what type of domain you would like to add: - Create a sub-domain under domains allowed by your hosting provider. You could create a new web site for sub-domain or point it to existing one. + Create a sub-domain under domains allowed by your hosting provider. You can create a new web site for sub-domain or assign it to an existing web site. Provider Sub-domain - Create a sub-domain for already added top-level domain. You could create a new web site for sub-domain. + Create a sub-domain for already added top-level domain. You can create a new web site for sub-domain or assign it to an existing web site. Sub-domain diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/ServersEditServer.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/ServersEditServer.ascx.resx index 06a13f06..45082191 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/ServersEditServer.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/ServersEditServer.ascx.resx @@ -252,4 +252,7 @@ * + + Web Platform Installer + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesHeliconApeControl.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesHeliconApeControl.ascx.resx index 7f5f0f01..7372c79d 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesHeliconApeControl.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesHeliconApeControl.ascx.resx @@ -132,6 +132,9 @@ Enable Helicon Ape + + Enable Helicon Ape (45 days trial) + Click "Add Folder" button to add .htaccess folder diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx index b84c69b0..2f5a009f 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx @@ -47,7 +47,7 @@ -
@@ -55,7 +55,7 @@ -
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs index 9fe39c8f..f9761a23 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs @@ -99,14 +99,14 @@ namespace WebsitePanel.Portal // load package context PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); - if ((type == DomainType.DomainPointer || (type == DomainType.Domain && !cntx.Quotas[Quotas.OS_DOMAINPOINTERS].QuotaExhausted)) && !IsPostBack) + if ((type == DomainType.DomainPointer || (type == DomainType.Domain)) && !IsPostBack) { // bind web sites WebSitesList.DataSource = ES.Services.WebServers.GetWebSites(PanelSecurity.PackageId, false); WebSitesList.DataBind(); } - if ((type == DomainType.DomainPointer || (type == DomainType.Domain && !cntx.Quotas[Quotas.OS_DOMAINPOINTERS].QuotaExhausted)) && !IsPostBack) + if ((type == DomainType.DomainPointer || (type == DomainType.Domain)) && !IsPostBack) { // bind mail domains MailDomainsList.DataSource = ES.Services.MailServers.GetMailDomains(PanelSecurity.PackageId, false); @@ -130,12 +130,12 @@ namespace WebsitePanel.Portal } // point Web site - PointWebSitePanel.Visible = (type == DomainType.DomainPointer || (type == DomainType.Domain && !cntx.Quotas[Quotas.OS_DOMAINPOINTERS].QuotaExhausted)) + PointWebSitePanel.Visible = (type == DomainType.DomainPointer || (type == DomainType.Domain)) && cntx.Groups.ContainsKey(ResourceGroups.Web) && WebSitesList.Items.Count > 0; WebSitesList.Enabled = PointWebSite.Checked; // point mail domain - PointMailDomainPanel.Visible = (type == DomainType.DomainPointer || (type == DomainType.Domain && !cntx.Quotas[Quotas.OS_DOMAINPOINTERS].QuotaExhausted)) + PointMailDomainPanel.Visible = (type == DomainType.DomainPointer || (type == DomainType.Domain)) && cntx.Groups.ContainsKey(ResourceGroups.Mail) && MailDomainsList.Items.Count > 0; MailDomainsList.Enabled = PointMailDomain.Checked; @@ -205,14 +205,14 @@ namespace WebsitePanel.Portal // load package context PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); - if (type == DomainType.DomainPointer || (type == DomainType.Domain && !cntx.Quotas[Quotas.OS_DOMAINPOINTERS].QuotaExhausted)) + if (type == DomainType.DomainPointer || (type == DomainType.Domain)) { if (PointWebSite.Checked && WebSitesList.Items.Count > 0) pointWebSiteId = Utils.ParseInt(WebSitesList.SelectedValue, 0); } - if (type == DomainType.DomainPointer || (type == DomainType.Domain && !cntx.Quotas[Quotas.OS_DOMAINPOINTERS].QuotaExhausted)) + if (type == DomainType.DomainPointer || (type == DomainType.Domain)) { if (PointMailDomain.Checked && MailDomainsList.Items.Count > 0) pointMailDomainId = Utils.ParseInt(MailDomainsList.SelectedValue, 0); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.designer.cs index da29aa39..835fabf2 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.designer.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Login.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Login.ascx.cs index 9d55c534..8fae6190 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Login.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Login.ascx.cs @@ -151,6 +151,9 @@ namespace WebsitePanel.Portal ddlTheme.Visible = false; lblTheme.Visible = false; } + + // set focus on username field + txtUsername.Focus(); } protected void cmdForgotPassword_Click(object sender, EventArgs e) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/App_LocalResources/IIS70_Settings.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/App_LocalResources/IIS70_Settings.ascx.resx index 7e0ca9e5..8c517294 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/App_LocalResources/IIS70_Settings.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/App_LocalResources/IIS70_Settings.ascx.resx @@ -202,7 +202,11 @@ .htaccess - Helicon Ape product provides .htaccess and .htpasswd files support on IIS 7+ and includes all major Apache modules. Note that Helicon Ape is not yet installed on the server. <br/><br/>Please <a href="http://www.helicontech.com/ape/doc/wsp_install.htm" target="_blank">download and install</a> Helicon Ape to activate this feature. + Helicon Ape provides .htaccess and .htpasswd files support and includes all major Apache modules. + This is essential tool to fine-tune IIS web sites, improve performance, security, + search engines rankings and for compatibility with many open source applications. + <br/> + Click on the link below to install Helicon Ape on the server: Module Assembly: @@ -252,4 +256,7 @@ Web Sites Public Shared Address: + + Register Helicon Ape module globally: + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx index b96c38f1..f6ad5853 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx @@ -427,6 +427,8 @@ +

+ @@ -458,9 +460,18 @@ + Text="Edit httpd.conf (server config)" onclick="EditHeliconApeConfButton_Click" /> + + + + Register Helicon Ape module globally: + + + + (Uncheck this box to enable managing Helicon Ape using hosting plan policies.) + + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.cs index 3f455aae..c414927e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.cs @@ -150,17 +150,36 @@ namespace WebsitePanel.Portal.ProviderControls txtSecureFoldersModuleAsm.Text = settings["SecureFoldersModuleAssembly"]; //Helicon Ape - WebsitePanel.Providers.ResultObjects.HeliconApeStatus sts = ES.Services.WebServers.GetHeliconApeStatus(int.Parse(Request.QueryString["ServiceID"])); + Providers.ResultObjects.HeliconApeStatus sts = ES.Services.WebServers.GetHeliconApeStatus(int.Parse(Request.QueryString["ServiceID"])); if (sts.IsInstalled) { downloadApePanel.Visible = false; txtHeliconApeVersion.Text = sts.Version; lblHeliconRegistrationText.Text = sts.RegistrationInfo; + + if (sts.IsEnabled) + { + chkHeliconApeGlobalRegistration.Checked = true; + } + ViewState["HeliconApeInitiallyEnabled"] = chkHeliconApeGlobalRegistration.Checked; } else { configureApePanel.Visible = false; + + // Build url manually, EditUrl throws exception: module is Null + // pid=Servers&mid=137&ctl=edit_platforminstaller&ServerID=1&Product=HeliconApe + + List qsParts= new List(); + + qsParts.Add("pid=Servers"); + qsParts.Add("ctl=edit_platforminstaller"); + qsParts.Add("mid=" + Request.QueryString["mid"]); + qsParts.Add("ServerID=" + Request.QueryString["ServerID"]); + qsParts.Add("WPIProduct=HeliconApe"); + + InstallHeliconApeLink.Attributes["href"] = "Default.aspx?" + String.Join("&", qsParts.ToArray()); } // @@ -254,6 +273,19 @@ namespace WebsitePanel.Portal.ProviderControls ActiveDirectoryIntegration.SaveSettings(settings); + // Helicon Ape + bool registerHeliconApeGlobbally = chkHeliconApeGlobalRegistration.Checked; + if (registerHeliconApeGlobbally != (bool)ViewState["HeliconApeInitiallyEnabled"]) + { + if (registerHeliconApeGlobbally) + { + ES.Services.WebServers.EnableHeliconApeGlobally(int.Parse(Request.QueryString["ServiceID"])); + } + else + { + ES.Services.WebServers.DisableHeliconApeGlobally(int.Parse(Request.QueryString["ServiceID"])); + } + } @@ -279,6 +311,7 @@ namespace WebsitePanel.Portal.ProviderControls settings["GalleryAppsAlwaysIgnoreDependencies"] = chkGalleryAppsAlwaysIgnoreDependencies.Checked.ToString(); } + /* protected void DownladAndIstallApeLinkButton_Click(object sender, EventArgs e) { ES.Services.WebServers.InstallHeliconApe(PanelRequest.ServiceId); @@ -286,6 +319,7 @@ namespace WebsitePanel.Portal.ProviderControls //Redirect to avoid 2-nd call Response.Redirect(this.Context.Request.Url.AbsoluteUri); } + */ public string GetHttpdEditControlUrl(string ctrlKey, string name) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.designer.cs index a61aab10..0b38c608 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/IIS70_Settings.ascx.designer.cs @@ -669,6 +669,15 @@ namespace WebsitePanel.Portal.ProviderControls { /// protected global::System.Web.UI.WebControls.Localize Localize1; + /// + /// InstallHeliconApeLink control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.LinkButton InstallHeliconApeLink; + /// /// configureApePanel control. /// @@ -732,6 +741,15 @@ namespace WebsitePanel.Portal.ProviderControls { /// protected global::System.Web.UI.WebControls.Button EditHeliconApeConfButton; + /// + /// chkHeliconApeGlobalRegistration control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CheckBox chkHeliconApeGlobalRegistration; + /// /// secOther control. /// diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs index 8dc2f27c..3987a1b5 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ServersEditWebPlatformInstaller.ascx.cs @@ -108,6 +108,16 @@ namespace WebsitePanel.Portal ShowProgressPanel(); } + string gotoProduct = Request.QueryString["WPIProduct"]; + if (!string.IsNullOrEmpty(gotoProduct)) + { + ArrayList wpiProductsForInstall = GetProductsToInstallList(); + wpiProductsForInstall.Add(gotoProduct); + SetProductsToInstallList(wpiProductsForInstall); + + btnInstall_Click(sender, e); + } + } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesHeliconApeControl.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesHeliconApeControl.ascx.cs index 9477c381..d56ffa5f 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesHeliconApeControl.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesHeliconApeControl.ascx.cs @@ -38,23 +38,12 @@ using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using WebsitePanel.Providers.Web; +using WebsitePanel.Providers.ResultObjects; namespace WebsitePanel.Portal { public partial class WebSitesHeliconApeControl : WebsitePanelControlBase { - private bool IsHeliconApeInstalled - { - get { return ViewState["IsHeliconApeInstalled"] != null ? (bool)ViewState["IsHeliconApeInstalled"] : false; } - set { ViewState["IsHeliconApeInstalled"] = value; } - } - - private bool IsHeliconApeEnabled - { - get { return ViewState["IsHeliconApeEnabled"] != null ? (bool)ViewState["IsHeliconApeEnabled"] : false; } - set { ViewState["IsHeliconApeEnabled"] = value; } - - } private bool IsSecuredFoldersInstalled { @@ -62,9 +51,16 @@ namespace WebsitePanel.Portal set { ViewState["IsSecuredFoldersInstalled"] = value; } } + private HeliconApeStatus HeliconApeStatus + { + get { return (HeliconApeStatus)ViewState["HeliconApeStatus"]; } + set { ViewState["HeliconApeStatus"] = value; } + + } + protected void Page_Load(object sender, EventArgs e) { - if (IsHeliconApeInstalled) + if (HeliconApeStatus.IsInstalled) { if (!IsPostBack) { @@ -90,12 +86,12 @@ namespace WebsitePanel.Portal public void BindHeliconApe(WebSite site) { // save initial state - IsHeliconApeInstalled = site.HeliconApeInstalled; - IsHeliconApeEnabled = site.HeliconApeEnabled; - IsSecuredFoldersInstalled = site.SecuredFoldersInstalled; - + this.IsSecuredFoldersInstalled = site.SecuredFoldersInstalled; + this.HeliconApeStatus = site.HeliconApeStatus; + + // Render a warning message about the automatic site's settings change - if (!IsHeliconApeEnabled && site.IIs7) + if (!HeliconApeStatus.IsEnabled && site.IIs7) { // Ensure the message is displayed only when neccessary if (site.EnableWindowsAuthentication || !site.AspNetInstalled.EndsWith("I") || site.SecuredFoldersInstalled) @@ -113,11 +109,21 @@ namespace WebsitePanel.Portal private void ToggleControls() { - if (IsHeliconApeInstalled) + if (HeliconApeStatus.IsInstalled) { + bool IsHeliconApeEnabled = HeliconApeStatus.IsEnabled; + // toggle button - btnToggleHeliconApe.Text = GetLocalizedString( - IsHeliconApeEnabled ? "DisableHeliconApe.Text" : "EnableHeliconApe.Text"); + if (IsHeliconApeEnabled) + { + btnToggleHeliconApe.Text = GetLocalizedString("DisableHeliconApe.Text"); + } + else + { + btnToggleHeliconApe.Text = GetLocalizedString("EnableHeliconApe.Text"); + } + + // toggle panels HeliconApeFoldersPanel.Visible = IsHeliconApeEnabled; @@ -165,7 +171,7 @@ namespace WebsitePanel.Portal try { int result = 0; - if (IsHeliconApeEnabled) + if (HeliconApeStatus.IsEnabled) { // uninstall folders result = ES.Services.WebServers.DisableHeliconApe(PanelRequest.ItemID); @@ -189,7 +195,10 @@ namespace WebsitePanel.Portal } // change state - IsHeliconApeEnabled = !IsHeliconApeEnabled; + HeliconApeStatus status = HeliconApeStatus; + status.IsEnabled = !status.IsEnabled; + + HeliconApeStatus = status; // bind items ToggleControls();