Ejemplo n.º 1
0
        private char[] GetRandomPass(PasswordViewModel viewModel)
        {
            char[] pass       = new char[viewModel.Length];
            var    valid      = new StringBuilder();
            var    startIndex = 0;

            // Satisfy all conditions on password
            if (viewModel.LowerChars)
            {
                SatisfyCondition(_lowerChar, ref valid, ref startIndex, ref pass);
            }
            if (viewModel.UpperChars)
            {
                SatisfyCondition(_upperChar, ref valid, ref startIndex, ref pass);
            }
            if (viewModel.Digits)
            {
                SatisfyCondition(_digit, ref valid, ref startIndex, ref pass);
            }
            if (viewModel.Symbols)
            {
                SatisfyCondition(_nonAlphaNum, ref valid, ref startIndex, ref pass);
            }

            // Construct the rest of the password with random valid characters
            for (int i = startIndex; i < viewModel.Length; i++)
            {
                pass[i] = valid[GetNextInt(valid.Length)];
            }

            // Shuffle
            return(pass.OrderBy(x => GetNextInt(Int32.MaxValue)).ToArray());
        }
Ejemplo n.º 2
0
        public async Task <JsonResult> Post([FromBody] PasswordViewModel viewModel)
        {
            Logger.Fatal(this.Request.Log());
            if (ModelState.IsValid)
            {
                var plain     = new string(GetRandomPass(viewModel));
                var encrypted = plain.Encrypt(_configuration.GetConnectionString("Enc"));
                var password  = new Password()
                {
                    PasswordText = encrypted,
                    DateCreated  = DateTime.Now,
                    Hint         = viewModel.Hint
                };

                var user = await _userManager.GetUser(User.Identity.Name);

                if (user == null)
                {
                    return(new JsonResult(new
                    {
                        Success = true,
                        Password = plain,
                        DateCreated = password.DateCreated
                    }));
                }

                await SavePassword(password, user);

                return(new JsonResult(new
                {
                    Success = true,
                    Id = password.Id,
                    Password = plain,
                    Hint = password.Hint,
                    UserId = password.UserId,
                    DateCreated = password.DateCreated
                }));
            }
            else
            {
                var allErrors = ModelState.ValidationErrors();
                var ret       = new JsonResult(new { Success = false, Verbose = allErrors });
                ret.StatusCode = 400;
                return(ret);
            }
        }