public bool UserAccountUpdated([FromBody] IncomingUserAccountUpdate projectRuleData) { using (var context = new UsersContext(Context, Configuration)) { context.UpdateUserAccount(projectRuleData); } return(true); }
internal void UpdateUserAccount(IncomingUserAccountUpdate userData) { var userAccount = Context.UserAccounts.FirstOrDefault(x => x.Id == userData.Id); Context.Attach(userAccount); userAccount.Email = userData.Email; if (!string.IsNullOrEmpty(userData.Password)) { // generate a 128-bit salt using a secure PRNG byte[] salt = new byte[128 / 8]; using (var rng = RandomNumberGenerator.Create()) { rng.GetBytes(salt); } Console.WriteLine($"Salt: {Convert.ToBase64String(salt)}"); // derive a 256-bit subkey (use HMACSHA1 with 10,000 iterations) string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2( password: userData.Password, salt: salt, prf: KeyDerivationPrf.HMACSHA1, iterationCount: 10000, numBytesRequested: 256 / 8)); userAccount.Salt = Convert.ToBase64String(salt); userAccount.Password = hashed; Context.Entry(userAccount).Property("Password").IsModified = true; Context.Entry(userAccount).Property("Salt").IsModified = true; } userAccount.FirstName = userData.FirstName; userAccount.LastName = userData.LastName; Context.Update(userAccount); Context.SaveChanges(); var rights = default(UserRights); var getCommonRight = Context.UserRights.FirstOrDefault(x => x.ManageIterations == userData.Rights.IterationOptions && x.ManageUserdays == userData.Rights.ScheduleManagement && x.UpdateUserRights == userData.Rights.EditUserRights && x.ViewOtherPeoplesWork == userData.Rights.ViewWorkItems && x.WorkItemRule == userData.Rights.WorkItemOption && x.ChatChannelsRule == userData.Rights.ChatChannels); if (getCommonRight != null) { rights = getCommonRight; } else { var newRights = Context.UserRights.Add(new UserRights { ManageIterations = Convert.ToInt16(userData.Rights.IterationOptions), ManageUserdays = Convert.ToInt16(userData.Rights.ScheduleManagement), ChatChannelsRule = Convert.ToInt16(userData.Rights.ChatChannels), UpdateUserRights = Convert.ToInt16(userData.Rights.EditUserRights), ViewOtherPeoplesWork = Convert.ToInt16(userData.Rights.ViewWorkItems), WorkItemRule = Convert.ToInt16(userData.Rights.WorkItemOption) }); rights = newRights.Entity; Context.SaveChanges(); } Context.AssociatedProjectMemberRights.Add(new AssociatedProjectMemberRights { ProjectId = userData.ProjectId, RightsId = rights.Id, UserAccountId = userAccount.Id }); Context.SaveChanges(); }