1
2
3
4
5
6
7
8
9 package com.atlassian.cache.servlet.resolver;
10
11 import java.io.BufferedReader;
12 import java.io.ByteArrayOutputStream;
13 import java.io.IOException;
14 import java.io.OutputStream;
15 import java.io.PrintWriter;
16 import java.io.UnsupportedEncodingException;
17 import java.security.Principal;
18 import java.util.Enumeration;
19 import java.util.Locale;
20 import java.util.Map;
21
22 import javax.servlet.RequestDispatcher;
23 import javax.servlet.ServletConfig;
24 import javax.servlet.ServletException;
25 import javax.servlet.ServletInputStream;
26 import javax.servlet.ServletOutputStream;
27 import javax.servlet.http.Cookie;
28 import javax.servlet.http.HttpServletRequest;
29 import javax.servlet.http.HttpServletResponse;
30 import javax.servlet.http.HttpSession;
31
32 import com.atlassian.cache.servlet.CombinedCachingServlet;
33
34 public class DwrPluginContentResolver implements ContentResolver {
35
36 protected BogusDwrPluginServlet dwrServlet;
37
38 public String getContent(String path, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
39 {
40 ByteArrayOutputStream os = new ByteArrayOutputStream();
41 getDwrServlet().doGet(new EvilHttpRequest(request, path), new OutputCollectingResponse(response, os));
42 return os.toString(CombinedCachingServlet.DEFAULT_ENCODING);
43 }
44
45 public void init(ServletConfig servletConfig) throws ServletException
46 {
47 setDwrServlet(new BogusDwrPluginServlet());
48 getDwrServlet().init(servletConfig);
49 }
50
51 public static class EvilHttpRequest implements HttpServletRequest
52 {
53 private HttpServletRequest wrappedRequest;
54 private String pathInfo;
55
56 public EvilHttpRequest(HttpServletRequest wrappedRequest, String pathInfo)
57 {
58 this.wrappedRequest = wrappedRequest;
59 this.pathInfo = pathInfo;
60 }
61
62
63 public String getAuthType()
64 {
65 return wrappedRequest.getAuthType();
66 }
67
68 public Cookie[] getCookies()
69 {
70 return wrappedRequest.getCookies();
71 }
72
73 public long getDateHeader(String s)
74 {
75 return wrappedRequest.getDateHeader(s);
76 }
77
78 public String getHeader(String s)
79 {
80 return wrappedRequest.getHeader(s);
81 }
82
83 public Enumeration getHeaders(String s)
84 {
85 return wrappedRequest.getHeaders(s);
86 }
87
88 public Enumeration getHeaderNames()
89 {
90 return wrappedRequest.getHeaderNames();
91 }
92
93 public int getIntHeader(String s)
94 {
95 return wrappedRequest.getIntHeader(s);
96 }
97
98 public String getMethod()
99 {
100 return wrappedRequest.getMethod();
101 }
102
103 public String getPathInfo()
104 {
105 return pathInfo;
106 }
107
108 public String getPathTranslated()
109 {
110 return wrappedRequest.getPathTranslated();
111 }
112
113 public String getContextPath()
114 {
115 return wrappedRequest.getContextPath();
116 }
117
118 public String getQueryString()
119 {
120 return wrappedRequest.getQueryString();
121 }
122
123 public String getRemoteUser()
124 {
125 return wrappedRequest.getRemoteUser();
126 }
127
128 public boolean isUserInRole(String s)
129 {
130 return wrappedRequest.isUserInRole(s);
131 }
132
133 public Principal getUserPrincipal()
134 {
135 return wrappedRequest.getUserPrincipal();
136 }
137
138 public String getRequestedSessionId()
139 {
140 return wrappedRequest.getRequestedSessionId();
141 }
142
143 public String getRequestURI()
144 {
145 return wrappedRequest.getRequestURI();
146 }
147
148 public StringBuffer getRequestURL()
149 {
150 return wrappedRequest.getRequestURL();
151 }
152
153 public String getServletPath()
154 {
155 return "/dwr";
156 }
157
158 public HttpSession getSession(boolean b)
159 {
160 return wrappedRequest.getSession(b);
161 }
162
163 public HttpSession getSession()
164 {
165 return wrappedRequest.getSession();
166 }
167
168 public boolean isRequestedSessionIdValid()
169 {
170 return wrappedRequest.isRequestedSessionIdValid();
171 }
172
173 public boolean isRequestedSessionIdFromCookie()
174 {
175 return wrappedRequest.isRequestedSessionIdFromCookie();
176 }
177
178 public boolean isRequestedSessionIdFromURL()
179 {
180 return wrappedRequest.isRequestedSessionIdFromURL();
181 }
182
183
184
185
186 public boolean isRequestedSessionIdFromUrl()
187 {
188 return wrappedRequest.isRequestedSessionIdFromUrl();
189 }
190
191 public Object getAttribute(String s)
192 {
193 return wrappedRequest.getAttribute(s);
194 }
195
196 public Enumeration getAttributeNames()
197 {
198 return wrappedRequest.getAttributeNames();
199 }
200
201 public String getCharacterEncoding()
202 {
203 return wrappedRequest.getCharacterEncoding();
204 }
205
206 public void setCharacterEncoding(String s)
207 throws UnsupportedEncodingException
208 {
209 wrappedRequest.setCharacterEncoding(s);
210 }
211
212 public int getContentLength()
213 {
214 return wrappedRequest.getContentLength();
215 }
216
217 public String getContentType()
218 {
219 return wrappedRequest.getContentType();
220 }
221
222 public ServletInputStream getInputStream()
223 throws IOException
224 {
225 return wrappedRequest.getInputStream();
226 }
227
228 public String getParameter(String s)
229 {
230 return wrappedRequest.getParameter(s);
231 }
232
233 public Enumeration getParameterNames()
234 {
235 return wrappedRequest.getParameterNames();
236 }
237
238 public String[] getParameterValues(String s)
239 {
240 return wrappedRequest.getParameterValues(s);
241 }
242
243 public Map getParameterMap()
244 {
245 return wrappedRequest.getParameterMap();
246 }
247
248 public String getProtocol()
249 {
250 return wrappedRequest.getProtocol();
251 }
252
253 public String getScheme()
254 {
255 return wrappedRequest.getScheme();
256 }
257
258 public String getServerName()
259 {
260 return wrappedRequest.getServerName();
261 }
262
263 public int getServerPort()
264 {
265 return wrappedRequest.getServerPort();
266 }
267
268 public BufferedReader getReader()
269 throws IOException
270 {
271 return wrappedRequest.getReader();
272 }
273
274 public String getRemoteAddr()
275 {
276 return wrappedRequest.getRemoteAddr();
277 }
278
279 public String getRemoteHost()
280 {
281 return wrappedRequest.getRemoteHost();
282 }
283
284 public void setAttribute(String s, Object o)
285 {
286 wrappedRequest.setAttribute(s, o);
287 }
288
289 public void removeAttribute(String s)
290 {
291 wrappedRequest.removeAttribute(s);
292 }
293
294 public Locale getLocale()
295 {
296 return wrappedRequest.getLocale();
297 }
298
299 public Enumeration getLocales()
300 {
301 return wrappedRequest.getLocales();
302 }
303
304 public boolean isSecure()
305 {
306 return wrappedRequest.isSecure();
307 }
308
309 public RequestDispatcher getRequestDispatcher(String s)
310 {
311 return wrappedRequest.getRequestDispatcher(s);
312 }
313
314
315
316
317 public String getRealPath(String s)
318 {
319 return wrappedRequest.getRealPath(s);
320 }
321 }
322
323 private static class OutputCollectingResponse implements HttpServletResponse
324 {
325 private HttpServletResponse response;
326 private ServletOutputStream os;
327
328 public OutputCollectingResponse(HttpServletResponse response, OutputStream os)
329 {
330 this.response = response;
331 this.os = new ServletOutputStreamAdapter(os);
332 }
333
334 public void addCookie(Cookie cookie)
335 {
336 response.addCookie(cookie);
337 }
338
339 public boolean containsHeader(String s)
340 {
341 return response.containsHeader(s);
342 }
343
344 public String encodeURL(String s)
345 {
346 return response.encodeURL(s);
347 }
348
349 public String encodeRedirectURL(String s)
350 {
351 return response.encodeRedirectURL(s);
352 }
353
354
355
356
357 public String encodeUrl(String s)
358 {
359 return response.encodeUrl(s);
360 }
361
362
363
364
365 public String encodeRedirectUrl(String s)
366 {
367 return response.encodeRedirectUrl(s);
368 }
369
370 public void sendError(int i, String s)
371 throws IOException
372 {
373 response.sendError(i, s);
374 }
375
376 public void sendError(int i)
377 throws IOException
378 {
379 response.sendError(i);
380 }
381
382 public void sendRedirect(String s)
383 throws IOException
384 {
385 response.sendRedirect(s);
386 }
387
388 public void setDateHeader(String s, long l)
389 {
390
391 }
392
393 public void addDateHeader(String s, long l)
394 {
395
396 }
397
398 public void setHeader(String s, String s1)
399 {
400
401 }
402
403 public void addHeader(String s, String s1)
404 {
405
406 }
407
408 public void setIntHeader(String s, int i)
409 {
410
411 }
412
413 public void addIntHeader(String s, int i)
414 {
415
416 }
417
418 public void setStatus(int i)
419 {
420 response.setStatus(i);
421 }
422
423
424
425
426 public void setStatus(int i, String s)
427 {
428 response.setStatus(i, s);
429 }
430
431 public String getCharacterEncoding()
432 {
433 return response.getCharacterEncoding();
434 }
435
436 public ServletOutputStream getOutputStream()
437 throws IOException
438 {
439 return os;
440 }
441
442 public PrintWriter getWriter()
443 throws IOException
444 {
445 return new PrintWriter(getOutputStream());
446 }
447
448 public void setContentLength(int i)
449 {
450 response.setContentLength(i);
451 }
452
453 public void setContentType(String s)
454 {
455 response.setContentType(s);
456 }
457
458 public void setBufferSize(int i)
459 {
460 response.setBufferSize(i);
461 }
462
463 public int getBufferSize()
464 {
465 return response.getBufferSize();
466 }
467
468 public void flushBuffer()
469 throws IOException
470 {
471 response.flushBuffer();
472 }
473
474 public void resetBuffer()
475 {
476 response.resetBuffer();
477 }
478
479 public boolean isCommitted()
480 {
481 return response.isCommitted();
482 }
483
484 public void reset()
485 {
486 response.reset();
487 }
488
489 public void setLocale(Locale locale)
490 {
491 response.setLocale(locale);
492 }
493
494 public Locale getLocale()
495 {
496 return response.getLocale();
497 }
498 }
499
500 private static class ServletOutputStreamAdapter extends ServletOutputStream
501 {
502 private OutputStream os;
503
504 public ServletOutputStreamAdapter(OutputStream os)
505 {
506 this.os = os;
507 }
508
509 public void write(int b) throws IOException
510 {
511 os.write(b);
512 }
513
514 public void flush() throws IOException
515 {
516 os.flush();
517 }
518
519 public void close() throws IOException
520 {
521
522 }
523 }
524
525 protected BogusDwrPluginServlet getDwrServlet() {
526 return dwrServlet;
527 }
528
529 protected void setDwrServlet(BogusDwrPluginServlet dwrServlet) {
530 this.dwrServlet = dwrServlet;
531 }
532
533
534 }