001package org.nuxeo.ecm.platform.ui.web.auth.service;
002
003import java.io.IOException;
004import java.util.ArrayList;
005import java.util.List;
006
007import javax.servlet.FilterChain;
008import javax.servlet.ServletException;
009import javax.servlet.ServletRequest;
010import javax.servlet.ServletResponse;
011
012import org.nuxeo.ecm.platform.ui.web.auth.NuxeoAuthenticationFilter;
013import org.nuxeo.ecm.platform.ui.web.auth.interfaces.NuxeoAuthPreFilter;
014
015public class NuxeoAuthFilterChain implements FilterChain {
016
017    protected List<NuxeoAuthPreFilter> preFilters = new ArrayList<NuxeoAuthPreFilter>();
018
019    protected NuxeoAuthenticationFilter mainFilter;
020
021    protected FilterChain standardFilterChain;
022
023    public NuxeoAuthFilterChain(List<NuxeoAuthPreFilter> preFilters, FilterChain standardFilterChain,
024            NuxeoAuthenticationFilter mainFilter) {
025        this.preFilters.addAll(preFilters);
026        this.mainFilter = mainFilter;
027        this.standardFilterChain = standardFilterChain;
028    }
029
030    @Override
031    public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {
032        if (preFilters != null && !preFilters.isEmpty()) {
033            NuxeoAuthPreFilter preFilter = preFilters.remove(0);
034            preFilter.doFilter(request, response, this);
035        } else {
036            mainFilter.doFilterInternal(request, response, standardFilterChain);
037        }
038    }
039
040}