package br.senac.tads3.pi03b.gruposete.servlets;

import br.senac.tads3.pi03b.gruposete.models.Usuario;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebFilter(filterName = "AutorizacaoFilter",
        
        servletNames = {"AlteraClienteServlet", "AlteraFuncionarioServlet", "AlteraHotelServlet", "AlteraVooServlet",
                        "BuscaClienteServlet", "BuscaFuncionarioServlet", "BuscaHotelServlet", "BuscaVooServlet",
                        "CadastroClienteServlet", "CadastroFuncionarioServlet", "CadastroHotelServlet", "CadastroVooServlet",
                        "ExcluiClienteServlet", "ExcluiFuncionarioServlet", "ExcluiHotelServlet", "ExcluiVooServlet"},
        
        urlPatterns = {"/protegido/*"}
)
public class AutorizacaoFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 1) Verificar se usuário está autenticado
        // 1a) Cast dos objetos request e response
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;

        // 2) Tenta obter a sessao do usuario
        HttpSession sessao = httpRequest.getSession();
        Usuario usuario
                = (Usuario) sessao.getAttribute("usuario");

        // Usuario nulo significa que não está logado
        // Redireciona para tela de login
        if (usuario == null) {
            httpResponse.sendRedirect(httpRequest.getContextPath() + "/login");
            return;
        }

        // 3) Usuario está logado, então verifica se tem permissão
        // para acessar a página.
        if (verificarAcesso(usuario, httpRequest, httpResponse)) {
            // Acesso a página está liberado.
            chain.doFilter(request, response);
        } else {
            // Usuário não tem permissão de acesso a página.
            httpResponse.sendRedirect(httpRequest.getContextPath() + "/LoginNaoAutorizado");
        }
    }

    private static boolean verificarAcesso(Usuario usuario,
            HttpServletRequest request, HttpServletResponse response) {
        String paginaAcessada = request.getRequestURI();
        String pagina = paginaAcessada.replace(request.getContextPath(), "");

        if (pagina.endsWith("entrada")
                && usuario.temPapel("ADMIN")) {
            return true;
        } else if (pagina.endsWith("agenda")
                && usuario.temPapel("BASICO")) {
            return true;

        }
        return false;
    }

    @Override
    public void destroy() {

    }

}

@@ -371,25 +371,16 @@
 ilter%22,%0A
-        %0A
         
@@ -401,448 +401,31 @@
  %7B%22A
-lteraClienteServlet%22, %22AlteraFuncionarioServlet%22, %22AlteraHotelServlet%22, %22AlteraVooServlet%22,%0A                        %22BuscaClienteServlet%22, %22BuscaFuncionarioServlet%22, %22BuscaHotelServlet%22, %22BuscaVooServlet%22,%0A                        %22CadastroClienteServlet%22, %22CadastroFuncionarioServlet%22, %22CadastroHotelServlet%22, %22CadastroVooServlet%22,%0A                        %22ExcluiClienteServlet%22, %22ExcluiFuncionarioServlet%22, %22ExcluiHotelServlet%22, %22ExcluiVoo
+gendaServlet%22, %22Entrada
 Serv
@@ -435,17 +435,8 @@
 %22%7D,%0A
-        %0A
     
@@ -1855,13 +1855,12 @@
 + %22/
-Login
+erro
 NaoA
@@ -1868,16 +1868,20 @@
 torizado
+.jsp
 %22);%0A    

Revert "."