Пример #1
0
        public void CreatePasswordValidation()
        {
            User _testUserPassword = new User
            {
                UserId      = 1,
                UserEmail   = "*****@*****.**",
                Password    = "******",
                FirstName   = "Davey",
                LastName    = "Cornelissen",
                BirthDay    = DateTime.Now,
                PhoneNumber = "0628433115",
                PpPath      = "/Test/Profile.PNG"
            };

            _accountLogic.CreateUser(_testUserPassword);
        }
Пример #2
0
        public async Task <IActionResult> Create(CreateAccountViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            try
            {
                var profileImagePaCombine = Path.Combine(_hostingEnvironment.WebRootPath, mapRootProfileImages);

                string _NewFile = await AddFileToDirectory(model.PPath, profileImagePaCombine);

                string image = _NewFile ?? "";


                User _newUser = new User
                {
                    UserEmail   = model.UserEmail,
                    Password    = model.Password,
                    FirstName   = model.FirstName,
                    LastName    = model.LastName,
                    BirthDay    = model.Birthday,
                    PhoneNumber = model.PhoneNumber,
                    PpPath      = image
                };

                _accountLogic.CreateUser(_newUser);

                return(RedirectToAction("Login", "Account"));
            }
            catch (ExceptionHandler exception)
            {
                ViewData[exception.Index] = exception.Message;
                return(View(model));
            }
        }
Пример #3
0
        public async Task <IActionResult> CreateUser(CreateUserViewModel createUser)
        {
            try
            {
                var sequenceData = await sequenceLogic.GetSequenceDataAsync <LoginUpSequenceData>(remove : false);

                CheckUpParty(sequenceData);
                var loginUpParty = await tenantRepository.GetAsync <LoginUpParty>(sequenceData.UpPartyId);

                if (!loginUpParty.EnableCreateUser)
                {
                    throw new InvalidOperationException("Create user not enabled.");
                }

                Func <IActionResult> viewError = () =>
                {
                    createUser.SequenceString = SequenceString;
                    createUser.CssStyle       = loginUpParty.CssStyle;
                    return(View(nameof(CreateUser), createUser));
                };

                if (!ModelState.IsValid)
                {
                    return(viewError());
                }

                logger.ScopeTrace("Create user post.");

                var session = await sessionLogic.GetAndUpdateSessionCheckUserAsync(loginUpParty, GetDownPartyLink(loginUpParty, sequenceData));

                if (session != null)
                {
                    return(await loginUpLogic.LoginResponseAsync(session.Claims.ToClaimList()));
                }

                try
                {
                    var claims = new List <Claim>();
                    if (!createUser.GivenName.IsNullOrWhiteSpace())
                    {
                        claims.AddClaim(JwtClaimTypes.GivenName, createUser.GivenName);
                    }
                    if (!createUser.FamilyName.IsNullOrWhiteSpace())
                    {
                        claims.AddClaim(JwtClaimTypes.FamilyName, createUser.FamilyName);
                    }

                    var user = await userAccountLogic.CreateUser(createUser.Email, createUser.Password, claims : claims);

                    if (user != null)
                    {
                        return(await LoginResponseAsync(loginUpParty, GetDownPartyLink(loginUpParty, sequenceData), user));
                    }
                }
                catch (UserExistsException uex)
                {
                    logger.ScopeTrace(uex.Message, triggerEvent: true);
                    ModelState.AddModelError(nameof(createUser.Email), localizer["A user with the email already exists."]);
                }
                catch (PasswordLengthException plex)
                {
                    logger.ScopeTrace(plex.Message);
                    ModelState.AddModelError(nameof(createUser.Password), RouteBinding.CheckPasswordComplexity ?
                                             localizer["Please use {0} characters or more with a mix of letters, numbers and symbols.", RouteBinding.PasswordLength] :
                                             localizer["Please use {0} characters or more.", RouteBinding.PasswordLength]);
                }
                catch (PasswordComplexityException pcex)
                {
                    logger.ScopeTrace(pcex.Message);
                    ModelState.AddModelError(nameof(createUser.Password), localizer["Please use a mix of letters, numbers and symbols"]);
                }
                catch (PasswordEmailTextComplexityException pecex)
                {
                    logger.ScopeTrace(pecex.Message);
                    ModelState.AddModelError(nameof(createUser.Password), localizer["Please do not use the email or parts of it."]);
                }
                catch (PasswordUrlTextComplexityException pucex)
                {
                    logger.ScopeTrace(pucex.Message);
                    ModelState.AddModelError(nameof(createUser.Password), localizer["Please do not use parts of the URL."]);
                }
                catch (PasswordRiskException prex)
                {
                    logger.ScopeTrace(prex.Message);
                    ModelState.AddModelError(nameof(createUser.Password), localizer["The password has previously appeared in a data breach. Please choose a more secure alternative."]);
                }

                return(viewError());
            }
            catch (Exception ex)
            {
                throw new EndpointException($"Create user failed, Name '{RouteBinding.UpParty.Name}'.", ex)
                      {
                          RouteBinding = RouteBinding
                      };
            }
        }
Пример #4
0
        public async Task <IActionResult> CreateUser(CreateUserViewModel createUser)
        {
            try
            {
                var sequenceData = await sequenceLogic.GetSequenceDataAsync <LoginUpSequenceData>(remove : false);

                var loginUpParty = await tenantRepository.GetAsync <LoginUpParty>(sequenceData.UpPartyId);

                Func <IActionResult> viewError = () =>
                {
                    createUser.SequenceString = SequenceString;
                    createUser.CssStyle       = loginUpParty.CssStyle;
                    return(View(nameof(CreateUser), createUser));
                };

                if (!ModelState.IsValid)
                {
                    return(viewError());
                }

                logger.ScopeTrace("Create user post.");

                (var session, var sessionUser) = await sessionLogic.GetAndUpdateSessionCheckUserAsync(loginUpParty);

                if (session != null)
                {
                    return(await loginUpLogic.LoginResponseAsync(loginUpParty, sessionUser, session.CreateTime, session.AuthMethods, session.SessionId));
                }

                if (ModelState.IsValid)
                {
                    try
                    {
                        var claims = new List <Claim>();
                        if (!createUser.GivenName.IsNullOrWhiteSpace())
                        {
                            claims.AddClaim(JwtClaimTypes.GivenName, createUser.GivenName);
                        }
                        if (!createUser.FamilyName.IsNullOrWhiteSpace())
                        {
                            claims.AddClaim(JwtClaimTypes.FamilyName, createUser.FamilyName);
                        }

                        var user = await accountLogic.CreateUser(createUser.Email, createUser.Password, claims);

                        if (user != null)
                        {
                            return(await LoginResponse(loginUpParty, user));
                        }
                    }
                    catch (UserExistsException uex)
                    {
                        logger.ScopeTrace(uex.Message);
                        ModelState.AddModelError(nameof(createUser.Email), localizer["A user with the email already exists."]);
                    }
                    catch (PasswordLengthException cex)
                    {
                        logger.ScopeTrace(cex.Message);
                        ModelState.AddModelError(nameof(createUser.Password), localizer[$"Please use {RouteBinding.PasswordLength} characters or more{(RouteBinding.CheckPasswordComplexity ? " with a mix of letters, numbers and symbols" : string.Empty)}."]);
                    }
                    catch (PasswordComplexityException cex)
                    {
                        logger.ScopeTrace(cex.Message);
                        ModelState.AddModelError(nameof(createUser.Password), localizer["Please use a mix of letters, numbers and symbols"]);
                    }
                    catch (PasswordEmailTextComplexityException tex)
                    {
                        logger.ScopeTrace(tex.Message);
                        ModelState.AddModelError(nameof(createUser.Password), localizer["Please do not use the email or parts of it."]);
                    }
                    catch (PasswordUrlTextComplexityException tex)
                    {
                        logger.ScopeTrace(tex.Message);
                        ModelState.AddModelError(nameof(createUser.Password), localizer["Please do not use parts of the url."]);
                    }
                    catch (PasswordRiskException rex)
                    {
                        logger.ScopeTrace(rex.Message);
                        ModelState.AddModelError(nameof(createUser.Password), localizer["The password has previously appeared in a data breach. Please choose a more secure alternative."]);
                    }
                }

                return(viewError());
            }
            catch (Exception ex)
            {
                throw new EndpointException($"Create user failed, Name '{RouteBinding.UpParty.Name}'.", ex)
                      {
                          RouteBinding = RouteBinding
                      };
            }
        }