private bool Acessar(string email, string senha, int contratanteId)
        {
            Usuario usuario = usuarioBP.BuscarPorLoginParaAcesso(email);

            if (usuario != null)
            {
                if (PasswordHash.ValidatePassword(senha, usuario.SENHA))
                {
                    Autenticado aut = Mapper.Map <Autenticado>(usuario);

                    string      caminhoFisico   = Server.MapPath("/ImagensUsuarios");
                    string      caminhoCompleto = string.Empty;
                    Contratante contratante     = contratanteBP.BuscarPorId(contratanteId);
                    string      arquivo         = "ImagemContratante" + contratanteId + (string.IsNullOrEmpty(contratante.EXTENSAO_IMAGEM)
                        ? ".png"
                        : contratante.EXTENSAO_IMAGEM);

                    caminhoCompleto = caminhoFisico + "\\" + arquivo;

                    aut.Imagem      = arquivo;
                    aut.NomeEmpresa = ((string.IsNullOrEmpty(contratante.NOME_FANTASIA))
                        ? contratante.RAZAO_SOCIAL
                        : contratante.NOME_FANTASIA);

                    if (contratante.WFD_GRUPO.Count > 0)
                    {
                        aut.Grupo = contratante.WFD_GRUPO.First().ID;
                    }

                    string       nomeUsuario = User.Identity.Name;
                    MemoryStream stream1     = new MemoryStream();

                    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Autenticado));
                    ser.WriteObject(stream1, aut);

                    stream1.Position = 0;
                    StreamReader  sr    = new StreamReader(stream1);
                    string        sSr   = sr.ReadToEnd();
                    string        dados = Cripto.Criptografar(sSr, Key);
                    List <Perfil> lstWacUsuarioPerfil = usuario.WAC_PERFIL.ToList();
                    string        roles = string.Empty;
                    foreach (var perfil in lstWacUsuarioPerfil)
                    {
                        foreach (var funcao in perfil.WAC_FUNCAO)
                        {
                            if (!roles.Contains(funcao.CODIGO))
                            {
                                roles += funcao.CODIGO + ",";
                            }
                        }
                    }

                    _metodosGerais.CriarAuthTicket(dados, roles);

                    if (usuario.TROCAR_SENHA != null)
                    {
                        usuario.TROCAR_SENHA = null;
                        usuarioBP.AlterarUsuario(usuario);
                    }

                    if (usuario.CONTRATANTE_ID != null)
                    {
                        if (usuario.Contratante.LOGO_FOTO != null && System.IO.Directory.Exists(caminhoFisico))
                        {
                            System.IO.File.WriteAllBytes(caminhoCompleto, usuario.Contratante.LOGO_FOTO.ToArray());
                        }
                    }

                    _metodosGerais.AuthenticateRequest();

                    return(true);
                }
            }

            return(false);
        }
        public ActionResult Acesso(AcessoVM model)
        {
            string chave = Path.GetRandomFileName().Replace(".", "");

            try
            {
                var usuarioLogado = _usuarioService.BuscarPorLogin(model.Login);

                //Valida Usuário Existe
                if (usuarioLogado == null)
                {
                    Log.Info("Usuário inválido!");
                    FinalizarAcesso();
                    ModelState.AddModelError("", "Usuário inválido!");
                }

                if (ModelState.IsValid)
                {
                    ProcessoLoginDTO processoLogin = _processoLoginService.ExecutarLogin(model.Login, model.Senha);
                    if (usuarioLogado.ATIVO)
                    {
                        if (Acessar(model.Login, model.Senha))
                        {
                            if (model.TipoCadastroNovoUsuario == EnumTipoCadastroNovoUsuario.PreCadastrado)
                            {
                                return(RedirectToAction("PopularValidarUsuarioSenha", "PreCadastro", new
                                {
                                    area = "Externo",
                                    chaveurl = Cripto.Criptografar(string.Format("idContratante={0}&cnpj={1}&senha={2}",
                                                                                 model.ContratanteId, model.Login, model.Senha), Key),
                                    returnUrl = model.ReturnUrl
                                }));
                            }
                            if (usuarioLogado.CONTRATANTE_ID == null) //Se for Fornecedor vá pra essa página
                            {
                                if (model.SolicitacaoId == null)
                                {
                                    var pjpf = _pjPfService.BuscarIdFornecedorPorCnpj(model.Login);

                                    if (pjpf == 0)
                                    {
                                        model.SolicitacaoId = _solicitacaoCadastroFornecedorService.BuscarIdSolicitacaoPorCnpj(model.Login);
                                    }
                                    else
                                    {
                                        model.FornecedorId = pjpf;
                                    }
                                }
                                return(RedirectToActionPermanent("FichaCadastral", "Documento", new
                                {
                                    chaveurl = Cripto.Criptografar(string.Format("SolicitacaoID={0}&FornecedorID={1}&ContratanteID=0", model.SolicitacaoId, model.FornecedorId), Key)
                                }));
                            }
                            if (usuarioLogado.PRIMEIRO_ACESSO == true)
                            {
                                usuarioLogado.TROCAR_SENHA = chave;
                                _usuarioService.AlterarUsuario(usuarioLogado);
                                return(RedirectToAction("TrocaSenhaEsqueceu", "Home",
                                                        new
                                {
                                    chaveurl = Cripto.Criptografar(string.Format("id={0}&chave={1}", usuarioLogado.ID, chave), Key)
                                }));
                            }
                            if (string.IsNullOrEmpty(model.ReturnUrl))
                            {
                                return(RedirectToAction("Index", "HomeAdmin"));
                            }
                            else
                            {
                                string[] url = model.ReturnUrl.Split(new char[] { '/' });
                                if (url.Length > 0)
                                {
                                    return(Redirect(model.ReturnUrl));
                                }
                                else
                                {
                                    return(RedirectToAction("Index", "HomeAdmin"));
                                }
                            }
                        }
                    }
                    else
                    {
                        Log.Error(processoLogin.Mensagem);
                        ModelState.AddModelError("", processoLogin.Mensagem);
                    }
                }
                Log.Info("Erro ao tentar logar!");
                FinalizarAcesso();
                ModelState.AddModelError("", "Erro ao tentar logar confirme login e senha de seu usuário");
                return(View(model));
            }
            catch (EntityException ex)
            {
                Log.Error(ex);
                ModelState.AddModelError("", "Ocorreu um erro de conexão.");
                FinalizarAcesso();
                return(View(model));
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                ModelState.AddModelError("", ex.Message);
                FinalizarAcesso();
                return(View(model));
            }
        }