コード例 #1
0
        public override async Task <User> AddAsync(User obj)
        {
            // Verifica se o usuário já existe
            var existingEmail = await CheckUserExistByEmail(obj.Email);

            var existingUsername = await CheckUserExistByEmail(obj.Username);


            if (!existingEmail && !existingUsername)
            {
                // Cria salt e salt e salva no objeto
                var salt = EncryptPassword.CreateSaltArgon2();
                obj.Hash = Convert.ToBase64String(EncryptPassword.HashPasswordArgon2(obj.Password, salt));
                obj.Salt = Convert.ToBase64String(salt);

                // Adicona o usuário
                obj.Password = "******";
                var user = await base.AddAsync(obj);

                // Escondo hash e salt
                user.Hash = "";
                user.Salt = "";


                return(user);
            }

            return(null);
        }
コード例 #2
0
        /// <summary>
        /// Autentica o usuário no sistema.
        /// </summary>
        /// <param name="username">Username</param>
        /// <param name="password">Password</param>
        /// <returns>Retorna um usuário caso ele exista, do contrário retorna null.</returns>
        public virtual async Task <User> Authenticate(string username, string password)
        {
            User user;

            // Verifica se já existe usuário no sistema
            if (FirstAccess())
            {
                // Cria usuário
                user = new User(username, password, "*****@*****.**", "admin");
                await this.AddAsync(user);
            }
            else
            {
                // Busca usuário
                var allUsers = await _userRepository.GetAllAsync();

                user = allUsers.Where(x => x.Username == username).FirstOrDefault();

                // Valida
                if (user != null)
                {
                    // gera hash
                    var salt = Convert.FromBase64String(user.Salt);
                    var hash = EncryptPassword.HashPasswordArgon2(password, salt);

                    // Valida hash
                    if (EncryptPassword.VerifyHash(password, salt, hash))
                    {
                        user = await _userRepository.GetByIdAsync(user.Id);
                    }
                    else
                    {
                        user = null;
                    }
                }
            }

            // Esconde o password
            if (user != null)
            {
                user.Password = null;
            }

            // Retorna o usuário
            return(user);
        }
コード例 #3
0
        public override async Task <int> UpdateAsync(User obj)
        {
            // Obtem usuário para saber hash e salt
            var user = await this.GetByIdAsync(obj.Id);

            // Verifica se password foi alterado
            if (obj.Password == "p@ssword")
            {
                obj.Hash = user.Hash;
                obj.Salt = user.Salt;
            }
            else
            {
                // Cria salt e salt e salva no objeto
                var salt = EncryptPassword.CreateSaltArgon2();
                obj.Hash     = Convert.ToBase64String(EncryptPassword.HashPasswordArgon2(obj.Password, salt));
                obj.Salt     = Convert.ToBase64String(salt);
                obj.Password = "******";
            }

            return(await base.UpdateAsync(obj));
        }