From 306e3147ebb4e90636079a7b7071fed06fa90cc3 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Tue, 26 Mar 2013 10:57:01 +0300 Subject: [PATCH] Added maximum OrgId length parameter to hosted organization policies. --- .../SettingsExchangePolicy.ascx.resx | 3 + .../OrganizationCreateOrganization.ascx.cs | 74 +++++++--- .../WebsitePanel/SettingsExchangePolicy.ascx | 14 ++ .../SettingsExchangePolicy.ascx.cs | 26 ++-- .../SettingsExchangePolicy.ascx.designer.cs | 30 +++- .../OrgIdPolicyEditor.ascx.resx | 132 ++++++++++++++++++ .../UserControls/OrgIdPolicyEditor.ascx | 18 +++ .../UserControls/OrgIdPolicyEditor.ascx.cs | 69 +++++++++ .../OrgIdPolicyEditor.ascx.designer.cs | 78 +++++++++++ .../WebsitePanel.Portal.Modules.csproj | 9 ++ 10 files changed, 419 insertions(+), 34 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/App_LocalResources/OrgIdPolicyEditor.ascx.resx create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/OrgIdPolicyEditor.ascx create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/OrgIdPolicyEditor.ascx.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/OrgIdPolicyEditor.ascx.designer.cs diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SettingsExchangePolicy.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SettingsExchangePolicy.ascx.resx index 84c57ed9..2303aa66 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SettingsExchangePolicy.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SettingsExchangePolicy.ascx.resx @@ -120,4 +120,7 @@ User Password Policy + + Organization Id Policy + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationCreateOrganization.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationCreateOrganization.ascx.cs index f29b3cf0..990a5bed 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationCreateOrganization.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationCreateOrganization.ascx.cs @@ -27,8 +27,6 @@ // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using System; -using System.Data; -using System.Text; using System.Collections.Generic; using WebsitePanel.EnterpriseServer; using WebsitePanel.Providers.HostedSolution; @@ -39,18 +37,19 @@ namespace WebsitePanel.Portal.ExchangeServer { protected void Page_Load(object sender, EventArgs e) { - DomainInfo[] domains = ES.Services.Servers.GetMyDomains(PanelSecurity.PackageId); - Organization[] orgs = ES.Services.Organizations.GetOrganizations(PanelSecurity.PackageId, false); - - List list = new List(); + var list = new List(); + SetPolicy(PanelSecurity.PackageId, UserSettings.EXCHANGE_POLICY, "OrgIdPolicy"); foreach (Organization o in orgs) { OrganizationDomainName[] tmpList = ES.Services.Organizations.GetOrganizationDomains(o.Id); - foreach (OrganizationDomainName name in tmpList) list.Add(name); + foreach (OrganizationDomainName name in tmpList) + { + list.Add(name); + } } foreach (DomainInfo d in domains) @@ -65,9 +64,11 @@ namespace WebsitePanel.Portal.ExchangeServer bAdd = false; break; } - } - if (bAdd) ddlDomains.Items.Add(d.DomainName.ToLower()); + if (bAdd) + { + ddlDomains.Items.Add(d.DomainName.ToLower()); + } } } @@ -77,6 +78,50 @@ namespace WebsitePanel.Portal.ExchangeServer } } + public void SetPolicy(int packageId, string settingsName, string key) + { + PackageInfo package = PackagesHelper.GetCachedPackage(packageId); + + if (package != null) + { + SetOrgIdPolicy(package.UserId, settingsName, key); + } + } + + public void SetOrgIdPolicy(int userId, string settingsName, string key) + { + UserInfo user = UsersHelper.GetCachedUser(userId); + + if (user != null) + { + UserSettings settings = ES.Services.Users.GetUserSettings(userId, settingsName); + + if (settings != null && settings["OrgIdPolicy"] != null) + { + SetOrgIdPolicy(settings); + } + } + } + + private void SetOrgIdPolicy(UserSettings settings) + { + string policyValue = settings["OrgIdPolicy"]; + string[] values = policyValue.Split(';'); + + if (values.Length > 1 && Convert.ToBoolean(values[0])) + { + try + { + int maxLength = Convert.ToInt32(values[1]); + txtOrganizationID.MaxLength = maxLength; + valRequireCorrectOrgID.ValidationExpression = string.Format("[a-zA-Z0-9.-]{{1,{0}}}", maxLength); + } + catch (Exception) + { + } + } + } + protected void btnCreate_Click(object sender, EventArgs e) { CreateOrganization(); @@ -85,14 +130,13 @@ namespace WebsitePanel.Portal.ExchangeServer private void CreateOrganization() { if (!Page.IsValid) + { return; + } try { - - int itemId = ES.Services.Organizations.CreateOrganization(PanelSecurity.PackageId, - txtOrganizationID.Text.Trim().ToLower(), txtOrganizationName.Text.Trim().ToLower(), - ddlDomains.SelectedValue.Trim().ToLower()); + int itemId = ES.Services.Organizations.CreateOrganization(PanelSecurity.PackageId, txtOrganizationID.Text.Trim().ToLower(), txtOrganizationName.Text.Trim().ToLower(), ddlDomains.SelectedValue.Trim().ToLower()); if (itemId < 0) { @@ -100,9 +144,7 @@ namespace WebsitePanel.Portal.ExchangeServer return; } - Response.Redirect(EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), "organization_home", - "ItemID=" + itemId)); - + Response.Redirect(EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), "organization_home", "ItemID=" + itemId)); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangePolicy.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangePolicy.ascx index d57e25d6..251b3972 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangePolicy.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangePolicy.ascx @@ -1,5 +1,6 @@ <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SettingsExchangePolicy.ascx.cs" Inherits="WebsitePanel.Portal.SettingsExchangePolicy" %> <%@ Register Src="UserControls/PasswordPolicyEditor.ascx" TagName="PasswordPolicyEditor" TagPrefix="wsp" %> +<%@ Register Src="UserControls/OrgIdPolicyEditor.ascx" TagName="OrgIdPolicyEditor" TagPrefix="wsp" %> <%@ Register TagPrefix="wsp" TagName="CollapsiblePanel" Src="UserControls/CollapsiblePanel.ascx" %> + + + + + + + + + +
+ + +
\ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangePolicy.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangePolicy.ascx.cs index 8aa6df73..e9371049 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangePolicy.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangePolicy.ascx.cs @@ -26,33 +26,27 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -using System; -using System.Data; -using System.Configuration; -using System.Collections; -using System.Web; -using System.Web.Security; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Web.UI.WebControls.WebParts; -using System.Web.UI.HtmlControls; - using WebsitePanel.EnterpriseServer; namespace WebsitePanel.Portal { - public partial class SettingsExchangePolicy : WebsitePanelControlBase, IUserSettingsEditorControl + public partial class SettingsExchangePolicy : WebsitePanelControlBase, IUserSettingsEditorControl { + #region IUserSettingsEditorControl Members + public void BindSettings(UserSettings settings) { // mailbox - mailboxPasswordPolicy.Value = settings["MailboxPasswordPolicy"]; + mailboxPasswordPolicy.Value = settings["MailboxPasswordPolicy"]; + orgIdPolicy.Value = settings["OrgIdPolicy"]; } public void SaveSettings(UserSettings settings) { - // mailbox - settings["MailboxPasswordPolicy"] = mailboxPasswordPolicy.Value; + settings["MailboxPasswordPolicy"] = mailboxPasswordPolicy.Value; + settings["OrgIdPolicy"] = orgIdPolicy.Value; } - } + + #endregion + } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangePolicy.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangePolicy.ascx.designer.cs index e3a47369..c03ba832 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangePolicy.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangePolicy.ascx.designer.cs @@ -1,10 +1,9 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:2.0.50727.1433 // // Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -39,5 +38,32 @@ namespace WebsitePanel.Portal { /// To modify move field declaration from designer file to code-behind file. /// protected global::WebsitePanel.Portal.PasswordPolicyEditor mailboxPasswordPolicy; + + /// + /// secOrg control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.CollapsiblePanel secOrg; + + /// + /// OrgIdPanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel OrgIdPanel; + + /// + /// orgIdPolicy control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.UserControls.OrgIdPolicyEditor orgIdPolicy; } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/App_LocalResources/OrgIdPolicyEditor.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/App_LocalResources/OrgIdPolicyEditor.ascx.resx new file mode 100644 index 00000000..d34ec2b5 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/App_LocalResources/OrgIdPolicyEditor.ascx.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Enable Policy + + + Maximum OrgId length: + + + * + + + * + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/OrgIdPolicyEditor.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/OrgIdPolicyEditor.ascx new file mode 100644 index 00000000..4321cc18 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/OrgIdPolicyEditor.ascx @@ -0,0 +1,18 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="OrgIdPolicyEditor.ascx.cs" Inherits="WebsitePanel.Portal.UserControls.OrgIdPolicyEditor" %> + + + + + + + + +
+ + + + + +
+
+
\ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/OrgIdPolicyEditor.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/OrgIdPolicyEditor.ascx.cs new file mode 100644 index 00000000..43d0e214 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/OrgIdPolicyEditor.ascx.cs @@ -0,0 +1,69 @@ +using System; +using System.Text; +using System.Web.UI; + +namespace WebsitePanel.Portal.UserControls +{ + public partial class OrgIdPolicyEditor : UserControl + { + #region Properties + + public string Value + { + get + { + var sb = new StringBuilder(); + sb.Append(enablePolicyCheckBox.Checked.ToString()).Append(";"); + sb.Append(txtMaximumLength.Text).Append(";"); + + return sb.ToString(); + } + set + { + if (String.IsNullOrEmpty(value)) + { + enablePolicyCheckBox.Checked = true; + txtMaximumLength.Text = "128"; + } + else + { + try + { + string[] parts = value.Split(';'); + enablePolicyCheckBox.Checked = Utils.ParseBool(parts[0], false); + txtMaximumLength.Text = parts[1]; + } + catch + { + } + } + + ToggleControls(); + } + } + + #endregion + + #region Methods + + protected void Page_Load(object sender, EventArgs e) + { + } + + private void ToggleControls() + { + PolicyTable.Visible = enablePolicyCheckBox.Checked; + } + + #endregion + + #region Event Handlers + + protected void EnablePolicy_CheckedChanged(object sender, EventArgs e) + { + ToggleControls(); + } + + #endregion + } +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/OrgIdPolicyEditor.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/OrgIdPolicyEditor.ascx.designer.cs new file mode 100644 index 00000000..ddd87fbb --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/OrgIdPolicyEditor.ascx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.Portal.UserControls { + + + public partial class OrgIdPolicyEditor { + + /// + /// OrgIdPolicyPanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.UpdatePanel OrgIdPolicyPanel; + + /// + /// enablePolicyCheckBox control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CheckBox enablePolicyCheckBox; + + /// + /// PolicyTable control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlTable PolicyTable; + + /// + /// lblMaximumLength control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblMaximumLength; + + /// + /// txtMaximumLength control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtMaximumLength; + + /// + /// valRequireMaxLength control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireMaxLength; + + /// + /// valCorrectMaxLength control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RegularExpressionValidator valCorrectMaxLength; + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj index 5a320f77..505af506 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj @@ -412,6 +412,13 @@ EditFeedsList.ascx + + OrgIdPolicyEditor.ascx + ASPXCodeBehind + + + OrgIdPolicyEditor.ascx + MonitoringPage.aspx ASPXCodeBehind @@ -3855,6 +3862,7 @@ + @@ -4991,6 +4999,7 @@ Designer + Designer