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);
        }
Example #3
0
        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);
        }
Example #4
0
        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));
        }
Example #8
0
        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"));
        }