public static UpdateUserParameter ToParameter(this UpdateResourceOwnerViewModel updateResourceOwnerViewModel) { if (updateResourceOwnerViewModel == null) { throw new ArgumentNullException(nameof(updateResourceOwnerViewModel)); } var result = new UpdateUserParameter { Password = updateResourceOwnerViewModel.NewPassword, TwoFactorAuthentication = updateResourceOwnerViewModel.TwoAuthenticationFactor, Claims = new List <Claim>(), Login = updateResourceOwnerViewModel.Name }; if (!string.IsNullOrWhiteSpace(updateResourceOwnerViewModel.Name)) { result.Claims.Add(new Claim(Core.Jwt.Constants.StandardResourceOwnerClaimNames.Name, updateResourceOwnerViewModel.Name)); } if (!string.IsNullOrWhiteSpace(updateResourceOwnerViewModel.Email)) { result.Claims.Add(new Claim(Core.Jwt.Constants.StandardResourceOwnerClaimNames.Email, updateResourceOwnerViewModel.Email)); } if (!string.IsNullOrWhiteSpace(updateResourceOwnerViewModel.PhoneNumber)) { result.Claims.Add(new Claim(Core.Jwt.Constants.StandardResourceOwnerClaimNames.PhoneNumber, updateResourceOwnerViewModel.PhoneNumber)); } return(result); }
public static AddUserParameter ToAddUserParameter(this UpdateResourceOwnerViewModel updateResourceOwnerViewModel) { if (updateResourceOwnerViewModel == null) { throw new ArgumentNullException(nameof(updateResourceOwnerViewModel)); } var result = new AddUserParameter { Login = updateResourceOwnerViewModel.Login, Password = updateResourceOwnerViewModel.NewPassword }; if (!string.IsNullOrWhiteSpace(updateResourceOwnerViewModel.Name)) { result.Claims.Add(new Claim(Core.Jwt.Constants.StandardResourceOwnerClaimNames.Name, updateResourceOwnerViewModel.Name)); } if (!string.IsNullOrWhiteSpace(updateResourceOwnerViewModel.Email)) { result.Claims.Add(new Claim(Core.Jwt.Constants.StandardResourceOwnerClaimNames.Email, updateResourceOwnerViewModel.Email)); } if (!string.IsNullOrWhiteSpace(updateResourceOwnerViewModel.PhoneNumber)) { result.Claims.Add(new Claim(Core.Jwt.Constants.StandardResourceOwnerClaimNames.PhoneNumber, updateResourceOwnerViewModel.PhoneNumber)); } return(result); }
private UpdateResourceOwnerViewModel BuildViewModel( string twoFactorAuthType, string subject, IEnumerable <Claim> claims, bool isLocalAccount) { var editableClaims = new Dictionary <string, string>(); var notEditableClaims = new Dictionary <string, string>(); foreach (var claim in claims) { if (JwtConstants.NotEditableResourceOwnerClaimNames.Contains(claim.Type)) { notEditableClaims.Add(claim.Type, claim.Value); } else { editableClaims.Add(claim.Type, claim.Value); } } var result = new UpdateResourceOwnerViewModel( subject, editableClaims, notEditableClaims, isLocalAccount, twoFactorAuthType, _twoFactorAuthenticationHandler.GetAll().Select(s => s.Name).ToList()); return(result); }
private async Task <IActionResult> GetEditView(ClaimsPrincipal authenticatedUser) { var resourceOwner = await _userActions.GetUser(authenticatedUser); UpdateResourceOwnerViewModel viewModel = null; if (resourceOwner == null) { viewModel = BuildViewModel(resourceOwner.TwoFactorAuthentication, authenticatedUser.GetSubject(), authenticatedUser.Claims, false); return(View("Edit", viewModel)); } viewModel = BuildViewModel(resourceOwner.TwoFactorAuthentication, authenticatedUser.GetSubject(), resourceOwner.Claims, true); viewModel.IsLocalAccount = true; return(View("Edit", viewModel)); }
public async Task <ActionResult> Edit(UpdateResourceOwnerViewModel viewModel) { if (viewModel == null) { throw new ArgumentNullException(nameof(viewModel)); } await TranslateUserEditView(DefaultLanguage); var authenticatedUser = await SetUser(); if (!ModelState.IsValid) { ViewBag.IsUpdated = false; return(View(viewModel)); } var resourceOwner = await _userActions.GetUser(authenticatedUser); var subject = authenticatedUser.GetSubject(); if (resourceOwner == null) { var record = viewModel.ToAddUserParameter(); await _userActions.AddUser(record); } else { var parameter = viewModel.ToParameter(); foreach (var newClaim in resourceOwner.Claims.Where(uc => !parameter.Claims.Any(pc => pc.Type == uc.Type))) { parameter.Claims.Add(newClaim); } parameter.Login = subject; await _userActions.UpdateUser(parameter); } ViewBag.IsUpdated = true; return(View(viewModel)); }
public async Task <ActionResult> Edit() { var authenticatedUser = await SetUser(); var resourceOwner = await _userActions.GetUser(authenticatedUser); await TranslateUserEditView(DefaultLanguage); UpdateResourceOwnerViewModel viewModel = null; ViewBag.IsUpdated = false; if (resourceOwner == null) { viewModel = BuildViewModel(authenticatedUser.Claims); return(View(viewModel)); } viewModel = BuildViewModel(User.Claims); viewModel.Password = resourceOwner.Password; return(View(viewModel)); }
public async Task <ActionResult> Edit(UpdateResourceOwnerViewModel viewModel) { if (viewModel == null) { throw new ArgumentNullException(nameof(viewModel)); } // 1. Set view bag var subject = (await this.GetAuthenticatedUser(Constants.CookieName)).GetSubject(); var user = await GetCurrentUser(); if (!await SetUserEditViewBag(user)) { throw new IdentityServerException( ErrorCodes.UnhandledExceptionCode, ErrorDescriptions.TheResourceOwnerIsNotALocalAccount); } // 2. Validate the view model if (!ModelState.IsValid) { ViewBag.IsUpdated = false; return(View(viewModel)); } // 3. Update the resource owner var parameter = viewModel.ToParameter(); foreach (var newClaim in user.Claims.Where(uc => !parameter.Claims.Any(pc => pc.Type == uc.Type))) { parameter.Claims.Add(newClaim); } parameter.Login = subject; await _userActions.UpdateUser(parameter); // 4. Returns translated view ViewBag.IsUpdated = true; return(View(viewModel)); }
public async Task <ActionResult> Index(UpdateResourceOwnerViewModel updateResourceOwnerViewModel) { if (updateResourceOwnerViewModel == null) { throw new ArgumentNullException(nameof(updateResourceOwnerViewModel)); } var authenticatedUser = await this.GetAuthenticatedUser(Constants.CookieName); if (authenticatedUser != null && authenticatedUser.Identity.IsAuthenticated) { return(RedirectToAction("Index", "User")); } await _accountActions.AddResourceOwner(new AddUserParameter { Login = updateResourceOwnerViewModel.Login, Password = updateResourceOwnerViewModel.Password }); return(RedirectToAction("Index", "Authenticate")); }