1 package de.tivsource.page.admin.actions.locations.request;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.text.SimpleDateFormat;
6 import java.util.Calendar;
7 import java.util.GregorianCalendar;
8
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11
12 import org.apache.logging.log4j.LogManager;
13 import org.apache.logging.log4j.Logger;
14 import org.apache.struts2.ServletActionContext;
15 import org.apache.struts2.convention.annotation.Action;
16 import org.apache.struts2.convention.annotation.Actions;
17 import org.apache.struts2.convention.annotation.Result;
18 import org.apache.struts2.interceptor.ServletRequestAware;
19 import org.apache.tika.Tika;
20
21 import com.opensymphony.xwork2.ActionSupport;
22
23 import de.tivsource.ejb3plugin.InjectEJB;
24 import de.tivsource.page.dao.property.PropertyDaoLocal;
25 import de.tivsource.page.dao.request.RequestDaoLocal;
26 import de.tivsource.page.entity.request.Request;
27
28
29
30
31
32 public class ImageAction extends ActionSupport implements ServletRequestAware {
33
34
35
36
37 private static final long serialVersionUID = 7367696315767291095L;
38
39 private static final Logger logger = LogManager.getLogger(ImageAction.class);
40
41
42
43
44 private HttpServletRequest servletRequest;
45
46 @InjectEJB(name="PropertyDao")
47 private PropertyDaoLocal propertyDaoLocal;
48
49 @InjectEJB(name="RequestDao")
50 private RequestDaoLocal requestDaoLocal;
51
52
53
54
55 private Request request;
56
57
58
59
60 private String mimeType = "image/png";
61
62
63
64
65 private boolean cache = true;
66
67 public void setServletRequest(HttpServletRequest servletRequest) {
68 this.servletRequest = servletRequest;
69 }
70
71
72
73
74 public Request getRequest() {
75 return request;
76 }
77
78
79
80
81 public String getMimeType() {
82 return mimeType;
83 }
84
85
86
87
88 public void setCache(boolean cache) {
89 this.cache = cache;
90 }
91
92
93
94
95
96
97
98
99 @Actions({
100 @Action(
101 value = "*/original",
102 results = {
103 @Result(
104 name = "success",
105 type="stream",
106 params= { "contentType","mimeType","inputName","request.proofOfAuthorityFileInputStream"}
107 ),
108 @Result(name = "input", type="tiles", location="imageTemplate")
109 }
110 )
111 })
112 public String execute() {
113 logger.trace("execute() aufgerufen.");
114
115
116 String lastModified = propertyDaoLocal.findByKey("captcha.image.lastModified").getValue();
117
118 String since = servletRequest.getHeader("If-Modified-Since");
119 logger.info("If-Modified-Since: " + since);
120
121
122
123 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
124 Calendar gregorianCalendar = new GregorianCalendar();
125 gregorianCalendar.add(Calendar.HOUR, 12);
126 String expires = simpleDateFormat.format(gregorianCalendar.getTime());
127
128 HttpServletResponse response = ServletActionContext.getResponse();
129
130
131
132 if(cache) {
133 response.setHeader("Expires", expires);
134 response.setHeader("Last-Modified", lastModified);
135 response.setHeader("Retry-After", expires);
136 } else {
137 response.setHeader("Cache-control", "no-cache, no-store, must-revalidate");
138 response.setHeader("Pragma", "no-cache");
139 response.setHeader("Expires", "-1");
140 }
141
142 if(cache && since!=null && since.equals(lastModified)) {
143 response.setStatus(304);
144 return INPUT;
145 }
146
147 String requestUuid = ServletActionContext.getRequest().getServletPath();
148
149 logger.info("Request UUID: " + requestUuid);
150 requestUuid = requestUuid.replaceAll("/locations/request/", "");
151 requestUuid = requestUuid.replaceAll("/original.html", "");
152 logger.info("Request UUID: " + requestUuid);
153
154 try {
155 this.request = this.requestDaoLocal.findByUuid(requestUuid);
156 Tika tika = new Tika();
157 mimeType = tika.detect(new File(request.getProofOfAuthority()));
158 return SUCCESS;
159 } catch (NumberFormatException exception) {
160 addActionError(getText("request.actionError.get.numberFormatException"));
161 exception.printStackTrace();
162 return ERROR;
163 } catch (NullPointerException exception) {
164 addActionError(getText("request.actionError.get.nullPointerException"));
165 exception.printStackTrace();
166 return ERROR;
167 } catch (IOException exception) {
168 addActionError(getText("request.actionError.get.iOException"));
169 exception.printStackTrace();
170 return ERROR;
171 }
172 }
173
174 }