Merge
This commit is contained in:
commit
16ec7fc2b6
11 changed files with 254 additions and 46 deletions
|
@ -979,6 +979,8 @@ namespace WebsitePanel.EnterpriseServer
|
|||
new SqlParameter("@ClusterId", clusterId),
|
||||
new SqlParameter("@comments", comments));
|
||||
|
||||
UpdateServerPackageServices(serverId);
|
||||
|
||||
return Convert.ToInt32(prmServiceId.Value);
|
||||
}
|
||||
|
||||
|
@ -1559,6 +1561,8 @@ namespace WebsitePanel.EnterpriseServer
|
|||
// read identity
|
||||
packageId = Convert.ToInt32(prmPackageId.Value);
|
||||
|
||||
DistributePackageServices(actorId, packageId);
|
||||
|
||||
return ds;
|
||||
}
|
||||
|
||||
|
@ -1660,6 +1664,33 @@ namespace WebsitePanel.EnterpriseServer
|
|||
new SqlParameter("@PackageAddonID", packageAddonId));
|
||||
}
|
||||
|
||||
public static void UpdateServerPackageServices(int serverId)
|
||||
{
|
||||
// FIXME
|
||||
int defaultActorID = 1;
|
||||
|
||||
// get server packages
|
||||
IDataReader packagesReader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text,
|
||||
@"SELECT PackageID FROM Packages WHERE ServerID = @ServerID",
|
||||
new SqlParameter("@ServerID", serverId)
|
||||
);
|
||||
|
||||
// call DistributePackageServices for all packages on this server
|
||||
while (packagesReader.Read())
|
||||
{
|
||||
int packageId = (int) packagesReader["PackageID"];
|
||||
DistributePackageServices(defaultActorID, packageId);
|
||||
}
|
||||
}
|
||||
|
||||
public static void DistributePackageServices(int actorId, int packageId)
|
||||
{
|
||||
SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
|
||||
ObjectQualifier + "DistributePackageServices",
|
||||
new SqlParameter("@ActorId", actorId),
|
||||
new SqlParameter("@PackageID", packageId));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Packages Settings
|
||||
|
@ -3932,15 +3963,16 @@ namespace WebsitePanel.EnterpriseServer
|
|||
return packageId;
|
||||
}
|
||||
|
||||
public static int GetServiceIdByProviderForServer(int providerId, int serverId)
|
||||
public static int GetServiceIdByProviderForServer(int providerId, int packageId)
|
||||
{
|
||||
IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text,
|
||||
@"SELECT TOP 1
|
||||
ServiceID
|
||||
FROM Services
|
||||
WHERE ProviderID = @ProviderID AND ServerID = @ServerID",
|
||||
PackageServices.ServiceID
|
||||
FROM PackageServices
|
||||
LEFT JOIN Services ON Services.ServiceID = PackageServices.ServiceID
|
||||
WHERE PackageServices.PackageID = @PackageID AND Services.ProviderID = @ProviderID",
|
||||
new SqlParameter("@ProviderID", providerId),
|
||||
new SqlParameter("@ServerID", serverId));
|
||||
new SqlParameter("@PackageID", packageId));
|
||||
|
||||
if (reader.Read())
|
||||
{
|
||||
|
@ -4049,6 +4081,26 @@ namespace WebsitePanel.EnterpriseServer
|
|||
return reader;
|
||||
}
|
||||
|
||||
public static int GetServiceIdForProviderIdAndPackageId(int providerId, int packageId)
|
||||
{
|
||||
IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text,
|
||||
@"SELECT PackageServices.ServiceID
|
||||
FROM PackageServices
|
||||
INNER JOIN Services ON PackageServices.ServiceID = Services.ServiceID
|
||||
WHERE Services.ProviderID = @ProviderID and PackageID = @PackageID",
|
||||
new SqlParameter("@ProviderID", providerId),
|
||||
new SqlParameter("@PackageID", packageId)
|
||||
);
|
||||
|
||||
if (reader.Read())
|
||||
{
|
||||
return (int)reader["ServiceID"];
|
||||
}
|
||||
|
||||
return -1;
|
||||
|
||||
}
|
||||
|
||||
public static int GetServerIdForPackage(int packageId)
|
||||
{
|
||||
IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text,
|
||||
|
|
|
@ -76,6 +76,31 @@ namespace WebsitePanel.EnterpriseServer
|
|||
|
||||
public static ShortHeliconZooEngine[] GetAllowedHeliconZooQuotasForPackage(int packageId)
|
||||
{
|
||||
// first, check IsEnginesAllowed for this server
|
||||
|
||||
// get helicon zoo provider serviceId
|
||||
int heliconZooProviderId, heliconZooGroupId;
|
||||
DataProvider.GetHeliconZooProviderAndGroup("HeliconZoo", out heliconZooProviderId, out heliconZooGroupId);
|
||||
|
||||
// get helicon zoo service id for heliconZooProviderId and packageId
|
||||
int serviceId = DataProvider.GetServiceIdForProviderIdAndPackageId(heliconZooProviderId, packageId);
|
||||
|
||||
if (serviceId > 0)
|
||||
{
|
||||
if (IsEnginesEnabled(serviceId))
|
||||
{
|
||||
// all engines allowed by default
|
||||
return new ShortHeliconZooEngine[]
|
||||
{
|
||||
new ShortHeliconZooEngine{Name = "*", DisplayName = "*", Enabled = true}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// all engines is not allowed
|
||||
// get allowed engines from hosting plan quotas
|
||||
|
||||
List<ShortHeliconZooEngine> allowedEngines = new List<ShortHeliconZooEngine>();
|
||||
|
||||
IDataReader reader = DataProvider.GetEnabledHeliconZooQuotasForPackage(packageId);
|
||||
|
@ -236,7 +261,7 @@ namespace WebsitePanel.EnterpriseServer
|
|||
}
|
||||
|
||||
// get Helicon Zoo service for site
|
||||
int serviceId = DataProvider.GetServiceIdByProviderForServer(heliconZooProviderId, serverId);
|
||||
int serviceId = DataProvider.GetServiceIdByProviderForServer(heliconZooProviderId, packageId);
|
||||
return serviceId;
|
||||
}
|
||||
|
||||
|
|
|
@ -229,6 +229,8 @@ namespace WebsitePanel.EnterpriseServer
|
|||
if (result.ExceedingQuotas.Tables[0].Rows.Count > 0)
|
||||
result.Result = BusinessErrorCodes.ERROR_PACKAGE_QUOTA_EXCEED;
|
||||
|
||||
DataProvider.DistributePackageServices(SecurityContext.User.UserId, plan.PackageId);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -781,6 +783,8 @@ namespace WebsitePanel.EnterpriseServer
|
|||
|
||||
// Update the Hard quota on home folder in case it was enabled and in case there was a change in disk space
|
||||
UpdatePackageHardQuota(package.PackageId);
|
||||
|
||||
DataProvider.DistributePackageServices(SecurityContext.User.UserId, package.PackageId);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
|
@ -34,8 +34,25 @@ using System.ComponentModel;
|
|||
|
||||
namespace WebsitePanel.Providers.Web
|
||||
{
|
||||
public enum HttpErrorsMode
|
||||
{
|
||||
DetailedLocalOnly = 0,
|
||||
Custom = 1,
|
||||
Detailed = 2
|
||||
}
|
||||
|
||||
public enum HttpErrorsExistingResponse
|
||||
{
|
||||
Auto = 0,
|
||||
Replace = 1,
|
||||
PassThrough = 2
|
||||
}
|
||||
|
||||
public class HttpError
|
||||
{
|
||||
public const HttpErrorsMode DefaultHttpErrorsMode = HttpErrorsMode.DetailedLocalOnly;
|
||||
public const HttpErrorsExistingResponse DefaultHttpErrorsExistingResponse = HttpErrorsExistingResponse.Auto;
|
||||
|
||||
private string errorCode;
|
||||
private string errorSubcode;
|
||||
private string handlerType;
|
||||
|
|
|
@ -61,6 +61,8 @@ namespace WebsitePanel.Providers.Web
|
|||
private string defaultDocs;
|
||||
private string httpRedirect;
|
||||
private HttpError[] httpErrors;
|
||||
private HttpErrorsMode errorMode;
|
||||
private HttpErrorsExistingResponse existingResponse;
|
||||
private MimeMap[] mimeMaps;
|
||||
private HttpHeader[] httpHeaders;
|
||||
private bool aspInstalled;
|
||||
|
@ -122,6 +124,18 @@ namespace WebsitePanel.Providers.Web
|
|||
set { httpErrors = value; }
|
||||
}
|
||||
|
||||
public HttpErrorsMode ErrorMode
|
||||
{
|
||||
get { return errorMode; }
|
||||
set { errorMode = value; }
|
||||
}
|
||||
|
||||
public HttpErrorsExistingResponse ExistingResponse
|
||||
{
|
||||
get { return existingResponse; }
|
||||
set { existingResponse = value; }
|
||||
}
|
||||
|
||||
public string ApplicationPool
|
||||
{
|
||||
get { return this.applicationPool; }
|
||||
|
|
|
@ -54,6 +54,9 @@ namespace WebsitePanel.Providers.Web.Iis.WebObjects
|
|||
var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
|
||||
//
|
||||
var httpErrorsSection = config.GetSection(Constants.HttpErrorsSection);
|
||||
|
||||
virtualDir.ErrorMode = (HttpErrorsMode)httpErrorsSection.GetAttributeValue("errorMode");
|
||||
virtualDir.ExistingResponse = (HttpErrorsExistingResponse)httpErrorsSection.GetAttributeValue("existingResponse");
|
||||
//
|
||||
var errorsCollection = httpErrorsSection.GetCollection();
|
||||
//
|
||||
|
@ -87,10 +90,6 @@ namespace WebsitePanel.Providers.Web.Iis.WebObjects
|
|||
}
|
||||
#endregion
|
||||
|
||||
// Http errors list is either empty or not set so defaults to the parent
|
||||
if (virtualDir.HttpErrors == null || virtualDir.HttpErrors.Length == 0)
|
||||
return;
|
||||
|
||||
#region Put the change in effect
|
||||
using (var srvman = GetServerManager())
|
||||
{
|
||||
|
@ -98,10 +97,20 @@ namespace WebsitePanel.Providers.Web.Iis.WebObjects
|
|||
//
|
||||
var section = config.GetSection(Constants.HttpErrorsSection);
|
||||
|
||||
// enable custom errors
|
||||
section.SetAttributeValue("errorMode", "Custom");
|
||||
// set error mode
|
||||
section.SetAttributeValue("errorMode", virtualDir.ErrorMode);
|
||||
if (virtualDir.ErrorMode == HttpErrorsMode.Detailed)
|
||||
{
|
||||
section.SetAttributeValue("existingResponse", HttpErrorsExistingResponse.PassThrough);
|
||||
}
|
||||
else
|
||||
{
|
||||
section.SetAttributeValue("existingResponse", HttpErrorsExistingResponse.Auto);
|
||||
}
|
||||
|
||||
//
|
||||
// save custom errors
|
||||
if (virtualDir.HttpErrors != null && virtualDir.HttpErrors.Length > 0)
|
||||
{
|
||||
var errorsCollection = section.GetCollection();
|
||||
//
|
||||
foreach (var item in virtualDir.HttpErrors)
|
||||
|
@ -124,6 +133,8 @@ namespace WebsitePanel.Providers.Web.Iis.WebObjects
|
|||
//
|
||||
errorsCollection.Add(item2Add);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
srvman.CommitChanges();
|
||||
}
|
||||
|
|
|
@ -156,4 +156,7 @@
|
|||
<data name="IIS7.Redirect" xml:space="preserve">
|
||||
<value>Redirect</value>
|
||||
</data>
|
||||
<data name="lblErrorMode.Text">
|
||||
<value xml:space="preserve">Error Mode</value>
|
||||
</data>
|
||||
</root>
|
|
@ -1,4 +1,19 @@
|
|||
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebSitesCustomErrorsControl.ascx.cs" Inherits="WebsitePanel.Portal.WebSitesCustomErrorsControl" %>
|
||||
|
||||
|
||||
<div style="padding: 20; margin-bottom: 10px;">
|
||||
<table cellpadding="4">
|
||||
<tr id="rowAspNet" runat="server">
|
||||
<td class="SubHead">
|
||||
<asp:Label ID="lblErrorMode" runat="server" meta:resourcekey="lblErrorMode"></asp:Label>:
|
||||
</td>
|
||||
<td class="Normal">
|
||||
<asp:DropDownList ID="ddlErrorMode" runat="server" CssClass="NormalTextBox"></asp:DropDownList>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="FormButtonsBar">
|
||||
<asp:Button id="btnAdd" runat="server" meta:resourcekey="btnAddError" Text="Add Custom Error" CssClass="Button3" OnClick="btnAdd_Click" CausesValidation="False"></asp:Button>
|
||||
</div>
|
||||
|
|
|
@ -63,16 +63,29 @@ namespace WebsitePanel.Portal
|
|||
{
|
||||
IIs7 = item.IIs7;
|
||||
|
||||
// bind data
|
||||
// bind error mode
|
||||
ddlErrorMode.Items.Add(HttpErrorsMode.DetailedLocalOnly.ToString());
|
||||
ddlErrorMode.Items.Add(HttpErrorsMode.Custom.ToString());
|
||||
ddlErrorMode.Items.Add(HttpErrorsMode.Detailed.ToString());
|
||||
|
||||
ddlErrorMode.SelectedValue = item.ErrorMode.ToString();
|
||||
|
||||
// bind errors list
|
||||
gvErrorPages.DataSource = item.HttpErrors;
|
||||
gvErrorPages.DataBind();
|
||||
}
|
||||
|
||||
public void SaveWebItem(WebVirtualDirectory item)
|
||||
{
|
||||
item.ErrorMode = GetSelectedErrorMode();
|
||||
item.HttpErrors = CollectFormData(false).ToArray();
|
||||
}
|
||||
|
||||
private HttpErrorsMode GetSelectedErrorMode()
|
||||
{
|
||||
return (HttpErrorsMode)Enum.Parse(typeof (HttpErrorsMode), ddlErrorMode.SelectedValue);
|
||||
}
|
||||
|
||||
public List<HttpError> CollectFormData(bool includeEmpty)
|
||||
{
|
||||
List<HttpError> errors = new List<HttpError>();
|
||||
|
|
|
@ -1,7 +1,34 @@
|
|||
// 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>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:2.0.50727.3074
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
|
@ -13,6 +40,33 @@ namespace WebsitePanel.Portal {
|
|||
|
||||
public partial class WebSitesCustomErrorsControl {
|
||||
|
||||
/// <summary>
|
||||
/// rowAspNet control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.HtmlControls.HtmlTableRow rowAspNet;
|
||||
|
||||
/// <summary>
|
||||
/// lblErrorMode 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 lblErrorMode;
|
||||
|
||||
/// <summary>
|
||||
/// ddlErrorMode 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 ddlErrorMode;
|
||||
|
||||
/// <summary>
|
||||
/// btnAdd control.
|
||||
/// </summary>
|
||||
|
|
|
@ -58,8 +58,6 @@ namespace WebsitePanel.Portal
|
|||
Array.Sort(allowedEngineArray, new ShortHeliconZooEngineComparer());
|
||||
|
||||
|
||||
|
||||
|
||||
// get enabled engines for this site from applicationHost.config
|
||||
string[] enabledEngineNames = ES.Services.HeliconZoo.GetEnabledEnginesForSite(site.SiteId, site.PackageId);
|
||||
ViewState["EnabledEnginesNames"] = enabledEngineNames;
|
||||
|
@ -68,10 +66,9 @@ namespace WebsitePanel.Portal
|
|||
ViewState["IsZooWebConsoleEnabled"] = enabledEngineNames.Contains("console", StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
|
||||
|
||||
|
||||
List<ShortHeliconZooEngine> allowedEngines = new List<ShortHeliconZooEngine>(allowedEngineArray);
|
||||
|
||||
// fix engine name and check is web console enabled
|
||||
foreach (ShortHeliconZooEngine engine in allowedEngines)
|
||||
{
|
||||
engine.Name = engine.Name.Replace("HeliconZoo.", "");
|
||||
|
@ -82,7 +79,6 @@ namespace WebsitePanel.Portal
|
|||
//console allowed in hosting plan
|
||||
ViewState["IsZooWebConsoleEnabled"] = engine.Enabled;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ViewState["AllowedEngines"] = allowedEngines;
|
||||
|
@ -146,7 +142,11 @@ namespace WebsitePanel.Portal
|
|||
continue; //skip
|
||||
}
|
||||
|
||||
if (string.Equals(appEngine, engine.KeywordedName, StringComparison.OrdinalIgnoreCase))
|
||||
if (
|
||||
string.Equals(appEngine, engine.KeywordedName, StringComparison.OrdinalIgnoreCase)
|
||||
||
|
||||
engine.Name == "*"
|
||||
)
|
||||
{
|
||||
|
||||
filteredApplications.Add(application);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue