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