public CommandResult Register(UserRegisterCommand command)
        {
            bool exist = _repository.ExistName(command.Username);

            if (exist)
            {
                return(new CommandResult(false, "Este nome já está cadastrado! "));
            }

            exist = _repository.ExistEmail(command.Email);
            if (exist)
            {
                return(new CommandResult(false, "Este email já está cadastrado! "));
            }

            var user = new User(command.Username, command.Email, command.Password);

            if (user.Invalid)
            {
                return(new CommandResult(false, string.Join(". ", Notifications)));
            }

            // Add Hash and Salt
            var salt = SaltGenerator.Generate();
            var hash = HashGenerator.Generate(user.Password, salt);

            user.AddHash(hash, Convert.ToBase64String(salt));
            user.AddEmailToken();

            _repository.Register(user);

            user.HidePassword();

            return(new CommandResult(true, "Cadastro realizado! Valide seu e-mail. ", user));
        }
        public CommandResultToken Login(UserLoginCommand command)
        {
            var user = _repository.GetByNameOrEmail(command.Username);

            if (user == null)
            {
                return(new CommandResultToken(false, "Login inválido! "));
            }

            var salt_tabela = user.Salt;

            byte[] salt         = Convert.FromBase64String(salt_tabela);
            var    hashPassword = HashGenerator.Generate(command.Password, salt); // <-- monta hash para comparação / login

            user = _repository.Login(command.Username, hashPassword);
            if (user == null)
            {
                return(new CommandResultToken(false, "Login inválido! "));
            }
            else if (user.EmailConfirm == false)
            {
                return(new CommandResultToken(false, "Necessário validar seu e-mail! "));
            }
            else if (user.Active == false)
            {
                return(new CommandResultToken(false, "Usuário inativo. Contacte o Administrador. "));
            }

            user.HidePassword();

            return(new CommandResultToken(true, "Login efetuado com sucesso! ", user));
        }
Esempio n. 3
0
        public void Test_ハッシュテキストの文字数チェック(string password)
        {
            var hash = HashGenerator.Generate(password);

            // 64 文字であることをチェック
            Assert.AreEqual(hash.Length, 64);
        }
        public CommandResult UpdatePassword(UserUpdatePasswordCommand command, string currentUser)
        {
            var user = _repository.GetByNameOrEmail(command.Username);

            if (user == null)
            {
                return(new CommandResult(false, "Login inválido! "));
            }

            var salt_tabela = user.Salt;

            byte[] salt         = Convert.FromBase64String(salt_tabela);
            var    hashPassword = HashGenerator.Generate(command.Password, salt);

            if (user.Password != hashPassword)
            {
                return(new CommandResult(false, "Senha antiga não confere. "));
            }

            // add new hash and salt
            hashPassword = HashGenerator.Generate(command.NewPassword, salt);

            user.UpdatePassword(command.NewPassword);

            if (user.Invalid)
            {
                return(new CommandResult(false, string.Join(". ", Notifications)));
            }

            _repository.UpdatePassword(user.Username, hashPassword);

            user.HidePassword();

            return(new CommandResult(true, "Senha alterada com sucesso! ", user));
        }
Esempio n. 5
0
 public void Test_生成時のハッシュ値長さのエラーチェック(string password, int size)
 {
     Assert.Throws <ArgumentOutOfRangeException>(() =>
     {
         var hash = HashGenerator.Generate(password, size);
     });
 }
Esempio n. 6
0
 public void Test_生成時のパスワードのエラーチェック(string password, int size)
 {
     Assert.Throws <ArgumentNullException>(() =>
     {
         var hash = HashGenerator.Generate(password, size);
     });
 }
Esempio n. 7
0
        private static User[] CreateUsers()
        {
            var user1 = new User
            {
                UserName  = "******",
                FirstName = "John",
                LastName  = "Smith",
                Password  = HashGenerator.Generate("qwe123")
            };

            var user2 = new User
            {
                UserName  = "******",
                FirstName = "Jack",
                LastName  = "Black",
                Password  = HashGenerator.Generate("qwe123")
            };

            var user3 = new User
            {
                UserName  = "******",
                FirstName = "Paul",
                LastName  = "Blue",
                Password  = HashGenerator.Generate("qwe123")
            };

            var users = new[] { user1, user2, user3 };

            return(users);
        }
Esempio n. 8
0
        public void ReturnEmptyHashForEmptyInput(string input)
        {
            var hashGenerator = new HashGenerator();

            var hash = hashGenerator.Generate(input);

            Assert.Equal(string.Empty, hash);
        }
Esempio n. 9
0
        public void Generate_ShouldReturnHashSpecifySize()
        {
            int size      = 10;
            var generator = new HashGenerator();

            var result = generator.Generate(inputString, size);

            Assert.Equal(size, result.Length);
        }
Esempio n. 10
0
        public void Test_ハッシュテキストの再現性チェック(string password, int count)
        {
            var hash1 = HashGenerator.Generate(password);

            for (var i = 0; i < count; i++)
            {
                var hash2 = HashGenerator.Generate(password);

                Assert.AreEqual(hash1, hash2, $"ハッシュ値が一致しません。hash1={hash1}, hash2={hash2}");
            }
        }
Esempio n. 11
0
        public string GetImageUrl(string email)
        {
            var emailHash = hashGenerator.Generate(email);

            if (string.IsNullOrWhiteSpace(emailHash))
            {
                return(null);
            }

            return($"{ServiceAddress}{emailHash}{SizeParam}");
        }
Esempio n. 12
0
        public void GenerateHashForEmail()
        {
            var email = "*****@*****.**";

            var hashGenerator = new HashGenerator();

            var hash = hashGenerator.Generate(email);

            Assert.NotNull(hash);
            Assert.NotEmpty(hash);
            Assert.Equal("7bd021685b66a1edc08a268bafd22bb8", hash);
        }
Esempio n. 13
0
        public ChangePasswordResult ChangePassword(ChangePasswordRequest changePasswordRequest)
        {
            var user = this.GetUserByName(changePasswordRequest.UserName);

            if (user.Password != HashGenerator.Generate(changePasswordRequest.OldPassword))
            {
                return(new ChangePasswordResult("Invalid username or password"));
            }

            // TODO: provide way to check password strength

            user.Password = HashGenerator.Generate(changePasswordRequest.NewPassword);
            this.session.Save(user);
            return(new ChangePasswordResult());
        }
Esempio n. 14
0
        public LoginResult <TUserViewModel> LoginUser <TUserViewModel>(LoginRequest loginRequest)
            where TUserViewModel : PizzaUserViewModel, new()
        {
            this.session.Clear();

            var user = this.GetUserByName(loginRequest.UserName);

            if (user == null || user.Password != HashGenerator.Generate(loginRequest.Password))
            {
                return(new LoginResult <TUserViewModel>());
            }

            var userViewModel = Injector.CreateViewModelFromPersistenceModel <TUser, TUserViewModel>(user);

            return(new LoginResult <TUserViewModel>(userViewModel));
        }
Esempio n. 15
0
        private void InsertOwner()
        {
            using var db = new Db();
            var authorEntity = new AuthorEntity {
                Name    = _ownerName.Split(" ")[0],
                Surname = _ownerName.Split(" ")[1],
                Id      = HashGenerator.Generate(_ownerName)
            };

            try
            {
                db.Insert(authorEntity, "authors");
            }
            catch (Exception)
            {
                //Ignored
            }
        }
Esempio n. 16
0
        static void Main(string[] args)
        {
            // create a new hash generator
            var hashGenerator = new HashGenerator();

            Console.WriteLine("Enter a password: "******"Your hash is: {hash}");

            Console.WriteLine($"Hash length: {hash.ToString().Length}");

            Console.WriteLine();

            Console.WriteLine("Enter a password to see if it matches or -1 to quit.");

            while (true)
            {
                var match = Console.ReadLine();

                if (match == "-1")
                {
                    break;
                }

                Console.WriteLine();

                // validates the second input against the hash
                Console.WriteLine($"Password match: {hashGenerator.Validate(hash, match)}");
            }
        }
Esempio n. 17
0
        public static void InitializeUsers(AppDbContext context)
        {
            if (context.User.Any())
            {
                return;
            }

            // Admin
            var user = new User("admin", "*****@*****.**", "123456", "admin", true, true);
            var salt = SaltGenerator.Generate();
            var hash = HashGenerator.Generate(user.Password, salt);

            user.AddHash(hash, Convert.ToBase64String(salt));
            context.Add(user);
            context.SaveChanges();

            // User
            user = new User("user", "*****@*****.**", "123456", "user", true, true);
            salt = SaltGenerator.Generate();
            hash = HashGenerator.Generate(user.Password, salt);
            user.AddHash(hash, Convert.ToBase64String(salt));
            context.Add(user);
            context.SaveChanges();
        }
        public CommandResult ResetPassword(string email)
        {
            var user = _repository.GetByNameOrEmail(email);

            if (user == null)
            {
                return(new CommandResult(false, "Email não encontrado. "));
            }

            user.PasswordGenerate();
            var randomPassword = user.Password;

            // Add new Hash and Salt
            var salt = SaltGenerator.Generate();
            var hash = HashGenerator.Generate(user.Password, salt);

            user.AddHash(hash, Convert.ToBase64String(salt));

            _repository.ResetPassword(user);

            user.AddPassword(randomPassword);

            return(new CommandResult(true, "Senha temporária enviada no e-mail! ", user));
        }
Esempio n. 19
0
        public void Test_ハッシュ値の文字数変更チェック(string password, int size)
        {
            var hash = HashGenerator.Generate(password, size);

            Assert.AreEqual(hash.Length, size);
        }
        public OperationResult <Model.BusinessEntities.PetitionEmailVote> CreateEmailVoteRequest(EmailVote vote)
        {
            OperationResult <Model.BusinessEntities.PetitionEmailVote> emailVoteRequestResult;

            Func <EDEntities, OperationResult <Model.BusinessEntities.PetitionEmailVote> > procedure = (db) =>
            {
                OperationResult <Model.BusinessEntities.PetitionEmailVote> result;

                var emailVote = db.PetitionEmailVotes.SingleOrDefault(v => v.PetitionID == vote.ID && v.Email == vote.Email);

                if (emailVote != null)
                {
                    var votedPetition = db.Petitions.SingleOrDefault(p => p.ID == vote.ID);
                    result = emailVote.IsConfirmed
                                                ? OperationResult <Model.BusinessEntities.PetitionEmailVote> .Fail(
                        int.Parse(PetitionVoteOperationResult.AlreadyVotedCode),
                        PetitionVoteOperationResult.AlreadyVotedMessage)
                                                : OperationResult <Model.BusinessEntities.PetitionEmailVote> .Success(
                        int.Parse(PetitionVoteOperationResult.WaitingConfirmationCode),
                        string.Format(PetitionVoteOperationResult.WaitingConfirmationMessage, emailVote.Email),
                        new Model.BusinessEntities.PetitionEmailVote(emailVote, votedPetition));

                    return(result);
                }

                emailVote = new PetitionEmailVote
                {
                    PetitionID  = vote.ID,
                    Email       = vote.Email,
                    CreatedDate = DateTime.Now,
                    IsConfirmed = false,
                    Hash        = HashGenerator.Generate()
                };

                db.PetitionEmailVotes.Add(emailVote);
                db.SaveChanges();

                var petition        = new Model.BusinessEntities.Petition(db.Petitions.SingleOrDefault(p => p.ID == emailVote.PetitionID));
                var clientEmailVote =
                    new Model.BusinessEntities.PetitionEmailVote()
                {
                    ID          = emailVote.ID,
                    Petition    = petition,
                    Hash        = emailVote.Hash,
                    Email       = emailVote.Email,
                    CreatedDate = emailVote.CreatedDate,
                    IsConfirmed = emailVote.IsConfirmed
                };

                result = OperationResult <Model.BusinessEntities.PetitionEmailVote> .Success(
                    int.Parse(PetitionVoteOperationResult.EmailVoteRequestCreatedCode),
                    string.Format(PetitionVoteOperationResult.EmailVoteRequestCreatedMessage, emailVote.Email),
                    clientEmailVote);

                return(result);
            };

            emailVoteRequestResult = DbExecuter.Execute(procedure);

            return(emailVoteRequestResult);
        }
Esempio n. 21
0
        public void Test_16進数以外の文字を含んでいないかのチェック(string password)
        {
            var hash = HashGenerator.Generate(password);

            Assert.That(hash, Does.Match("^[0-9|a-f]+$"));
        }