diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebAppGallery/DeploymentParameter.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebAppGallery/DeploymentParameter.cs
index 5306c53d..53949106 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebAppGallery/DeploymentParameter.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebAppGallery/DeploymentParameter.cs
@@ -101,6 +101,8 @@ namespace WebsitePanel.Providers.WebAppGallery
public DeploymentParameterValidationKind ValidationKind { get; set; }
public string ValidationString { get; set; }
public DeploymentParameterWellKnownTag WellKnownTags { get; set; }
+ public string ValuePrefix { get; set; }
+ public string ValueSuffix { get; set; }
#endregion
#if DEBUG
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParamControl.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParamControl.ascx
index 0314b1b6..4fd2dd72 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParamControl.ascx
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParamControl.ascx
@@ -42,7 +42,9 @@
<%-- Text value --%>
+
+
protected global::System.Web.UI.HtmlControls.HtmlGenericControl TextControl;
+ ///
+ /// valPrefix control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Literal valPrefix;
+
///
/// textValue control.
///
@@ -129,6 +138,15 @@ namespace WebsitePanel.Portal {
///
protected global::System.Web.UI.WebControls.TextBox textValue;
+ ///
+ /// valSuffix control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Literal valSuffix;
+
///
/// requireTextValue control.
///
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParams.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParams.ascx.cs
index a2570958..b45f78b4 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParams.ascx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebApplicationGalleryParams.ascx.cs
@@ -28,7 +28,8 @@
using System;
using System.Collections.Generic;
-using System.IO;
+using System.Globalization;
+using System.IO;
using System.Web.UI.WebControls;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.Common;
@@ -52,8 +53,9 @@ namespace WebsitePanel.Portal
DeploymentParameterWellKnownTag.FlatFile;
private GalleryApplicationResult appResult;
+ private UserInfo _policyUser;
- protected void Page_Load(object sender, EventArgs e)
+ protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
return;
@@ -148,10 +150,12 @@ namespace WebsitePanel.Portal
AddDatabaseEngine(DeploymentParameterWellKnownTag.Sql, ResourceGroups.MsSql2005, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MsSql2005));
if (cntx.Groups.ContainsKey(ResourceGroups.MsSql2000))
AddDatabaseEngine(DeploymentParameterWellKnownTag.Sql, ResourceGroups.MsSql2000, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MsSql2000));
+
+ SetDBPolicies(UserSettings.MSSQL_POLICY, parameters);
}
// MySQL Server
- if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.MySql) != null)
+ else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.MySql) != null)
{
// load package context
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
@@ -161,19 +165,22 @@ namespace WebsitePanel.Portal
AddDatabaseEngine(DeploymentParameterWellKnownTag.MySql, ResourceGroups.MySql5, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MySql5));
if (cntx.Groups.ContainsKey(ResourceGroups.MySql4))
AddDatabaseEngine(DeploymentParameterWellKnownTag.MySql, ResourceGroups.MySql4, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MySql4));
+
+ SetDBPolicies(UserSettings.MYSQL_POLICY, parameters);
}
// SQLite
- if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.SqLite) != null)
+ else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.SqLite) != null)
AddDatabaseEngine(DeploymentParameterWellKnownTag.SqLite, "", GetLocalizedString("DatabaseEngine.SQLite"));
+ // Flat File
+ else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.FlatFile) != null)
+ AddDatabaseEngine(DeploymentParameterWellKnownTag.FlatFile, "", GetLocalizedString("DatabaseEngine.FlatFile"));
+
// VistaFB
- if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.VistaDB) != null)
+ else if (FindParameterByTag(parameters, DeploymentParameterWellKnownTag.VistaDB) != null)
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
divDatabase.Visible = (databaseEngines.Items.Count > 0);
@@ -182,6 +189,112 @@ namespace WebsitePanel.Portal
BindParameters(parameters);
}
+ #region prefix & suffix for database name & username
+ private void SetDBPolicies(string policy, IEnumerable 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)
{
databaseEngines.Items.Add(new ListItem(text, String.Format("{0},{1}", engine, group)));