Web app gallery: database & username prefix & suffix processing added form databases policies

This commit is contained in:
ruslanht 2012-08-21 11:36:45 +03:00
parent b25684b667
commit 928f63b805
5 changed files with 172 additions and 9 deletions

View file

@ -101,6 +101,8 @@ namespace WebsitePanel.Providers.WebAppGallery
public DeploymentParameterValidationKind ValidationKind { get; set; } public DeploymentParameterValidationKind ValidationKind { get; set; }
public string ValidationString { get; set; } public string ValidationString { get; set; }
public DeploymentParameterWellKnownTag WellKnownTags { get; set; } public DeploymentParameterWellKnownTag WellKnownTags { get; set; }
public string ValuePrefix { get; set; }
public string ValueSuffix { get; set; }
#endregion #endregion
#if DEBUG #if DEBUG

View file

@ -42,7 +42,9 @@
<%-- Text value --%> <%-- Text value --%>
<div id="TextControl" runat="server" class="FormField"> <div id="TextControl" runat="server" class="FormField">
<asp:Literal ID="valPrefix" runat="server" Text=""></asp:Literal>
<asp:TextBox ID="textValue" runat="server" Width="600px"></asp:TextBox> <asp:TextBox ID="textValue" runat="server" Width="600px"></asp:TextBox>
<asp:Literal ID="valSuffix" runat="server" Text=""></asp:Literal>
<div> <div>
<asp:RequiredFieldValidator ID="requireTextValue" runat="server" <asp:RequiredFieldValidator ID="requireTextValue" runat="server"
ControlToValidate="textValue" ValidationGroup="wag" ControlToValidate="textValue" ValidationGroup="wag"

View file

@ -58,6 +58,18 @@ namespace WebsitePanel.Portal
private set { ViewState["DefaultValue"] = value; } private set { ViewState["DefaultValue"] = value; }
} }
public string ValuePrefix
{
get { return ViewState["ValuePrefix"] != null ? (string)ViewState["ValuePrefix"] : null; }
private set { ViewState["ValuePrefix"] = value; }
}
public string ValueSuffix
{
get { return ViewState["ValueSuffix"] != null ? (string)ViewState["ValueSuffix"] : null; }
private set { ViewState["ValueSuffix"] = value; }
}
public DeploymentParameterWellKnownTag WellKnownTags public DeploymentParameterWellKnownTag WellKnownTags
{ {
get { return this.wellKnownTags; } get { return this.wellKnownTags; }
@ -96,11 +108,25 @@ namespace WebsitePanel.Portal
this.wellKnownTags = param.WellKnownTags; this.wellKnownTags = param.WellKnownTags;
this.validationKind = param.ValidationKind; this.validationKind = param.ValidationKind;
this.validationString = param.ValidationString; this.validationString = param.ValidationString;
this.ValuePrefix = param.ValuePrefix;
this.ValueSuffix = param.ValueSuffix;
// toggle controls // toggle controls
BindControls(); BindControls();
} }
public void SetTextValuePrefixSuffix(string prefix, string suffix)
{
if (!string.IsNullOrEmpty(prefix))
{
valPrefix.Text = prefix;
}
if (!string.IsNullOrEmpty(suffix))
{
valSuffix.Text = suffix;
}
}
public DeploymentParameter GetParameter() public DeploymentParameter GetParameter()
{ {
DeploymentParameter parameter = new DeploymentParameter(); DeploymentParameter parameter = new DeploymentParameter();
@ -120,7 +146,7 @@ namespace WebsitePanel.Portal
if (PasswordControl.Visible) if (PasswordControl.Visible)
return password.Text; return password.Text;
else if (TextControl.Visible) else if (TextControl.Visible)
return textValue.Text.Trim(); return valPrefix.Text + textValue.Text.Trim() + valSuffix.Text;
else if (BooleanControl.Visible) else if (BooleanControl.Visible)
return boolValue.Checked.ToString(); return boolValue.Checked.ToString();
else if (EnumControl.Visible) else if (EnumControl.Visible)
@ -185,6 +211,8 @@ namespace WebsitePanel.Portal
// Text value // Text value
TextControl.Visible = true; TextControl.Visible = true;
textValue.Text = DefaultValue; textValue.Text = DefaultValue;
valPrefix.Text = ValuePrefix;
valSuffix.Text = ValueSuffix;
} }

View file

@ -120,6 +120,15 @@ namespace WebsitePanel.Portal {
/// </remarks> /// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl TextControl; protected global::System.Web.UI.HtmlControls.HtmlGenericControl TextControl;
/// <summary>
/// valPrefix 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.Literal valPrefix;
/// <summary> /// <summary>
/// textValue control. /// textValue control.
/// </summary> /// </summary>
@ -129,6 +138,15 @@ namespace WebsitePanel.Portal {
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox textValue; protected global::System.Web.UI.WebControls.TextBox textValue;
/// <summary>
/// valSuffix 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.Literal valSuffix;
/// <summary> /// <summary>
/// requireTextValue control. /// requireTextValue control.
/// </summary> /// </summary>

View file

@ -28,7 +28,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.Globalization;
using System.IO;
using System.Web.UI.WebControls; using System.Web.UI.WebControls;
using WebsitePanel.EnterpriseServer; using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.Common; using WebsitePanel.Providers.Common;
@ -52,8 +53,9 @@ namespace WebsitePanel.Portal
DeploymentParameterWellKnownTag.FlatFile; DeploymentParameterWellKnownTag.FlatFile;
private GalleryApplicationResult appResult; private GalleryApplicationResult appResult;
private UserInfo _policyUser;
protected void Page_Load(object sender, EventArgs e) protected void Page_Load(object sender, EventArgs e)
{ {
if (IsPostBack) if (IsPostBack)
return; return;
@ -148,10 +150,12 @@ namespace WebsitePanel.Portal
AddDatabaseEngine(DeploymentParameterWellKnownTag.Sql, ResourceGroups.MsSql2005, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MsSql2005)); AddDatabaseEngine(DeploymentParameterWellKnownTag.Sql, ResourceGroups.MsSql2005, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MsSql2005));
if (cntx.Groups.ContainsKey(ResourceGroups.MsSql2000)) if (cntx.Groups.ContainsKey(ResourceGroups.MsSql2000))
AddDatabaseEngine(DeploymentParameterWellKnownTag.Sql, ResourceGroups.MsSql2000, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MsSql2000)); AddDatabaseEngine(DeploymentParameterWellKnownTag.Sql, ResourceGroups.MsSql2000, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MsSql2000));
SetDBPolicies(UserSettings.MSSQL_POLICY, parameters);
} }
// MySQL Server // MySQL Server
if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.MySql) != null) else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.MySql) != null)
{ {
// load package context // load package context
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
@ -161,19 +165,22 @@ namespace WebsitePanel.Portal
AddDatabaseEngine(DeploymentParameterWellKnownTag.MySql, ResourceGroups.MySql5, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MySql5)); AddDatabaseEngine(DeploymentParameterWellKnownTag.MySql, ResourceGroups.MySql5, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MySql5));
if (cntx.Groups.ContainsKey(ResourceGroups.MySql4)) if (cntx.Groups.ContainsKey(ResourceGroups.MySql4))
AddDatabaseEngine(DeploymentParameterWellKnownTag.MySql, ResourceGroups.MySql4, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MySql4)); AddDatabaseEngine(DeploymentParameterWellKnownTag.MySql, ResourceGroups.MySql4, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MySql4));
SetDBPolicies(UserSettings.MYSQL_POLICY, parameters);
} }
// SQLite // SQLite
if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.SqLite) != null) else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.SqLite) != null)
AddDatabaseEngine(DeploymentParameterWellKnownTag.SqLite, "", GetLocalizedString("DatabaseEngine.SQLite")); AddDatabaseEngine(DeploymentParameterWellKnownTag.SqLite, "", GetLocalizedString("DatabaseEngine.SQLite"));
// Flat File
else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.FlatFile) != null)
AddDatabaseEngine(DeploymentParameterWellKnownTag.FlatFile, "", GetLocalizedString("DatabaseEngine.FlatFile"));
// VistaFB // VistaFB
if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.VistaDB) != null) else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.VistaDB) != null)
AddDatabaseEngine(DeploymentParameterWellKnownTag.VistaDB, "", GetLocalizedString("DatabaseEngine.VistaDB")); AddDatabaseEngine(DeploymentParameterWellKnownTag.VistaDB, "", GetLocalizedString("DatabaseEngine.VistaDB"));
// Flat File
if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.FlatFile) != null)
AddDatabaseEngine(DeploymentParameterWellKnownTag.FlatFile, "", GetLocalizedString("DatabaseEngine.FlatFile"));
// hide module if no database required // hide module if no database required
divDatabase.Visible = (databaseEngines.Items.Count > 0); divDatabase.Visible = (databaseEngines.Items.Count > 0);
@ -182,6 +189,112 @@ namespace WebsitePanel.Portal
BindParameters(parameters); BindParameters(parameters);
} }
#region prefix & suffix for database name & username
private void SetDBPolicies(string policy, IEnumerable<DeploymentParameter> parameters)
{
foreach (DeploymentParameter parameter in parameters)
{
if ((parameter.WellKnownTags & DeploymentParameterWellKnownTag.DBName) != 0)
{
// database name
string policyValue = GetPackagePolicy(policy, "DatabaseNamePolicy");
ApplyPrefixSuffixPolicy(parameter, policyValue);
}
if ((parameter.WellKnownTags & DeploymentParameterWellKnownTag.DBUserName) != 0)
{
// user name
string policyValue = GetPackagePolicy(policy, "UserNamePolicy");
ApplyPrefixSuffixPolicy(parameter, policyValue);
}
}
}
private bool ApplyPrefixSuffixPolicy(DeploymentParameter parameter, string policyValue)
{
if (null != policyValue)
{
string prefix, suffix;
ParsePolicyPrefixSuffix(policyValue, out prefix, out suffix);
if (!string.IsNullOrEmpty(prefix))
parameter.ValuePrefix = prefix;
if (!string.IsNullOrEmpty(suffix))
parameter.ValueSuffix = suffix;
return true;
}
return false;
}
private void ParsePolicyPrefixSuffix(string policyValue, out string prefix, out string suffix)
{
prefix = string.Empty;
suffix = string.Empty;
// parse and enforce policy
if (string.IsNullOrEmpty(policyValue)) return;
try
{
// parse settings
string[] parts = policyValue.Split(';');
bool enabled = Utils.ParseBool(parts[0], false);
prefix = parts[4];
suffix = parts[5];
// apply policy
if (enabled)
{
// prefix
if (!String.IsNullOrEmpty(prefix))
{
// substitute vars
prefix = Utils.ReplaceStringVariable(prefix, "user_id", _policyUser.UserId.ToString(CultureInfo.InvariantCulture));
prefix = Utils.ReplaceStringVariable(prefix, "user_name", _policyUser.Username);
}
// suffix
if (!String.IsNullOrEmpty(suffix))
{
// substitute vars
suffix = Utils.ReplaceStringVariable(suffix, "user_id", _policyUser.UserId.ToString(CultureInfo.InvariantCulture));
suffix = Utils.ReplaceStringVariable(suffix, "user_name", _policyUser.Username);
}
}
}
catch
{
/* skip */
}
}
private string GetPackagePolicy(string settingsName, string key)
{
// load package
PackageInfo package = PackagesHelper.GetCachedPackage(PanelSecurity.PackageId);
if (package != null)
{
// load user profile
int userId = package.UserId;
_policyUser = UsersHelper.GetCachedUser(package.UserId);
if (_policyUser != null)
{
// load settings
UserSettings settings = UsersHelper.GetCachedUserSettings(userId, settingsName);
if (settings != null)
{
string policyValue = settings[key];
if (policyValue != null)
return policyValue;
}
}
}
return null;
}
#endregion
private void AddDatabaseEngine(DeploymentParameterWellKnownTag engine, string group, string text) private void AddDatabaseEngine(DeploymentParameterWellKnownTag engine, string group, string text)
{ {
databaseEngines.Items.Add(new ListItem(text, String.Format("{0},{1}", engine, group))); databaseEngines.Items.Add(new ListItem(text, String.Format("{0},{1}", engine, group)));