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