Factor out a method for setting common non-HTML (API) headers Results in setting Content-Disposition: Attachment on text errors, which was an oversight, since there is no guarantee text passed to that method is not user-provided. Change-Id: Ifb5d6991e77075443cb4b4224f7ae028d02a4a1d
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java index a12e240..1fbee33 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -23,15 +23,6 @@ import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import static javax.servlet.http.HttpServletResponse.SC_OK; -import com.google.common.base.Charsets; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Maps; -import com.google.common.net.HttpHeaders; -import com.google.gson.FieldNamingPolicy; -import com.google.gson.GsonBuilder; - -import org.joda.time.Instant; - import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Type; @@ -42,6 +33,15 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.joda.time.Instant; + +import com.google.common.base.Charsets; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import com.google.common.net.HttpHeaders; +import com.google.gson.FieldNamingPolicy; +import com.google.gson.GsonBuilder; + /** Base servlet class for Gitiles servlets that serve Soy templates. */ public abstract class BaseServlet extends HttpServlet { private static final long serialVersionUID = 1L; @@ -213,10 +213,7 @@ */ protected void renderJson(HttpServletRequest req, HttpServletResponse res, Object src, Type typeOfSrc) throws IOException { - res.setContentType(JSON.getMimeType()); - res.setCharacterEncoding("UTF-8"); - res.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment"); - setCacheHeaders(req, res); + setApiHeaders(req, res, JSON); res.setStatus(SC_OK); PrintWriter writer = res.getWriter(); @@ -247,10 +244,7 @@ */ protected PrintWriter startRenderText(HttpServletRequest req, HttpServletResponse res) throws IOException { - res.setContentType(TEXT.getMimeType()); - res.setCharacterEncoding("UTF-8"); - res.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment"); - setCacheHeaders(req, res); + setApiHeaders(req, res, TEXT); return res.getWriter(); } @@ -267,8 +261,7 @@ protected void renderTextError(HttpServletRequest req, HttpServletResponse res, int statusCode, String message) throws IOException { res.setStatus(statusCode); - res.setContentType(TEXT.getMimeType()); - res.setCharacterEncoding("UTF-8"); + setApiHeaders(req, res, TEXT); setCacheHeaders(req, res); PrintWriter out = res.getWriter(); out.write(message); @@ -278,4 +271,11 @@ protected void setCacheHeaders(HttpServletRequest req, HttpServletResponse res) { setNotCacheable(res); } + + protected void setApiHeaders(HttpServletRequest req, HttpServletResponse res, FormatType type) { + res.setContentType(type.getMimeType()); + res.setCharacterEncoding(Charsets.UTF_8.name()); + res.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment"); + setCacheHeaders(req, res); + } }