public new IActionResult User(ManageUserModel model) { var successMessages = new List <string>(); var changePassword = ModelState.GetValidationState("Password") == ModelValidationState.Valid && ModelState.GetValidationState("PasswordConfirmation") == ModelValidationState.Valid; ModelState.Remove("Password"); ModelState.Remove("PasswordConfirmation"); if (ModelState.IsValid || changePassword) { using (var context = ContextHelper.OpenContext()) { var contextUser = context.User.FirstOrDefault(u => u.UserId == model.UserId); if (contextUser == null) { return(RedirectToAction("Users")); } if (ModelState.IsValid) { contextUser.Username = model.Name; contextUser.Origin = model.Origin; contextUser.Type = model.Type; successMessages.Add("Der User wurde gespeichert."); } if (changePassword) { var salt = AuthenticationHelper.GenerateSalt(); var hash = AuthenticationHelper.CalculatePasswordHash(salt, model.Password); contextUser.Salt = salt; contextUser.Hash = hash; successMessages.Add("Das Passwort wurde geändert."); } contextUser.Modified = DateTime.Now; context.SaveChanges(); } SharedProperties.OutdatedObjects.Add(model.UserId); } else { return(View(model)); } return(RedirectToAction("User", new { id = model.UserId, successMessages })); }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> Validate user credentials </summary> /// /// <remarks> Andre Beging, 17.06.2018. </remarks> /// /// <param name="mail"> The mail. </param> /// <param name="password"> The password. </param> /// /// <returns> True if credentials are correct. False is not </returns> //////////////////////////////////////////////////////////////////////////////////////////////////// public Claim[] ValidateCredentials(string mail, string password) { var contextUser = Context.User.FirstOrDefault(x => x.Mail.Equals(mail, StringComparison.InvariantCultureIgnoreCase) && x.Enabled); if (contextUser == null) { return(null); } var hash = AuthenticationHelper.CalculatePasswordHash(contextUser.Salt, password); if (hash.Equals(contextUser.Hash, StringComparison.InvariantCulture)) { return(new[] { new Claim(BierAlyzerClaim.UserId, contextUser.UserId.ToString()), new Claim(BierAlyzerClaim.Language, "de-DE"), new Claim(BierAlyzerClaim.UserType, contextUser.Type.ToString()) }); } return(null); }
public IActionResult UserProfile(UserProfileModel model) { var changePassword = false; if (!string.IsNullOrWhiteSpace(model.Password) || !string.IsNullOrWhiteSpace(model.PasswordConfirmation)) { if (string.IsNullOrWhiteSpace(model.Password)) { ModelState.AddModelError("Password", "Um das Passwort zu ändern, müssen Passwort und Passwortbestätigung eingetragen werden"); } if (string.IsNullOrWhiteSpace(model.PasswordConfirmation)) { ModelState.AddModelError("PasswordConfirmation", "Um das Passwort zu ändern, müssen Passwort und Passwortbestätigung eingetragen werden"); } if (!string.IsNullOrWhiteSpace(model.Password) && model.Password.Length < 6) { ModelState.AddModelError("Password", "Das Passwort muss mindestens 6 Zeichen lang sein."); } if (!string.IsNullOrWhiteSpace(model.PasswordConfirmation) && model.PasswordConfirmation.Length < 6) { ModelState.AddModelError("PasswordConfirmation", "Das Passwort muss mindestens 6 Zeichen lang sein."); } if (ModelState.IsValid && model.Password != model.PasswordConfirmation) { ModelState.AddModelError("PasswordConfirmation", "Die eingegebenen Passwörter stimmen nicht überein."); } if (ModelState.IsValid) { changePassword = true; } } if (ModelState.IsValid) { using (var context = ContextHelper.OpenContext()) { var contextUser = context.User.FirstOrDefault(x => x.UserId == model.UserId); if (contextUser == null) { return(RedirectToAction("UserProfile")); } contextUser.Username = model.Username; contextUser.Origin = model.Origin; contextUser.Modified = DateTime.Now; if (changePassword) { var salt = AuthenticationHelper.GenerateSalt(); var hash = AuthenticationHelper.CalculatePasswordHash(salt, model.Password); contextUser.Salt = salt; contextUser.Hash = hash; } context.SaveChanges(); } SharedProperties.OutdatedObjects.Add(model.UserId); ViewData["Success"] = true; ViewData["PasswortChanged"] = changePassword; } return(View(model)); }