488259848416685f370a412432b88e5b421585ad
[mir.git] / source / mircoders / servlet / ServletModuleAbuse.java
1 /*
2  * Copyright (C) 2001, 2002 The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with  any library licensed under the Apache Software License,
22  * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23  * (or with modified versions of the above that use the same license as the above),
24  * and distribute linked combinations including the two.  You must obey the
25  * GNU General Public License in all respects for all of the code used other than
26  * the above mentioned libraries.  If you modify this file, you may extend this
27  * exception to your version of the file, but you are not obligated to do so.
28  * If you do not wish to do so, delete this exception statement from your version.
29  */
30
31 package mircoders.servlet;
32
33 import java.util.Locale;
34 import java.util.Map;
35
36 import javax.servlet.http.HttpServletRequest;
37 import javax.servlet.http.HttpServletResponse;
38
39 import mir.log.LoggerWrapper;
40 import mir.servlet.ServletModule;
41 import mir.servlet.ServletModuleExc;
42 import mir.servlet.ServletModuleFailure;
43 import mir.util.HTTPRequestParser;
44 import mir.util.URLBuilder;
45 import mircoders.global.Abuse;
46 import mircoders.global.MirGlobal;
47
48 public class ServletModuleAbuse extends ServletModule {
49   private static ServletModuleAbuse instance = new ServletModuleAbuse();
50   private String editFilterTemplate;
51   private String listFiltersTemplate;
52   private String mainTemplate;
53   private String viewLogTemplate;
54
55   public static ServletModule getInstance() { return instance; }
56
57   private ServletModuleAbuse() {
58     logger = new LoggerWrapper("ServletModule.Abuse");
59     defaultAction = "showsettings";
60
61     editFilterTemplate = configuration.getString("ServletModule.Abuse.EditFilter.Template");
62     listFiltersTemplate = configuration.getString("ServletModule.Abuse.ListFilters.Template");
63     viewLogTemplate = configuration.getString("ServletModule.Abuse.ViewLog.Template");
64     mainTemplate = configuration.getString("ServletModule.Abuse.Main.Template");
65   }
66
67   public void edit(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
68     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
69     String id=requestParser.getParameterWithDefault("id", "");
70
71     if (id.equals("")) {
72       editfilter(aRequest, aResponse, "", "", "", "", "", "", "");
73     }
74     else {
75       Abuse.FilterRule filter = MirGlobal.abuse().getFilter(id);
76       if (filter==null)
77         throw new ServletModuleExc("Filter not found");
78
79       editfilter(aRequest, aResponse, filter.getId(), filter.getType(), filter.getExpression(), filter.getComments(), filter.getCommentAction(), filter.getArticleAction(), "");
80     }
81   }
82
83   public void editfilter(HttpServletRequest aRequest, HttpServletResponse aResponse,
84         String anId, String aType, String anExpression, String aComments,
85         String aCommentAction, String anArticleAction, String anErrorMessage) throws ServletModuleExc {
86     try {
87       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
88
89       responseData.put("id", anId);
90       responseData.put("type", aType);
91       responseData.put("expression", anExpression);
92       responseData.put("comments", aComments);
93       responseData.put("articleaction", anArticleAction);
94       responseData.put("commentaction", aCommentAction);
95       responseData.put("errormessage", anErrorMessage);
96
97       responseData.put("articleactions", MirGlobal.abuse().getArticleActions());
98       responseData.put("commentactions", MirGlobal.abuse().getCommentActions());
99       responseData.put("filtertypes", MirGlobal.abuse().getFilterTypes());
100
101       ServletHelper.generateResponse(aResponse.getWriter(), responseData, editFilterTemplate);
102     }
103     catch (Throwable e) {
104       throw new ServletModuleFailure(e);
105     }
106   }
107
108   public void updatefilter(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
109     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
110
111     String type=requestParser.getParameterWithDefault("type", "");
112     String id=requestParser.getParameterWithDefault("id", "");
113     String expression=requestParser.getParameterWithDefault("expression", "");
114     String commentaction=requestParser.getParameterWithDefault("commentaction", "");
115     String articleaction=requestParser.getParameterWithDefault("articleaction", "");
116     String comments=requestParser.getParameterWithDefault("comments", "");
117
118     String errorMessage;
119
120     if (id.equals("")) {
121       errorMessage = MirGlobal.abuse().addFilter(type, expression,comments, commentaction, articleaction);
122       logAdminUsage(aRequest, "?", "object added");
123     }
124     else {
125       errorMessage = MirGlobal.abuse().setFilter(id, type, expression, comments, commentaction, articleaction);
126       logAdminUsage(aRequest, id, "object modified");
127     }
128
129     if (errorMessage!=null) {
130       editfilter(aRequest, aResponse, id, type, expression, comments, commentaction, articleaction, errorMessage);
131     }
132     else {
133       MirGlobal.abuse().save();
134       showfilters(aRequest, aResponse);
135     }
136   }
137
138   public void delete(HttpServletRequest aRequest, HttpServletResponse aResponse) {
139     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
140
141     String id=requestParser.getParameterWithDefault("id", "");
142     MirGlobal.abuse().deleteFilter(id);
143     logAdminUsage(aRequest, id, "object deleted");
144
145     MirGlobal.abuse().save();
146
147     showfilters(aRequest, aResponse);
148   }
149
150   public void moveup(HttpServletRequest aRequest, HttpServletResponse aResponse) {
151     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
152
153     String id=requestParser.getParameterWithDefault("id", "");
154     MirGlobal.abuse().moveFilterUp(id);
155
156     MirGlobal.abuse().save();
157     logAdminUsage(aRequest, id, "object moved upwards");
158
159     showfilters(aRequest, aResponse);
160   }
161
162   public void movedown(HttpServletRequest aRequest, HttpServletResponse aResponse) {
163     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
164
165     String id=requestParser.getParameterWithDefault("id", "");
166     MirGlobal.abuse().moveFilterDown(id);
167     logAdminUsage(aRequest, id, "object moved downwards");
168
169     MirGlobal.abuse().save();
170
171     showfilters(aRequest, aResponse);
172   }
173
174   public void movetop(HttpServletRequest aRequest, HttpServletResponse aResponse) {
175     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
176
177     String id=requestParser.getParameterWithDefault("id", "");
178     MirGlobal.abuse().moveFilterToTop(id);
179
180     MirGlobal.abuse().save();
181     logAdminUsage(aRequest, id, "object moved to the top");
182
183     showfilters(aRequest, aResponse);
184   }
185
186   public void movebottom(HttpServletRequest aRequest, HttpServletResponse aResponse) {
187     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
188
189     String id=requestParser.getParameterWithDefault("id", "");
190     MirGlobal.abuse().moveFilterToBottom(id);
191
192     MirGlobal.abuse().save();
193     logAdminUsage(aRequest, id, "object moved to the bottom");
194
195     showfilters(aRequest, aResponse);
196   }
197
198   public void add(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
199     editfilter(aRequest, aResponse, "", "", "", "", "", "", "");
200   }
201
202   public void showfilters(HttpServletRequest aRequest, HttpServletResponse aResponse) {
203     URLBuilder urlBuilder = new URLBuilder();
204
205     try {
206       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
207
208       urlBuilder.setValue("module", "Abuse");
209       urlBuilder.setValue("do", "showfilters");
210       responseData.put("thisurl", urlBuilder.getQuery());
211
212       responseData.put("filters", MirGlobal.abuse().getFilters());
213
214       ServletHelper.generateResponse(aResponse.getWriter(), responseData, listFiltersTemplate);
215     }
216     catch (Throwable e) {
217       throw new ServletModuleFailure(e);
218     }
219   }
220
221   public void showsettings(HttpServletRequest aRequest, HttpServletResponse aResponse) {
222     URLBuilder urlBuilder = new URLBuilder();
223
224     try {
225       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
226
227       urlBuilder.setValue("module", "Abuse");
228       urlBuilder.setValue("do", "showsettings");
229
230       responseData.put("thisurl", urlBuilder.getQuery());
231
232       responseData.put("articleactions", MirGlobal.abuse().getArticleActions());
233       responseData.put("commentactions", MirGlobal.abuse().getCommentActions());
234
235       responseData.put("disableop", new Boolean(MirGlobal.abuse().getOpenPostingDisabled()));
236       responseData.put("passwordop", new Boolean(MirGlobal.abuse().getOpenPostingPassword()));
237       responseData.put("logenabled", new Boolean(MirGlobal.abuse().getLogEnabled()));
238       responseData.put("logsize", Integer.toString(MirGlobal.abuse().getLogSize()));
239       responseData.put("usecookies", new Boolean(MirGlobal.abuse().getCookieOnBlock()));
240       responseData.put("articleaction", MirGlobal.abuse().getArticleBlockAction());
241       responseData.put("commentaction", MirGlobal.abuse().getCommentBlockAction());
242
243       ServletHelper.generateResponse(aResponse.getWriter(), responseData, mainTemplate);
244     }
245     catch (Throwable e) {
246       throw new ServletModuleFailure(e);
247     }
248   }
249
250   public void savesettings(HttpServletRequest aRequest, HttpServletResponse aResponse) {
251     try {
252       HTTPRequestParser parser = new HTTPRequestParser(aRequest);
253
254       MirGlobal.abuse().setOpenPostingDisabled(parser.getParameterWithDefault("disableop", "").equals("1"));
255       MirGlobal.abuse().setOpenPostingPassword(parser.getParameterWithDefault("passwordop", "").equals("1"));
256       MirGlobal.abuse().setLogEnabled(parser.getParameterWithDefault("logenabled", "").equals("1"));
257
258       try {
259         MirGlobal.abuse().setLogSize(parser.getIntegerWithDefault("logsize", MirGlobal.abuse().getLogSize()));
260       }
261       catch (Throwable t) {
262       }
263
264       MirGlobal.abuse().setCookieOnBlock(parser.getParameterWithDefault("usecookies", "").equals("1"));
265
266       MirGlobal.abuse().setArticleBlockAction(parser.getParameter("articleaction"));
267       MirGlobal.abuse().setCommentBlockAction(parser.getParameter("commentaction"));
268
269       MirGlobal.abuse().save();
270       logAdminUsage(aRequest, "settings", "object modified");
271
272       showsettings(aRequest, aResponse);
273     }
274     catch (Throwable e) {
275       throw new ServletModuleFailure(e);
276     }
277   }
278
279   public void showlog(HttpServletRequest aRequest, HttpServletResponse aResponse) {
280     URLBuilder urlBuilder = new URLBuilder();
281
282     try {
283       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
284       urlBuilder.setValue("module", "Abuse");
285       urlBuilder.setValue("do", "showlog");
286       responseData.put("thisurl", urlBuilder.getQuery());
287
288       responseData.put("log", MirGlobal.abuse().getLog());
289
290       ServletHelper.generateResponse(aResponse.getWriter(), responseData, viewLogTemplate);
291     }
292     catch (Throwable e) {
293       throw new ServletModuleFailure(e);
294     }
295   }
296 }