public CommandResultToken Login(UserLoginCommand command)
        {
            var user = _repository.GetSalt(command.Username);

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

            var salt_tabela = user.Salt;

            byte[] salt         = Convert.FromBase64String(salt_tabela);
            var    hashPassword = Hash.Create(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. ", null));
            }

            if (user.Active == false && user.Role == null)
            {
                AddNotification("Aguardando liberação de acesso.. Contacte o Gestor da aplicação se deseja agilizar a liberação. ");
            }
            else if (user.Active == false)
            {
                AddNotification("Usuário inativo. Contacte o Administrado. ");
            }

            if (Invalid)
            {
                return(new CommandResultToken(false, GroupNotifications.Group(Notifications), null));
            }

            var log = new AccessLog(
                "Login",
                DateTime.Now,
                command.Username,
                null,
                null);

            _log.Register(log);

            user.HidePassword();

            return(new CommandResultToken(true, "Login efetuado com sucesso! ", user));
        }