5cb0ded1c790ce090d45397f28ac3d94b9c5f94e
[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 mir.servlet.AdminServletModule;
34 import mir.servlet.ServletModuleExc;
35 import mir.servlet.ServletModuleFailure;
36 import mir.storage.DatabaseExc;
37 import mir.util.HTTPRequestParser;
38 import mir.util.URLBuilder;
39 import mircoders.abuse.FilterEngine;
40 import mircoders.global.MirGlobal;
41
42 import javax.servlet.http.HttpServletRequest;
43 import javax.servlet.http.HttpServletResponse;
44 import java.util.Map;
45
46 public class ServletModuleAbuse extends AdminServletModule {
47   private String editFilterTemplate;
48   private String listFiltersTemplate;
49   private String editFilterGroupTemplate;
50   private String listFilterGroupsTemplate;
51   private String mainTemplate;
52   private String viewLogTemplate;
53
54   public ServletModuleAbuse() {
55     editFilterTemplate = getConfiguration().getString("ServletModule.Abuse.EditFilter.Template");
56     listFiltersTemplate = getConfiguration().getString("ServletModule.Abuse.ListFilters.Template");
57     editFilterGroupTemplate = getConfiguration().getString("ServletModule.Abuse.EditFilterGroup.Template");
58     listFilterGroupsTemplate = getConfiguration().getString("ServletModule.Abuse.ListFilterGroups.Template");
59     viewLogTemplate = getConfiguration().getString("ServletModule.Abuse.ViewLog.Template");
60     mainTemplate = getConfiguration().getString("ServletModule.Abuse.Main.Template");
61   }
62
63   public void defaultAction(HttpServletRequest aRequest, HttpServletResponse aResponse) {
64     showsettings(aRequest, aResponse);
65   }
66
67   public void editfilter(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
68     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
69     String id=requestParser.getParameterWithDefault("id", "");
70     String groupid=requestParser.getParameterWithDefault("groupid", "");
71
72     FilterEngine.Filter filter = MirGlobal.abuse().getFilterEngine().getFilterForId(groupid, id);
73
74     editfilter(aRequest, aResponse,
75         groupid,
76         id, filter.getType(), filter.getExpression(),
77         filter.getComment(), filter.getTag(), filter.getCommentAction(), filter.getArticleAction(), "");
78   }
79
80   public void addfilter(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
81     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
82     String groupid=requestParser.getParameterWithDefault("groupid", "");
83
84     editfilter(aRequest, aResponse, groupid, "", "", "", "", "", "", "", "");
85   }
86
87   public void editfilter(HttpServletRequest aRequest, HttpServletResponse aResponse,
88         String aGroupId, String anId, String aType, String anExpression, String aComments,
89         String aTag,
90         String aCommentAction, String anArticleAction, String anErrorMessage) throws ServletModuleExc {
91     try {
92       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
93
94       responseData.put("id", anId);
95       responseData.put("groupid", aGroupId);
96       responseData.put("type", aType);
97       responseData.put("expression", anExpression);
98       responseData.put("comments", aComments);
99       responseData.put("tag", aTag);
100       responseData.put("articleaction", anArticleAction);
101       responseData.put("commentaction", aCommentAction);
102       responseData.put("errormessage", anErrorMessage);
103
104       responseData.put("articleactions", MirGlobal.abuse().getArticleActions());
105       responseData.put("commentactions", MirGlobal.abuse().getCommentActions());
106       responseData.put("filtertypes", MirGlobal.abuse().getFilterEngine().getFilterTypes());
107
108       ServletHelper.generateResponse(aResponse.getWriter(), responseData, editFilterTemplate);
109     }
110     catch (Throwable e) {
111       throw new ServletModuleFailure(e);
112     }
113   }
114
115   public void updatefilter(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
116     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
117
118     String type=requestParser.getParameterWithDefault("type", "");
119     String id=requestParser.getParameterWithDefault("id", "");
120     String groupid=requestParser.getParameter("groupid");
121     String expression=requestParser.getParameterWithDefault("expression", "");
122     String commentaction=requestParser.getParameterWithDefault("commentaction", "");
123     String articleaction=requestParser.getParameterWithDefault("articleaction", "");
124     String comments=requestParser.getParameterWithDefault("comments", "");
125     String tag=requestParser.getParameterWithDefault("tag", "");
126
127     String errorMessage;
128
129     try {
130       if (id.equals("")) {
131         errorMessage = MirGlobal.abuse().getFilterEngine().addFilter(
132             groupid, type, expression, comments, tag,
133             articleaction, commentaction);
134         logAdminUsage(aRequest, id, "filter added");
135       }
136       else {
137         errorMessage = MirGlobal.abuse().getFilterEngine().updateFilter(
138             groupid, id, type, expression, comments, tag,
139             articleaction, commentaction);
140         logAdminUsage(aRequest, id, "filter modified");
141       }
142     }
143     catch (DatabaseExc e) {
144       throw new ServletModuleFailure(e);
145     }
146
147     if (errorMessage!=null) {
148       editfilter(aRequest, aResponse, groupid, id, type,
149           expression, comments, tag, commentaction, articleaction, errorMessage);
150     }
151     else {
152       MirGlobal.abuse().save();
153       listfilters(aRequest, aResponse);
154     }
155   }
156
157   public void movefilterup(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
158     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
159
160     String id=requestParser.getParameter("id");
161     String groupid=requestParser.getParameter("groupid");
162
163     MirGlobal.abuse().getFilterEngine().moveFilterUp(groupid, id);
164     listfilters(aRequest, aResponse);
165   }
166
167
168   public void movefilterdown(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
169     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
170
171     String id=requestParser.getParameter("id");
172     String groupid=requestParser.getParameter("groupid");
173
174     MirGlobal.abuse().getFilterEngine().moveFilterDown(groupid, id);
175     listfilters(aRequest, aResponse);
176   }
177
178   public void movefiltertop(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
179     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
180
181     String id=requestParser.getParameter("id");
182     String groupid=requestParser.getParameter("groupid");
183
184     MirGlobal.abuse().getFilterEngine().moveFilterToTop(groupid, id);
185     listfilters(aRequest, aResponse);
186   }
187
188   public void movefilterbottom(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
189     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
190
191     String id=requestParser.getParameter("id");
192     String groupid=requestParser.getParameter("groupid");
193
194     MirGlobal.abuse().getFilterEngine().moveFilterToBottom(groupid, id);
195     listfilters(aRequest, aResponse);
196   }
197
198   public void deletefilter(HttpServletRequest aRequest, HttpServletResponse aResponse) {
199     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
200
201     String id=requestParser.getParameter("id");
202     String groupid=requestParser.getParameter("groupid");
203     MirGlobal.abuse().getFilterEngine().deleteFilter(groupid, id);
204     MirGlobal.logAdminUsage(ServletHelper.getUser(aRequest), getName() + ":" + "filter:"+groupid+":"+id, "filter deleted");
205
206     listfilters(aRequest, aResponse);
207   }
208
209   public void deletefiltergroup(HttpServletRequest aRequest, HttpServletResponse aResponse) {
210     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
211
212     String groupid=requestParser.getParameter("groupid");
213     MirGlobal.abuse().getFilterEngine().deleteFilterGroup(groupid);
214
215     MirGlobal.logAdminUsage(ServletHelper.getUser(aRequest), getName() + ":" + "filtergroup:"+groupid, "filter group deleted");
216
217     showfiltergroups(aRequest, aResponse);
218   }
219
220   public void movefiltergroupup(HttpServletRequest aRequest, HttpServletResponse aResponse) {
221     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
222
223     String groupid=requestParser.getParameter("groupid");
224     MirGlobal.abuse().getFilterEngine().moveFilterGroupUp(groupid);
225
226     MirGlobal.logAdminUsage(ServletHelper.getUser(aRequest), getName() + ":" + "filtergroup:"+groupid, "filter group moved upwards");
227
228     showfiltergroups(aRequest, aResponse);
229   }
230
231   public void movefiltergroupdown(HttpServletRequest aRequest, HttpServletResponse aResponse) {
232     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
233
234     String groupid=requestParser.getParameter("groupid");
235     MirGlobal.abuse().getFilterEngine().moveFilterGroupDown(groupid);
236
237     MirGlobal.logAdminUsage(ServletHelper.getUser(aRequest), getName() + ":" + "filtergroup:"+groupid, "filter group moved downwards");
238
239     showfiltergroups(aRequest, aResponse);
240   }
241
242   public void showfilterconfiguration(HttpServletRequest aRequest, HttpServletResponse aResponse) {
243     showfiltergroups(aRequest, aResponse);
244   }
245
246   public void addfiltergroup(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
247     editfiltergroup(aRequest, aResponse, "", "");
248   }
249
250   public void editgroup(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
251     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
252     String id=requestParser.getParameterWithDefault("id", "");
253
254     FilterEngine.FilterGroup group = MirGlobal.abuse().getFilterEngine().getFilterGroupForId(id);
255
256     editfiltergroup(aRequest, aResponse, id, group.getName());
257   }
258
259   public void editfiltergroup(HttpServletRequest aRequest, HttpServletResponse aResponse,
260         String anId, String aName) throws ServletModuleExc {
261     try {
262       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
263
264       responseData.put("id", anId);
265       responseData.put("name", aName);
266
267       ServletHelper.generateResponse(aResponse.getWriter(), responseData, editFilterGroupTemplate);
268     }
269     catch (Throwable e) {
270       throw new ServletModuleFailure(e);
271     }
272   }
273
274   public void listfilters(HttpServletRequest aRequest, HttpServletResponse aResponse) {
275     URLBuilder urlBuilder = new URLBuilder();
276     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
277     String groupid=requestParser.getParameterWithDefault("groupid", "");
278
279     try {
280       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
281
282       urlBuilder.setValue("module", "Abuse");
283       urlBuilder.setValue("do", "listfilters");
284       urlBuilder.setValue("groupid", groupid);
285       responseData.put("thisurl", urlBuilder.getQuery());
286       responseData.put("groupid", groupid);
287
288       responseData.put("filters", MirGlobal.abuse().getFilterEngine().getFilters(groupid));
289
290       ServletHelper.generateResponse(aResponse.getWriter(), responseData, listFiltersTemplate);
291     }
292     catch (Throwable e) {
293       throw new ServletModuleFailure(e);
294     }
295   }
296
297   public void updatefiltergroup(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
298     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
299
300     String name = requestParser.getParameterWithDefault("name", "");
301     String id = requestParser.getParameterWithDefault("id", "");
302
303     try {
304         if (id.equals("")) {
305           MirGlobal.abuse().getFilterEngine().addFilterGroup(name);
306         }
307         else {
308           MirGlobal.abuse().getFilterEngine().updateFilterGroup(id, name);
309         }
310     }
311     catch (DatabaseExc e) {
312       throw new ServletModuleFailure(e);
313     }
314
315     showfiltergroups(aRequest, aResponse);
316   }
317
318   public void showfiltergroups(HttpServletRequest aRequest, HttpServletResponse aResponse) {
319     URLBuilder urlBuilder = new URLBuilder();
320
321     try {
322       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
323
324       urlBuilder.setValue("module", "Abuse");
325       urlBuilder.setValue("do", "showfiltergroups");
326       responseData.put("thisurl", urlBuilder.getQuery());
327
328       responseData.put("filtergroups", MirGlobal.abuse().getFilterEngine().getFilterGroups());
329
330       ServletHelper.generateResponse(aResponse.getWriter(), responseData, listFilterGroupsTemplate);
331     }
332     catch (Throwable e) {
333       throw new ServletModuleFailure(e);
334     }
335   }
336
337   public void showsettings(HttpServletRequest aRequest, HttpServletResponse aResponse) {
338     URLBuilder urlBuilder = new URLBuilder();
339
340     try {
341       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
342
343       urlBuilder.setValue("module", "Abuse");
344       urlBuilder.setValue("do", "showsettings");
345
346       responseData.put("thisurl", urlBuilder.getQuery());
347
348       responseData.put("articleactions", MirGlobal.abuse().getArticleActions());
349       responseData.put("commentactions", MirGlobal.abuse().getCommentActions());
350
351       responseData.put("disableop", new Boolean(MirGlobal.abuse().getOpenPostingDisabled()));
352       responseData.put("passwordop", new Boolean(MirGlobal.abuse().getOpenPostingPassword()));
353       responseData.put("logenabled", new Boolean(MirGlobal.abuse().getLogEnabled()));
354       responseData.put("logsize", Integer.toString(MirGlobal.abuse().getLogSize()));
355       responseData.put("usecookies", new Boolean(MirGlobal.abuse().getCookieOnBlock()));
356       responseData.put("articleaction", MirGlobal.abuse().getArticleBlockAction());
357       responseData.put("commentaction", MirGlobal.abuse().getCommentBlockAction());
358
359       ServletHelper.generateResponse(aResponse.getWriter(), responseData, mainTemplate);
360     }
361     catch (Throwable e) {
362       throw new ServletModuleFailure(e);
363     }
364   }
365
366   public void savesettings(HttpServletRequest aRequest, HttpServletResponse aResponse) {
367     try {
368       HTTPRequestParser parser = new HTTPRequestParser(aRequest);
369
370       MirGlobal.abuse().setOpenPostingDisabled(parser.getParameterWithDefault("disableop", "").equals("1"));
371       MirGlobal.abuse().setOpenPostingPassword(parser.getParameterWithDefault("passwordop", "").equals("1"));
372       MirGlobal.abuse().setLogEnabled(parser.getParameterWithDefault("logenabled", "").equals("1"));
373
374       try {
375         MirGlobal.abuse().setLogSize(parser.getIntegerWithDefault("logsize", MirGlobal.abuse().getLogSize()));
376       }
377       catch (Throwable t) {
378       }
379
380       MirGlobal.abuse().setCookieOnBlock(parser.getParameterWithDefault("usecookies", "").equals("1"));
381
382       MirGlobal.abuse().setArticleBlockAction(parser.getParameter("articleaction"));
383       MirGlobal.abuse().setCommentBlockAction(parser.getParameter("commentaction"));
384
385       MirGlobal.abuse().save();
386       logAdminUsage(aRequest, "settings", "object modified");
387
388       showsettings(aRequest, aResponse);
389     }
390     catch (Throwable e) {
391       throw new ServletModuleFailure(e);
392     }
393   }
394
395   public void showlog(HttpServletRequest aRequest, HttpServletResponse aResponse) {
396     URLBuilder urlBuilder = new URLBuilder();
397
398     try {
399       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
400       urlBuilder.setValue("module", "Abuse");
401       urlBuilder.setValue("do", "showlog");
402       responseData.put("thisurl", urlBuilder.getQuery());
403
404       responseData.put("log", MirGlobal.abuse().getLog());
405
406       ServletHelper.generateResponse(aResponse.getWriter(), responseData, viewLogTemplate);
407     }
408     catch (Throwable e) {
409       throw new ServletModuleFailure(e);
410     }
411   }
412 }