public override async Task <User> UpdateAsync(User retrievedUser, User user) { if (!string.IsNullOrEmpty(user.Password)) { string salt = PasswordUtils.GenerateSalt(); string hashedPassword = PasswordUtils.HashPasswordWithSalt(user.Password, salt); user.Salt = salt; user.Password = hashedPassword; } else { user.Password = retrievedUser.Password; user.Salt = retrievedUser.Salt; } if (user.Created == DateTimeOffset.MinValue) { user.Created = retrievedUser.Created; } if (string.IsNullOrEmpty(user.Username)) { user.Username = retrievedUser.Username; } if (string.IsNullOrEmpty(user.DisplayName)) { user.DisplayName = retrievedUser.DisplayName; } var now = DateTime.UtcNow; user.LastUpdate = now; // After password update DbContext.Entry(retrievedUser).CurrentValues.SetValues(new { user.Username, user.Password, user.DisplayName, user.Salt }); await DbContext.SaveChangesAsync(); return(retrievedUser); }
public override async Task <User> InsertAsync(User user) { var defaultAvatarPath = Configuration.GetValue <string>("DefaultAvatar"); string originalPass = user.Password; string salt = PasswordUtils.GenerateSalt(); string hashedPass = PasswordUtils.HashPasswordWithSalt(originalPass, salt); var now = DateTimeOffset.UtcNow; user.Username = user.Username.Trim(); user.DisplayName = user.DisplayName.Trim(); user.Password = hashedPass; user.Salt = salt; user.Created = now; user.LastUpdate = now; var transaction = DbContext.Database.BeginTransaction(); await UserDatabase.AddAsync(user); await DbContext.SaveChangesAsync(); // create new avatar record var photo = new AvatarPhoto { UserId = user.Id, FileName = defaultAvatarPath }; DbContext.AvatarPhotos.Add(photo); await DbContext.SaveChangesAsync(); await transaction.CommitAsync(); // format output user.AvatarPhoto = photo; return(user); }