diff --git a/src/Umbraco.Core/Configuration/GlobalSettings.cs b/src/Umbraco.Core/Configuration/GlobalSettings.cs
index d3c1fcb2ae..028d745a0e 100644
--- a/src/Umbraco.Core/Configuration/GlobalSettings.cs
+++ b/src/Umbraco.Core/Configuration/GlobalSettings.cs
@@ -7,6 +7,7 @@ using System.Web.Configuration;
using System.Web.Routing;
using System.Xml;
using System.Xml.Linq;
+using System.Xml.XPath;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
@@ -255,7 +256,38 @@ namespace Umbraco.Core.Configuration
SaveSetting("umbracoConfigurationStatus", value);
}
}
-
+
+ ///
+ /// Gets or sets the Umbraco members membership providers' useLegacyEncoding state. This will return a boolean
+ ///
+ /// The useLegacyEncoding status.
+ public static bool UmbracoMembershipProviderLegacyEncoding
+ {
+ get
+ {
+ return ConfiguredMembershipProvidersLegacyEncoding(Constants.Conventions.Member.UmbracoMemberProviderName);
+ }
+ set
+ {
+ SetMembershipProvidersLegacyEncoding(Constants.Conventions.Member.UmbracoMemberProviderName, value);
+ }
+ }
+
+ ///
+ /// Gets or sets the Umbraco users membership providers' useLegacyEncoding state. This will return a boolean
+ ///
+ /// The useLegacyEncoding status.
+ public static bool UmbracoUsersMembershipProviderLegacyEncoding
+ {
+ get
+ {
+ return ConfiguredMembershipProvidersLegacyEncoding(Constants.Conventions.User.UmbracoUsersProviderName);
+ }
+ set
+ {
+ SetMembershipProvidersLegacyEncoding(Constants.Conventions.User.UmbracoUsersProviderName, value);
+ }
+ }
///
/// Saves a setting into the configuration file.
@@ -315,6 +347,43 @@ namespace Umbraco.Core.Configuration
return fileName;
}
+ private static void SetMembershipProvidersLegacyEncoding(string providerName, bool useLegacyEncoding)
+ {
+ var webConfigFilename = GetFullWebConfigFileName();
+ var webConfigXml = XDocument.Load(webConfigFilename, LoadOptions.PreserveWhitespace);
+
+ var membershipConfigs = webConfigXml.XPathSelectElements("configuration/system.web/membership/providers/add").ToList();
+
+ if (membershipConfigs.Any() == false)
+ return;
+
+ var provider = membershipConfigs.SingleOrDefault(c => c.Attribute("name") != null && c.Attribute("name").Value == providerName);
+
+ if (provider == null)
+ return;
+
+ provider.SetAttributeValue("useLegacyEncoding", useLegacyEncoding);
+
+ webConfigXml.Save(webConfigFilename, SaveOptions.DisableFormatting);
+ }
+
+ private static bool ConfiguredMembershipProvidersLegacyEncoding(string providerName)
+ {
+ var webConfigFilename = GetFullWebConfigFileName();
+ var webConfigXml = XDocument.Load(webConfigFilename, LoadOptions.PreserveWhitespace);
+
+ var membershipConfigs = webConfigXml.XPathSelectElements("configuration/system.web/membership/providers/add").ToList();
+
+ var provider = membershipConfigs.SingleOrDefault(c => c.Attribute("name") != null && c.Attribute("name").Value == providerName);
+
+ var useLegacyEncodingAttribute = provider.Attribute("useLegacyEncoding");
+
+ bool useLegacyEncoding;
+ bool.TryParse(useLegacyEncodingAttribute.Value, out useLegacyEncoding);
+
+ return useLegacyEncoding;
+ }
+
///
/// Gets the full path to root.
///
diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings.cs b/src/Umbraco.Core/Configuration/UmbracoSettings.cs
index 0bdb0cd5c9..2e11354f4b 100644
--- a/src/Umbraco.Core/Configuration/UmbracoSettings.cs
+++ b/src/Umbraco.Core/Configuration/UmbracoSettings.cs
@@ -658,7 +658,7 @@ namespace Umbraco.Core.Configuration
{
string defaultProvider = GetKey("/settings/providers/users/DefaultBackofficeProvider");
if (String.IsNullOrEmpty(defaultProvider))
- defaultProvider = "UsersMembershipProvider";
+ defaultProvider = Constants.Conventions.User.UmbracoUsersProviderName;
return defaultProvider;
}
diff --git a/src/Umbraco.Core/Constants-Conventions.cs b/src/Umbraco.Core/Constants-Conventions.cs
index f88b29c149..60492e8341 100644
--- a/src/Umbraco.Core/Constants-Conventions.cs
+++ b/src/Umbraco.Core/Constants-Conventions.cs
@@ -85,7 +85,7 @@ namespace Umbraco.Core
///
/// MediaType alias for a folder.
- ///
+ ///
public const string Folder = "Folder";
///
@@ -94,9 +94,19 @@ namespace Umbraco.Core
public const string Image = "Image";
}
+
+ ///
+ /// Constants for Umbraco user
+ ///
+ public static class User
+ {
+ public static readonly string UmbracoUsersProviderName = "UsersMembershipProvider";
+ }
+
///
/// Constants for Umbraco Member property aliases.
///
+
public static class Member
{
public static readonly string UmbracoMemberProviderName = "UmbracoMembershipProvider";
diff --git a/src/Umbraco.Web.UI/web.Template.Release.config b/src/Umbraco.Web.UI/web.Template.Release.config
index 3a244ea9f6..388480b0c3 100644
--- a/src/Umbraco.Web.UI/web.Template.Release.config
+++ b/src/Umbraco.Web.UI/web.Template.Release.config
@@ -23,6 +23,16 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Web/Install/Steps/Database.cs b/src/Umbraco.Web/Install/Steps/Database.cs
index ff3363947a..a20c07a122 100644
--- a/src/Umbraco.Web/Install/Steps/Database.cs
+++ b/src/Umbraco.Web/Install/Steps/Database.cs
@@ -1,8 +1,9 @@
using System;
+using System.Linq;
using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
-using Umbraco.Web.Install;
+using Umbraco.Core.Logging;
namespace Umbraco.Web.Install.Steps
{
@@ -32,22 +33,39 @@ namespace Umbraco.Web.Install.Steps
//here we determine if the installer should skip this step...
public override bool Completed()
{
+
// Fresh installs don't have a version number so this step cannot be complete yet
- if (string.IsNullOrEmpty(Umbraco.Core.Configuration.GlobalSettings.ConfigurationStatus))
+ if (string.IsNullOrEmpty(GlobalSettings.ConfigurationStatus))
{
//Even though the ConfigurationStatus is blank we try to determine the version if we can connect to the database
var result = ApplicationContext.Current.DatabaseContext.ValidateDatabaseSchema();
var determinedVersion = result.DetermineInstalledVersion();
if (determinedVersion.Equals(new Version(0, 0, 0)))
- return false;
+ {
+ // Now that we know this is a brand new Umbraco install, turn membership providers' "useLegacyEncoding" off
+ DisableMembershipProviderLegacyEncoding();
+ return false;
+ }
return UmbracoVersion.Current < determinedVersion;
}
- var configuredVersion = new Version(Umbraco.Core.Configuration.GlobalSettings.ConfigurationStatus);
+ var configuredVersion = new Version(GlobalSettings.ConfigurationStatus);
var targetVersion = UmbracoVersion.Current;
return targetVersion < configuredVersion;
}
+
+ private static void DisableMembershipProviderLegacyEncoding()
+ {
+ if (GlobalSettings.UmbracoMembershipProviderLegacyEncoding)
+ GlobalSettings.UmbracoMembershipProviderLegacyEncoding = false;
+
+ if (GlobalSettings.UmbracoUsersMembershipProviderLegacyEncoding)
+ GlobalSettings.UmbracoUsersMembershipProviderLegacyEncoding = false;
+
+
+ LogHelper.Info("Updated Umbraco membership providers, set useLegacyEncoding to false.");
+ }
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs
index 2dbce6a350..ba2c127877 100644
--- a/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs
+++ b/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs
@@ -30,7 +30,7 @@ namespace Umbraco.Web.Security.Providers
public override string ProviderName
{
- get { return "UsersMembershipProvider"; }
+ get { return Constants.Conventions.User.UmbracoUsersProviderName; }
}
///
diff --git a/src/umbraco.cms/businesslogic/member/Member.cs b/src/umbraco.cms/businesslogic/member/Member.cs
index 75c6788640..923eb8ff10 100644
--- a/src/umbraco.cms/businesslogic/member/Member.cs
+++ b/src/umbraco.cms/businesslogic/member/Member.cs
@@ -11,6 +11,7 @@ using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.Models.Css;
using Umbraco.Core.Models.EntityBase;
using Umbraco.Core.Models.Rdbms;
using Umbraco.Core.Persistence.Querying;
@@ -227,6 +228,7 @@ namespace umbraco.cms.businesslogic.member
var model = ApplicationContext.Current.Services.MemberService.CreateMemberWithIdentity(
loginName, Email.ToLower(), "", mbt.MemberTypeItem);
model.Name = Name;
+ model.IsApproved = true;
//The content object will only have the 'WasCancelled' flag set to 'True' if the 'Creating' event has been cancelled, so we return null.
if (((Entity)model).WasCancelled)
@@ -575,7 +577,8 @@ namespace umbraco.cms.businesslogic.member
// This check should not be done here, as this logic is based on the MembershipProvider
var requireUniqueEmail = Membership.Providers[UmbracoMemberProviderName].RequiresUniqueEmail;
//check if there's anyone with this email in the db that isn't us
- if (requireUniqueEmail && GetMembersFromEmail(Email).Any(x => x.Id != Id))
+ var membersFromEmail = GetMembersFromEmail(Email);
+ if (requireUniqueEmail && membersFromEmail != null && membersFromEmail.Any(x => x.Id != Id))
{
throw new Exception(string.Format("Duplicate Email! A member with the e-mail {0} already exists", Email));
}
diff --git a/src/umbraco.providers/UsersMembershipProvider.cs b/src/umbraco.providers/UsersMembershipProvider.cs
index 1561b991bc..b06be5d5b5 100644
--- a/src/umbraco.providers/UsersMembershipProvider.cs
+++ b/src/umbraco.providers/UsersMembershipProvider.cs
@@ -55,7 +55,7 @@ namespace umbraco.providers
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
{
if (config == null) throw new ArgumentNullException("config");
- if (string.IsNullOrEmpty(name)) name = "UsersMembershipProvider";
+ if (string.IsNullOrEmpty(name)) name = Constants.Conventions.User.UmbracoUsersProviderName;
base.Initialize(name, config);
}
diff --git a/src/umbraco.providers/members/UmbracoMembershipProvider.cs b/src/umbraco.providers/members/UmbracoMembershipProvider.cs
index 6a36273164..dc094fd15b 100644
--- a/src/umbraco.providers/members/UmbracoMembershipProvider.cs
+++ b/src/umbraco.providers/members/UmbracoMembershipProvider.cs
@@ -110,7 +110,7 @@ namespace umbraco.providers.members
// Intialize values from web.config
if (config == null) throw new ArgumentNullException("config");
- if (string.IsNullOrEmpty(name)) name = "UmbracoMembershipProvider";
+ if (string.IsNullOrEmpty(name)) name = Constants.Conventions.Member.UmbracoMemberProviderName;
base.Initialize(name, config);