Source code: org/alicebot/server/core/responder/HTMLResponder.java
1 // Decompiled by Jad v1.5.8c. Copyright 2001 Pavel Kouznetsov.
2 // Jad home page: http://www.geocities.com/kpdus/jad.html
3 // Decompiler options: packimports(3)
4
5 package org.alicebot.server.core.responder;
6
7 import java.io.*;
8 import java.util.*;
9 import javax.servlet.http.*;
10 import org.alicebot.server.core.*;
11 import org.alicebot.server.core.logging.Log;
12 import org.alicebot.server.core.util.SuffixFilenameFilter;
13 import org.alicebot.server.core.util.Trace;
14
15 // Referenced classes of package org.alicebot.server.core.responder:
16 // AbstractMarkupResponder
17
18 public class HTMLResponder extends AbstractMarkupResponder
19 {
20
21 public HTMLResponder(String s, String s1)
22 throws IOException
23 {
24 super(s);
25 if(s1.equals(""))
26 {
27 parseTemplate(chatTemplatePath);
28 } else
29 {
30 String s2 = (String)templates.get(s1);
31 if(s2 != null)
32 parseTemplate(s2);
33 else
34 parseTemplate(chatTemplatePath);
35 }
36 }
37
38 public static String loginRequest()
39 {
40 return loginRequest("", "");
41 }
42
43 public static String loginRequest(String s, String s1)
44 {
45 if(loginTemplate != null)
46 {
47 StringBuffer stringbuffer = new StringBuffer();
48 StringBuffer stringbuffer1;
49 for(ListIterator listiterator = loginTemplate.listIterator(0); listiterator.hasNext(); stringbuffer.append(stringbuffer1.toString()))
50 {
51 String s2 = (String)listiterator.next();
52 stringbuffer1 = new StringBuffer(s2);
53 int i = 0;
54 if((i = s2.indexOf("name=\"user\"")) != -1 && (i = s2.indexOf("value=\"\"")) != -1)
55 stringbuffer1.replace(i + 6, i + 7, "\"" + s + "\"");
56 if((i = s2.indexOf("name=\"password\"")) != -1 && (i = s2.indexOf("value=\"\"")) != -1)
57 stringbuffer1.replace(i + 6, i + 7, "\"" + s1 + "\"");
58 }
59
60 return stringbuffer.toString();
61 } else
62 {
63 return "";
64 }
65 }
66
67 public static String registerRequest()
68 {
69 StringBuffer stringbuffer = new StringBuffer("");
70 if(registerTemplate != null)
71 {
72 for(ListIterator listiterator = registerTemplate.listIterator(0); listiterator.hasNext(); stringbuffer.append((String)listiterator.next()));
73 return stringbuffer.toString();
74 } else
75 {
76 return "";
77 }
78 }
79
80 public static String changePasswordRequest()
81 {
82 if(changePasswordTemplate != null)
83 {
84 StringBuffer stringbuffer = new StringBuffer("");
85 for(ListIterator listiterator = changePasswordTemplate.listIterator(0); listiterator.hasNext(); stringbuffer.append((String)listiterator.next()));
86 return stringbuffer.toString();
87 } else
88 {
89 return "";
90 }
91 }
92
93 public String authenticate(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, String s)
94 {
95 int i = 0;
96 Cookie acookie[] = httpservletrequest.getCookies();
97 boolean flag = false;
98 HttpSession httpsession = httpservletrequest.getSession(true);
99 int j = acookie.length;
100 for(int k = 0; k < j; k++)
101 {
102 if(acookie[k].getName().equals("alicebot_user"))
103 {
104 user = acookie[k].getValue();
105 flag = true;
106 }
107 if(acookie[k].getName().equals("alicebot_password"))
108 password = acookie[k].getValue();
109 }
110
111 String s1 = httpservletrequest.getParameter("user");
112 String s2 = httpservletrequest.getParameter("password");
113 String s3 = httpservletrequest.getParameter("oldPassword");
114 String s4 = httpservletrequest.getParameter("password1");
115 if(parameterEquals(httpservletrequest, "login", "yes"))
116 {
117 i |= 8;
118 i |= 4;
119 } else
120 if(parameterEquals(httpservletrequest, "change-password", "yes"))
121 {
122 i |= 0x20;
123 i |= 1;
124 } else
125 if(parameterEquals(httpservletrequest, "checkauth", "auth"))
126 {
127 i |= 8;
128 i |= 1;
129 } else
130 if(parameterEquals(httpservletrequest, "register", "yes"))
131 {
132 i |= 0x10;
133 i |= 4;
134 } else
135 if(parameterEquals(httpservletrequest, "register", "auth"))
136 {
137 i |= 0x10;
138 i |= 1;
139 } else
140 if(flag)
141 {
142 if(ActiveMultiplexor.getInstance().checkUser(user, password, SECRET_KEY, botid))
143 i |= 0x80;
144 else
145 if(makeNewCookies(httpservletresponse))
146 {
147 Trace.devinfo("Found invalid cookie but created new one because autocookie is on.");
148 i |= 0x80;
149 } else
150 {
151 Log.userinfo("Server error: Could not create new user using autocookie.", Log.ERROR);
152 return loginRequest();
153 }
154 } else
155 if(autocookie)
156 {
157 if(makeNewCookies(httpservletresponse))
158 {
159 i |= 0x80;
160 } else
161 {
162 Log.userinfo("Server error: Could not create new user using autocookie.", Log.ERROR);
163 return loginRequest();
164 }
165 } else
166 {
167 return loginRequest();
168 }
169 if((i & 1) == 1)
170 if(s1 != null)
171 {
172 if(s2 != null)
173 {
174 if((i & 8) == 8)
175 i |= 2;
176 else
177 if(s4 != null)
178 {
179 if((i & 0x10) == 16)
180 {
181 if(s2.equals(s4))
182 i |= 2;
183 else
184 return "<p>Invalid user id or password.</p>" + registerRequest();
185 } else
186 if((i & 0x20) == 32)
187 if(s2.equals(s3))
188 i |= 2;
189 else
190 return "<p>Password mismatch.</p>" + changePasswordRequest();
191 } else
192 {
193 i |= 4;
194 }
195 } else
196 {
197 i |= 4;
198 }
199 } else
200 {
201 i |= 4;
202 }
203 if((i & 2) == 2)
204 {
205 if((i & 8) == 8)
206 {
207 if(ActiveMultiplexor.getInstance().checkUser(s1, s2, SECRET_KEY, botid))
208 {
209 Cookie cookie = new Cookie("alicebot_user", s1);
210 Cookie cookie2 = new Cookie("alicebot_password", s2);
211 cookie.setMaxAge(0xf4240);
212 cookie2.setMaxAge(0xf4240);
213 httpservletresponse.addCookie(cookie);
214 httpservletresponse.addCookie(cookie2);
215 httpsession.setAttribute("alicebot_user", user);
216 i |= 0x100;
217 } else
218 {
219 return "<p>Invalid user id or password.</p>" + loginRequest();
220 }
221 } else
222 if((i & 0x20) == 32)
223 {
224 if(ActiveMultiplexor.getInstance().checkUser(user, s3, SECRET_KEY, botid))
225 {
226 Cookie cookie1 = new Cookie("alicebot_password", s2);
227 cookie1.setMaxAge(0xf4240);
228 httpservletresponse.addCookie(cookie1);
229 i |= 0x100;
230 } else
231 {
232 return "<p>Invalid user id or password.</p>" + loginRequest();
233 }
234 } else
235 if((i & 0x10) == 16)
236 if(ActiveMultiplexor.getInstance().createUser(s1, s2, SECRET_KEY, botid))
237 i |= 0x100;
238 else
239 return "<p>User id already exists.</p>" + registerRequest();
240 } else
241 if((i & 4) == 4)
242 {
243 if((i & 8) == 8)
244 return loginRequest();
245 if((i & 0x10) == 16)
246 return registerRequest();
247 if((i & 0x20) == 32)
248 return changePasswordRequest();
249 }
250 if((i & 0x80) == 128)
251 {
252 httpsession.setAttribute("alicebot_user", user);
253 return null;
254 }
255 if((i & 0x100) == 256)
256 {
257 if((i & 8) == 8)
258 {
259 httpsession.setAttribute("alicebot_user", user);
260 return null;
261 }
262 if((i & 0x10) == 16)
263 return "<p>Successfully registered.</p>" + loginRequest(s1, s2);
264 if((i & 0x20) == 16)
265 return "<p>Successfully changed password.</p>" + loginRequest(s1, s2);
266 else
267 return "<p>Developer error. Please login.</p>" + loginRequest();
268 } else
269 {
270 return "<p>Developer error. Please login.</p>" + loginRequest();
271 }
272 }
273
274 private static boolean parameterEquals(HttpServletRequest httpservletrequest, String s, String s1)
275 {
276 String s2 = httpservletrequest.getParameter(s);
277 if(s2 != null)
278 return s2.equals(s1);
279 else
280 return false;
281 }
282
283 private boolean makeNewCookies(HttpServletResponse httpservletresponse)
284 {
285 StringBuffer stringbuffer = new StringBuffer(17);
286 StringBuffer stringbuffer1 = new StringBuffer(10);
287 stringbuffer.append("webuser");
288 long l = System.currentTimeMillis();
289 stringbuffer.append(l);
290 stringbuffer1.append(l);
291 for(int j = 6; --j > 0;)
292 {
293 int i = (int)(Math.random() * 5D);
294 stringbuffer.append(i);
295 stringbuffer1.append(i);
296 }
297
298 user = stringbuffer.toString();
299 password = stringbuffer1.toString();
300 Cookie cookie = new Cookie("alicebot_user", user);
301 Cookie cookie1 = new Cookie("alicebot_password", password);
302 cookie.setMaxAge(0xf4240);
303 cookie1.setMaxAge(0xf4240);
304 httpservletresponse.addCookie(cookie);
305 httpservletresponse.addCookie(cookie1);
306 return ActiveMultiplexor.getInstance().createUser(user, password, SECRET_KEY, botid);
307 }
308
309 private static final SuffixFilenameFilter htmlFilenameFilter;
310 private static HashMap templates;
311 private static final String templatesDirectoryName;
312 private static String chatTemplatePath;
313 private static final String registerTemplatePath;
314 private static final String loginTemplatePath;
315 private static final String changePasswordTemplatePath;
316 private static boolean requirelogin = Boolean.valueOf(Globals.getProperty("programd.httpserver.requirelogin", "false")).booleanValue();
317 private static boolean autocookie = Boolean.valueOf(Globals.getProperty("programd.httpserver.autocookie", "true")).booleanValue();
318 private static LinkedList registerTemplate;
319 private static LinkedList loginTemplate;
320 private static LinkedList changePasswordTemplate;
321 private static final String badUserIDOrPasswordMessage = "<p>Invalid user id or password.</p>";
322 private static final String passwordMismatchMessage = "<p>Password mismatch.</p>";
323 private static final String userAlreadyExistsMessage = "<p>User id already exists.</p>";
324 private static final String successfulRegistrationMessage = "<p>Successfully registered.</p>";
325 private static final String successfulPasswordChangeMessage = "<p>Successfully changed password.</p>";
326 private static final String developerErrorMessage = "<p>Developer error. Please login.</p>";
327 private static String SECRET_KEY;
328 private static final int QUALIFY = 1;
329 private static final int DO = 2;
330 private static final int SEND_FORM = 4;
331 private static final int LOGIN = 8;
332 private static final int REGISTER = 16;
333 private static final int CHANGE_PASSWORD = 32;
334 private static final int GO_USER = 128;
335 private static final int PROCESS_OK = 256;
336 private static final int BAD_PASSWORD = 512;
337 private static final int PASSWORD_MISMATCH = 1024;
338 public static final String USER_COOKIE_NAME = "alicebot_user";
339 public static final String PASSWORD_COOKIE_NAME = "alicebot_password";
340 private static String user;
341 private static String password;
342
343 static
344 {
345 htmlFilenameFilter = new SuffixFilenameFilter(new String[] {
346 ".html", ".htm", ".data", ".php"
347 });
348 templatesDirectoryName = Globals.getProperty("programd.responder.html.template.directory", "templates" + File.separator + "html");
349 chatTemplatePath = templatesDirectoryName + File.separator + Globals.getProperty("programd.responder.html.template.chat-default", "chat.html");
350 registerTemplatePath = templatesDirectoryName + File.separator + Globals.getProperty("programd.responder.html.template.register", "register.html");
351 loginTemplatePath = templatesDirectoryName + File.separator + Globals.getProperty("programd.responder.html.template.login", "login.html");
352 changePasswordTemplatePath = templatesDirectoryName + File.separator + Globals.getProperty("programd.responder.html.template.change-password", "change-password.html");
353 registerTemplate = AbstractMarkupResponder.loadTemplate(registerTemplatePath);
354 loginTemplate = AbstractMarkupResponder.loadTemplate(loginTemplatePath);
355 changePasswordTemplate = AbstractMarkupResponder.loadTemplate(changePasswordTemplatePath);
356 if(SECRET_KEY == null)
357 try
358 {
359 BufferedReader bufferedreader = new BufferedReader(new FileReader("secret.key"));
360 SECRET_KEY = bufferedreader.readLine();
361 }
362 catch(FileNotFoundException filenotfoundexception)
363 {
364 Trace.userinfo("Could not find secret.key file!");
365 SECRET_KEY = "";
366 }
367 catch(IOException ioexception)
368 {
369 Trace.userinfo("I/O error reading secret.key file!");
370 SECRET_KEY = "";
371 }
372 templates = AbstractMarkupResponder.registerTemplates(templatesDirectoryName, htmlFilenameFilter);
373 }
374 }