9d017b1aaed86d9b8db2d7141cd086855d46809a
[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 addfiltergroup(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
183     editfiltergroup(aRequest, aResponse, "", "");
184   }
185
186   public void editgroup(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
187     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
188     String id=requestParser.getParameterWithDefault("id", "");
189
190     FilterEngine.FilterGroup group = MirGlobal.abuse().getFilterEngine().getFilterGroupForId(id);
191
192     editfiltergroup(aRequest, aResponse, id, group.getName());
193   }
194
195   public void editfiltergroup(HttpServletRequest aRequest, HttpServletResponse aResponse,
196         String anId, String aName) throws ServletModuleExc {
197     try {
198       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
199
200       responseData.put("id", anId);
201       responseData.put("name", aName);
202
203       ServletHelper.generateResponse(aResponse.getWriter(), responseData, editFilterGroupTemplate);
204     }
205     catch (Throwable e) {
206       throw new ServletModuleFailure(e);
207     }
208   }
209
210   public void listfilters(HttpServletRequest aRequest, HttpServletResponse aResponse) {
211     URLBuilder urlBuilder = new URLBuilder();
212     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
213     String groupid=requestParser.getParameterWithDefault("groupid", "");
214
215     try {
216       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
217
218       urlBuilder.setValue("module", "Abuse");
219       urlBuilder.setValue("do", "listfilters");
220       urlBuilder.setValue("groupid", groupid);
221       responseData.put("thisurl", urlBuilder.getQuery());
222       responseData.put("groupid", groupid);
223
224       responseData.put("filters", MirGlobal.abuse().getFilterEngine().getFilters(groupid));
225
226       ServletHelper.generateResponse(aResponse.getWriter(), responseData, listFiltersTemplate);
227     }
228     catch (Throwable e) {
229       throw new ServletModuleFailure(e);
230     }
231   }
232
233   public void updatefiltergroup(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
234     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
235
236     String name = requestParser.getParameterWithDefault("name", "");
237     String id = requestParser.getParameterWithDefault("id", "");
238
239     try {
240         if (id.equals("")) {
241           MirGlobal.abuse().getFilterEngine().addFilterGroup(name);
242         }
243         else {
244           MirGlobal.abuse().getFilterEngine().updateFilterGroup(id, name);
245         }
246     }
247     catch (StorageObjectExc e) {
248       throw new ServletModuleFailure(e);
249     }
250
251     showfiltergroups(aRequest, aResponse);
252   }
253
254   public void showfiltergroups(HttpServletRequest aRequest, HttpServletResponse aResponse) {
255     URLBuilder urlBuilder = new URLBuilder();
256
257     try {
258       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
259
260       urlBuilder.setValue("module", "Abuse");
261       urlBuilder.setValue("do", "showfiltergroups");
262       responseData.put("thisurl", urlBuilder.getQuery());
263
264       responseData.put("filtergroups", MirGlobal.abuse().getFilterEngine().getFilterGroups());
265
266       ServletHelper.generateResponse(aResponse.getWriter(), responseData, listFilterGroupsTemplate);
267     }
268     catch (Throwable e) {
269       throw new ServletModuleFailure(e);
270     }
271   }
272
273   public void showsettings(HttpServletRequest aRequest, HttpServletResponse aResponse) {
274     URLBuilder urlBuilder = new URLBuilder();
275
276     try {
277       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
278
279       urlBuilder.setValue("module", "Abuse");
280       urlBuilder.setValue("do", "showsettings");
281
282       responseData.put("thisurl", urlBuilder.getQuery());
283
284       responseData.put("articleactions", MirGlobal.abuse().getArticleActions());
285       responseData.put("commentactions", MirGlobal.abuse().getCommentActions());
286
287       responseData.put("disableop", new Boolean(MirGlobal.abuse().getOpenPostingDisabled()));
288       responseData.put("passwordop", new Boolean(MirGlobal.abuse().getOpenPostingPassword()));
289       responseData.put("logenabled", new Boolean(MirGlobal.abuse().getLogEnabled()));
290       responseData.put("logsize", Integer.toString(MirGlobal.abuse().getLogSize()));
291       responseData.put("usecookies", new Boolean(MirGlobal.abuse().getCookieOnBlock()));
292       responseData.put("articleaction", MirGlobal.abuse().getArticleBlockAction());
293       responseData.put("commentaction", MirGlobal.abuse().getCommentBlockAction());
294
295       ServletHelper.generateResponse(aResponse.getWriter(), responseData, mainTemplate);
296     }
297     catch (Throwable e) {
298       throw new ServletModuleFailure(e);
299     }
300   }
301
302   public void savesettings(HttpServletRequest aRequest, HttpServletResponse aResponse) {
303     try {
304       HTTPRequestParser parser = new HTTPRequestParser(aRequest);
305
306       MirGlobal.abuse().setOpenPostingDisabled(parser.getParameterWithDefault("disableop", "").equals("1"));
307       MirGlobal.abuse().setOpenPostingPassword(parser.getParameterWithDefault("passwordop", "").equals("1"));
308       MirGlobal.abuse().setLogEnabled(parser.getParameterWithDefault("logenabled", "").equals("1"));
309
310       try {
311         MirGlobal.abuse().setLogSize(parser.getIntegerWithDefault("logsize", MirGlobal.abuse().getLogSize()));
312       }
313       catch (Throwable t) {
314       }
315
316       MirGlobal.abuse().setCookieOnBlock(parser.getParameterWithDefault("usecookies", "").equals("1"));
317
318       MirGlobal.abuse().setArticleBlockAction(parser.getParameter("articleaction"));
319       MirGlobal.abuse().setCommentBlockAction(parser.getParameter("commentaction"));
320
321       MirGlobal.abuse().save();
322       logAdminUsage(aRequest, "settings", "object modified");
323
324       showsettings(aRequest, aResponse);
325     }
326     catch (Throwable e) {
327       throw new ServletModuleFailure(e);
328     }
329   }
330
331   public void showlog(HttpServletRequest aRequest, HttpServletResponse aResponse) {
332     URLBuilder urlBuilder = new URLBuilder();
333
334     try {
335       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
336       urlBuilder.setValue("module", "Abuse");
337       urlBuilder.setValue("do", "showlog");
338       responseData.put("thisurl", urlBuilder.getQuery());
339
340       responseData.put("log", MirGlobal.abuse().getLog());
341
342       ServletHelper.generateResponse(aResponse.getWriter(), responseData, viewLogTemplate);
343     }
344     catch (Throwable e) {
345       throw new ServletModuleFailure(e);
346     }
347   }
348 }