1 package com.atlassian.plugin.servlet;
2
3 import org.apache.commons.io.IOUtils;
4 import org.slf4j.Logger;
5 import org.slf4j.LoggerFactory;
6
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.OutputStream;
10
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13
14 public class ResourceDownloadUtils
15 {
16 private static final Logger log = LoggerFactory.getLogger(ResourceDownloadUtils.class);
17 private static final long ONE_YEAR_SECONDS = 60L * 60L * 24L * 365L;
18 private static final long ONE_YEAR_MILLISECONDS = 1000 * ONE_YEAR_SECONDS;
19
20
21
22
23
24 @Deprecated
25 public static void serveFileImpl(final HttpServletResponse httpServletResponse, final InputStream in) throws IOException
26 {
27 final OutputStream out = httpServletResponse.getOutputStream();
28 try
29 {
30 IOUtils.copy(in, out);
31 }
32 finally
33 {
34 IOUtils.closeQuietly(in);
35 out.flush();
36 }
37 log.debug("Serving file done.");
38 }
39
40
41
42
43
44
45
46 public static void addCachingHeaders(HttpServletRequest httpServletRequest, final HttpServletResponse httpServletResponse, final String... cacheControls)
47 {
48 boolean cacheDisabledByQueryParam = "false".equals(httpServletRequest.getParameter("cache"));
49 if (Boolean.getBoolean("atlassian.disable.caches"))
50 {
51 httpServletResponse.setDateHeader("Expires", 0);
52 httpServletResponse.setHeader("Cache-Control", "no-cache, must-revalidate");
53 }
54 else if (!cacheDisabledByQueryParam)
55 {
56 httpServletResponse.setDateHeader("Expires", System.currentTimeMillis() + ONE_YEAR_MILLISECONDS);
57 httpServletResponse.setHeader("Cache-Control", "max-age=" + ONE_YEAR_SECONDS);
58 for (final String cacheControl : cacheControls)
59 {
60 httpServletResponse.addHeader("Cache-Control", cacheControl);
61 }
62 }
63 }
64
65
66
67
68
69
70
71 @Deprecated
72 public static void addCachingHeaders(final HttpServletRequest httpServletRequest, final HttpServletResponse httpServletResponse)
73 {
74 addPublicCachingHeaders(httpServletRequest, httpServletResponse);
75 }
76
77
78
79
80
81
82
83 public static void addPublicCachingHeaders(final HttpServletRequest httpServletRequest, final HttpServletResponse httpServletResponse)
84 {
85 addCachingHeaders(httpServletRequest, httpServletResponse, "public");
86 }
87
88
89
90
91
92
93
94 public static void addPrivateCachingHeaders(final HttpServletRequest httpServletRequest, final HttpServletResponse httpServletResponse)
95 {
96 addCachingHeaders(httpServletRequest, httpServletResponse, "private");
97 }
98 }