diff --git a/src/Umbraco.Core/Models/Rdbms/UserDto.cs b/src/Umbraco.Core/Models/Rdbms/UserDto.cs index 41620cccaf..6090fbd174 100644 --- a/src/Umbraco.Core/Models/Rdbms/UserDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/UserDto.cs @@ -40,6 +40,13 @@ namespace Umbraco.Core.Models.Rdbms [Column("userPassword")] [Length(500)] public string Password { get; set; } + + /// + /// This will represent a JSON structure of how the password has been created (i.e hash algorithm, iterations) + /// + [Column("passwordConfig")] + [Length(500)] + public string PasswordConfig { get; set; } [Column("userEmail")] public string Email { get; set; } diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/UpdateUserTables.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/UpdateUserTables.cs index 74238de4ca..3374e4a53f 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/UpdateUserTables.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/UpdateUserTables.cs @@ -1,7 +1,10 @@ using System.Linq; +using System.Web.Security; +using Newtonsoft.Json; using Umbraco.Core.Logging; using Umbraco.Core.Persistence.DatabaseModelDefinitions; using Umbraco.Core.Persistence.SqlSyntax; +using Umbraco.Core.Security; namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZero { @@ -28,6 +31,19 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZe if (columns.Any(x => x.TableName.InvariantEquals("umbracoUser") && x.ColumnName.InvariantEquals("invitedDate")) == false) Create.Column("invitedDate").OnTable("umbracoUser").AsDateTime().Nullable(); + + if (columns.Any(x => x.TableName.InvariantEquals("umbracoUser") && x.ColumnName.InvariantEquals("passwordConfig")) == false) + { + Create.Column("passwordConfig").OnTable("umbracoUser").AsString(500).Nullable(); + //Check if we have a known config, we only want to store config for hashing + var membershipProvider = MembershipProviderExtensions.GetUsersMembershipProvider(); + if (membershipProvider.PasswordFormat == MembershipPasswordFormat.Hashed) + { + var json = JsonConvert.SerializeObject(new { hashAlgorithm = Membership.HashAlgorithmType }); + Execute.Sql("UPDATE umbracoUser SET passwordConfig = '" + json + "'"); + } + } + } public override void Down()