001/*
002 * Licensed under the Apache License, Version 2.0 (the "License");
003 * you may not use this file except in compliance with the License.
004 * You may obtain a copy of the License at
005 *
006 * http://www.apache.org/licenses/LICENSE-2.0
007 *
008 * Unless required by applicable law or agreed to in writing, software
009 * distributed under the License is distributed on an "AS IS" BASIS,
010 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
011 * See the License for the specific language governing permissions and
012 * limitations under the License.
013 */
014package org.atteo.moonshine.firebuglogger;
015
016import java.io.IOException;
017
018import javax.servlet.Filter;
019import javax.servlet.FilterChain;
020import javax.servlet.FilterConfig;
021import javax.servlet.ServletException;
022import javax.servlet.ServletRequest;
023import javax.servlet.ServletResponse;
024import javax.servlet.http.HttpServletRequest;
025import javax.servlet.http.HttpServletResponse;
026
027import com.google.inject.Singleton;
028
029@Singleton
030public class FireBugFilter implements Filter {
031
032    @Override
033    public void init(FilterConfig filterConfig) throws ServletException {
034    }
035
036    @Override
037    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
038            throws IOException, ServletException {
039
040        try {
041            HttpServletRequest req = (HttpServletRequest) request;
042            String userAgent = req.getHeader("User-Agent");
043
044            if (userAgent != null && userAgent.contains("FirePHP")) {
045
046                HttpServletResponse resp = (HttpServletResponse) response;
047
048                FireBugAppender.setServletResponse(resp);
049                resp.setHeader("X-Wf-Protocol-1", "http://meta.wildfirehq.org/Protocol/JsonStream/0.2");
050                resp.setHeader("X-Wf-1-Plugin-1",
051                        "http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3");
052                resp.setHeader("X-Wf-1-Structure-1",
053                        "http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1");
054            }
055
056            chain.doFilter(request, response);
057        } finally {
058            FireBugAppender.setServletResponse(null);
059        }
060    }
061
062    @Override
063    public void destroy() {
064    }
065
066}