KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > mvnforum > user > MemberWebHandler


1 /*
2  * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/user/MemberWebHandler.java,v 1.88 2006/04/14 17:05:27 minhnn Exp $
3  * $Author: minhnn $
4  * $Revision: 1.88 $
5  * $Date: 2006/04/14 17:05:27 $
6  *
7  * ====================================================================
8  *
9  * Copyright (C) 2002-2006 by MyVietnam.net
10  *
11  * All copyright notices regarding mvnForum MUST remain
12  * intact in the scripts and in the outputted HTML.
13  * The "powered by" text/logo with a link back to
14  * http://www.mvnForum.com and http://www.MyVietnam.net in
15  * the footer of the pages MUST remain visible when the pages
16  * are viewed on the internet or intranet.
17  *
18  * This program is free software; you can redistribute it and/or modify
19  * it under the terms of the GNU General Public License as published by
20  * the Free Software Foundation; either version 2 of the License, or
21  * any later version.
22  *
23  * This program is distributed in the hope that it will be useful,
24  * but WITHOUT ANY WARRANTY; without even the implied warranty of
25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26  * GNU General Public License for more details.
27  *
28  * You should have received a copy of the GNU General Public License
29  * along with this program; if not, write to the Free Software
30  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31  *
32  * Support can be obtained from support forums at:
33  * http://www.mvnForum.com/mvnforum/index
34  *
35  * Correspondence and Marketing Questions can be sent to:
36  * info at MyVietnam net
37  *
38  * @author: Minh Nguyen
39  * @author: Mai Nguyen
40  */

41 package com.mvnforum.user;
42
43 import java.io.*;
44 import java.sql.Date JavaDoc;
45 import java.sql.Timestamp JavaDoc;
46 import java.util.*;
47
48 import javax.mail.MessagingException JavaDoc;
49 import javax.servlet.http.HttpServletRequest JavaDoc;
50 import javax.servlet.http.HttpServletResponse JavaDoc;
51
52 import net.myvietnam.mvncore.exception.*;
53 import net.myvietnam.mvncore.filter.DisableHtmlTagFilter;
54 import net.myvietnam.mvncore.interceptor.InterceptorService;
55 import net.myvietnam.mvncore.security.*;
56 import net.myvietnam.mvncore.service.BinaryStorage;
57 import net.myvietnam.mvncore.util.*;
58 import net.myvietnam.mvncore.web.*;
59 import net.myvietnam.mvncore.web.fileupload.FileItem;
60 import net.myvietnam.mvncore.web.fileupload.FileUploadException;
61
62 import org.apache.commons.io.IOUtils;
63 import org.apache.commons.logging.Log;
64 import org.apache.commons.logging.LogFactory;
65
66 import com.mvnforum.*;
67 import com.mvnforum.auth.*;
68 import com.mvnforum.common.SendMailUtil;
69 import com.mvnforum.db.*;
70 import com.mvnforum.search.member.MemberIndexer;
71
72 import freemarker.template.*;
73
74 public class MemberWebHandler {
75
76     private static Log log = LogFactory.getLog(MemberWebHandler.class);
77
78     private OnlineUserManager onlineUserManager = OnlineUserManager.getInstance();
79
80     public MemberWebHandler() {
81     }
82
83     public void prepareAdd(GenericRequest request)
84         throws AssertionException, DatabaseException, AuthenticationException {
85
86         Locale locale = I18nUtil.getLocaleInRequest(request);
87
88         if (MVNForumConfig.getEnableNewMember() == false) {
89             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.cannot_register.new_member_is_disabled");
90             throw new AssertionException(localizedMessage);
91             //throw new AssertionException("Cannot register new member because NEW_MEMBER feature is disabled by administrator.");
92
}
93
94         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
95         if (MVNForumConfig.getEnableCaptcha()) {
96             onlineUser.buildNewCaptcha();
97         }
98     }
99
100     public void processAdd(GenericRequest request, GenericResponse response)
101         throws BadInputException, ObjectNotFoundException, CreateException, DatabaseException, InterceptorException,
102         DuplicateKeyException, ForeignKeyNotFoundException, AssertionException, FloodException, AssertionException,
103         DatabaseException, AuthenticationException {
104
105         Locale locale = I18nUtil.getLocaleInRequest(request);
106         if (MVNForumConfig.getEnableNewMember() == false) {
107             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.cannot_register.new_member_is_disabled");
108             throw new AssertionException(localizedMessage);
109             //throw new AssertionException("Cannot register new member because NEW_MEMBER feature is disabled by administrator.");
110
}
111
112         // use for the captcha feature
113
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
114
115         MyUtil.saveVNTyperMode(request, response);
116
117         String JavaDoc currentIP = request.getRemoteAddr();
118         try {
119             FloodControl.ensureNotReachMaximum(MVNForumGlobal.FLOOD_ID_NEW_MEMBER, currentIP);
120         } catch (FloodException fe) {
121             //throw new FloodException("You have reached the maximum number of the registering actions for this page. Please try this page later. This is to prevent forum from being flooded.");
122
Integer JavaDoc maxRegisters = new Integer JavaDoc(FloodControl.getActionsPerHour(MVNForumGlobal.FLOOD_ID_NEW_MEMBER));
123             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.FloodException.register_too_many_times", new Object JavaDoc[] { maxRegisters });
124             throw new FloodException(localizedMessage);
125         }
126         Timestamp JavaDoc now = DateUtil.getCurrentGMTTimestamp();
127
128         String JavaDoc memberName = GenericParamUtil.getParameterSafe(request, "MemberName", true);// check good name
129
/** @todo move to a name filter */
130         if ( memberName.equalsIgnoreCase(MVNForumConfig.getDefaultGuestName()) ||
131              memberName.equalsIgnoreCase("Guest") ||
132              memberName.equalsIgnoreCase("Administrator") ||
133              memberName.equalsIgnoreCase("Moderator") ) {
134             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_register_with_reserved_name", new Object JavaDoc[] {memberName});
135             throw new BadInputException(localizedMessage);
136             //throw new BadInputException("Cannot register member with a reserved name : " + memberName);
137
}
138         StringUtil.checkGoodName(memberName);
139         InterceptorService.getInstance().validateLoginID(memberName);
140         if (memberName.length() > MVNForumGlobal.MAX_MEMBER_LOGIN_LENGTH) {
141             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.member_name_too_long");
142             throw new BadInputException(localizedMessage);
143             //throw new BadInputException("MemberName cannot be longer than 30 characters.");
144
}
145
146         String JavaDoc memberPassword1 = GenericParamUtil.getParameterPassword(request, "MemberMatkhau", 3, 0);
147         String JavaDoc memberPassword2 = GenericParamUtil.getParameterPassword(request, "MemberMatkhauConfirm", 3, 0);
148         if (!memberPassword1.equals(memberPassword2)) {
149             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.confirmed_password_is_not_match");
150             throw new BadInputException(localizedMessage);
151             //throw new BadInputException("Password and confirmed password are not the same, please try again.");
152
}
153         String JavaDoc memberPassword = Encoder.getMD5_Base64(memberPassword1);
154
155         String JavaDoc memberEmail = GenericParamUtil.getParameterEmail(request, "MemberEmail");
156         String JavaDoc memberEmailConfirm = GenericParamUtil.getParameterEmail(request, "MemberEmailConfirm");
157         if (!memberEmail.equals(memberEmailConfirm)) {
158             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.confirmed_email_is_not_match");
159             throw new BadInputException(localizedMessage);
160             //throw new BadInputException("Email and confirmed email are not the same, please try again.");
161
}
162         String JavaDoc memberFirstEmail = memberEmail;
163         if (memberEmail.length() > MVNForumGlobal.MAX_MEMBER_EMAIL_LENGTH) {
164             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.member_email_too_long");
165             throw new BadInputException(localizedMessage);
166             //throw new BadInputException("MemberEmail cannot be longer than 60 characters.");
167
}
168         InterceptorService.getInstance().validateMail(memberFirstEmail);
169
170         int memberEmailVisible = GenericParamUtil.getParameterBoolean(request, "MemberEmailVisible")? MemberBean.MEMBER_EMAIL_VISIBLE : MemberBean.MEMBER_EMAIL_INVISIBLE;
171         int memberNameVisible = GenericParamUtil.getParameterBoolean(request, "MemberNameVisible") ? MemberBean.MEMBER_NAME_VISIBLE : MemberBean.MEMBER_NAME_INVISIBLE;
172         String JavaDoc memberFirstIP = currentIP;
173         String JavaDoc memberLastIP = currentIP;
174         Timestamp JavaDoc memberCreationDate= now;
175         Timestamp JavaDoc memberModifiedDate= now;
176         Timestamp JavaDoc memberLastLogon = now;// @todo review and support it later
177
int memberOption = 0;//@todo review and support it later
178
int memberStatus = MemberBean.MEMBER_STATUS_ENABLE;// @todo review and support it later, ex: should it be active or not?
179
String JavaDoc memberActivateCode = "";// not activated
180
int memberMessageOption = 0;// @todo review and support it later
181
int memberPostsPerPage = GenericParamUtil.getParameterInt(request, "MemberPostsPerPage", 10);
182         if (memberPostsPerPage < 5) {
183             memberPostsPerPage = 5;
184         }
185         String JavaDoc memberTitle = "";
186         double memberTimeZone = GenericParamUtil.getParameterTimeZone(request, "MemberTimeZone");
187         String JavaDoc memberSkin = "";
188         String JavaDoc memberLanguage = GenericParamUtil.getParameterSafe(request, "MemberLanguage", false);
189         String JavaDoc memberFirstname = GenericParamUtil.getParameterSafe(request, "MemberFirstname", true);
190         String JavaDoc memberLastname = GenericParamUtil.getParameterSafe(request, "MemberLastname", true);
191         int memberGender = GenericParamUtil.getParameterBoolean(request, "MemberGender") ? 1 : 0;
192
193         //Date memberBirthday = GenericParamUtil.getParameterDate(request, "MemberBirthday");
194
Date JavaDoc memberBirthday = GenericParamUtil.getParameterDate(request, "day", "month", "year");
195         /** @todo : rewrite this code */
196         /*
197         long nowtime = System.currentTimeMillis();
198         long oldest = nowtime - 100*DateUtil.YEAR;
199         long youngest = nowtime - 10*DateUtil.YEAR;
200         long age = (nowtime - memberBirthday.getTime())/DateUtil.YEAR;
201         if (memberBirthday.getTime() > youngest || memberBirthday.getTime() < oldest) {
202             log.debug("age = " + age + " date = " + memberBirthday + " gettime = " + memberBirthday.getTime());
203             throw new BadInputException("Your age is not allow: " + age);
204         }*/

205
206         String JavaDoc memberAddress = GenericParamUtil.getParameterSafe(request, "MemberAddress", false);
207         String JavaDoc memberCity = GenericParamUtil.getParameterSafe(request, "MemberCity", false);
208         String JavaDoc memberState = GenericParamUtil.getParameterSafe(request, "MemberState", false);
209         String JavaDoc memberCountry = GenericParamUtil.getParameterSafe(request, "MemberCountry", false);
210         String JavaDoc memberPhone = GenericParamUtil.getParameterSafe(request, "MemberPhone", false);
211         String JavaDoc memberMobile = GenericParamUtil.getParameterSafe(request, "MemberMobile", false);
212         String JavaDoc memberFax = GenericParamUtil.getParameterSafe(request, "MemberFax", false);
213         String JavaDoc memberCareer = GenericParamUtil.getParameterSafe(request, "MemberCareer", false);
214         String JavaDoc memberHomepage = GenericParamUtil.getParameterUrl(request, "MemberHomepage");
215         String JavaDoc memberYahoo = GenericParamUtil.getParameterSafe(request, "MemberYahoo", false);
216         String JavaDoc memberAol = GenericParamUtil.getParameterSafe(request, "MemberAol", false);
217         String JavaDoc memberIcq = GenericParamUtil.getParameterSafe(request, "MemberIcq", false);
218         String JavaDoc memberMsn = GenericParamUtil.getParameterSafe(request, "MemberMsn", false);
219         String JavaDoc memberCoolLink1 = GenericParamUtil.getParameterUrl(request, "MemberCoolLink1");
220         String JavaDoc memberCoolLink2 = GenericParamUtil.getParameterUrl(request, "MemberCoolLink2");
221
222         // Now check the captcha
223
if (MVNForumConfig.getEnableCaptcha()) {
224             String JavaDoc captchaResponse = GenericParamUtil.getParameterSafe(request, "CaptchaResponse", false);
225             onlineUser.ensureCorrectCaptchaResponse(captchaResponse);
226         }
227         Timestamp JavaDoc memberExpireDate = memberCreationDate;// equal Creation Date mean no expiration
228
if (MVNForumConfig.getEnableCompany()) {
229             memberExpireDate = DateUtil.getCurrentGMTTimestampExpiredDay(MVNForumConfig.getExpireDateTutor());
230         }
231
232         DAOFactory.getMemberDAO().create(memberName, memberPassword, memberFirstEmail,
233                                    memberEmail, memberEmailVisible, memberNameVisible,
234                                    memberFirstIP, memberLastIP, 0/*memberViewCount*/,
235                                    0/*memberPostCount*/, memberCreationDate, memberModifiedDate, memberExpireDate,
236                                    memberLastLogon, memberOption, memberStatus,
237                                    memberActivateCode, ""/*memberTempPassword*/, 0/*memberMessageCount*/,
238                                    memberMessageOption, memberPostsPerPage, 0/*memberWarnCount*/,
239                                    0/*memberVoteCount*/, 0/*memberVoteTotalStars*/, 0/*memberRewardPoints*/,
240                                    memberTitle, memberTimeZone, ""/*memberSignature*/,
241                                    ""/*memberAvatar*/, memberSkin, memberLanguage,
242                                    memberFirstname, memberLastname, memberGender,
243                                    memberBirthday, memberAddress, memberCity,
244                                    memberState, memberCountry, memberPhone,
245                                    memberMobile, memberFax, memberCareer,
246                                    memberHomepage, memberYahoo, memberAol,
247                                    memberIcq, memberMsn, memberCoolLink1,
248                                    memberCoolLink2);
249
250         // Now, create 4 default folders for each member
251
int memberID = 0;
252         try {
253             memberID = DAOFactory.getMemberDAO().getMemberIDFromMemberName(memberName);
254         } catch (ObjectNotFoundException e) {
255             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.membername_not_exists", new Object JavaDoc[] {memberName});
256             throw new ObjectNotFoundException(localizedMessage);
257         }
258
259         int folderStatus = 0;
260         int folderOption = 0;
261         int folderType = 0;
262         DAOFactory.getMessageFolderDAO().create(MVNForumConstant.MESSAGE_FOLDER_INBOX, memberID, 0/*order*/, folderStatus, folderOption, folderType, now, now);
263         DAOFactory.getMessageFolderDAO().create(MVNForumConstant.MESSAGE_FOLDER_DRAFT, memberID, 1/*order*/, folderStatus, folderOption, folderType, now, now);
264         DAOFactory.getMessageFolderDAO().create(MVNForumConstant.MESSAGE_FOLDER_SENT, memberID, 2/*order*/, folderStatus, folderOption, folderType, now, now);
265         DAOFactory.getMessageFolderDAO().create(MVNForumConstant.MESSAGE_FOLDER_TRASH, memberID, 3/*order*/, folderStatus, folderOption, folderType, now, now);
266
267         FloodControl.increaseCount(MVNForumGlobal.FLOOD_ID_NEW_MEMBER, currentIP);
268
269         if (MVNForumConfig.getEnableCaptcha()) {
270             onlineUser.destroyCurrentCaptcha();
271         }
272
273         // Add member to the lucene index
274
MemberBean memberBean = null;
275         try {
276             memberBean = DAOFactory.getMemberDAO().getMember_forPublic(memberID);
277         } catch(ObjectNotFoundException ex) {
278             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object JavaDoc[] {new Integer JavaDoc(memberID)});
279             throw new ObjectNotFoundException(localizedMessage);
280         }
281         MemberIndexer.scheduleAddMemberTask(memberBean);
282
283         request.setAttribute("MemberBean", memberBean);
284
285         // now, if require activation, then we will send mail
286
if (MVNForumConfig.getRequireActivation()) {
287             String JavaDoc serverName = ParamUtil.getServerPath();//ParamUtil.getServer2(request);
288
try {
289                 SendMailUtil.sendActivationCodeEmail(memberID, serverName);
290             } catch (Exception JavaDoc ex) {
291                 log.error("Cannot send mail after registration!", ex);
292                 request.setAttribute("mvnforum.mail.failed", "Cannot send activation email after registration!");
293                 //@todo: save the error message to displayed later
294
}
295         }
296
297         // Begin for Company
298
String JavaDoc companySpaceName = GenericParamUtil.getParameterSafe(request, "CompanySpaceName", false);
299         if (companySpaceName.length() > 0) {
300             try {
301                 int companyID = DAOFactory.getCompanyDAO().getCompanyIDFromCompanySpaceName(companySpaceName);
302                 CompanyBean companyBean = DAOFactory.getCompanyDAO().getCompany(companyID);
303
304                 int privilege = 0;
305                 DAOFactory.getMemberGroupDAO().create(companyBean.getGroupID(), memberName, privilege,
306                                             now/*creationDate*/, now/*modifiedDate*/);
307
308                 int isActive = 0;
309                 int relationType = 0;
310                 int relationOption = 0;
311                 int relationStatus = 0;
312                 Timestamp JavaDoc expireDate = new Timestamp JavaDoc(now.getTime() + DateUtil.DAY * 90);
313                 DAOFactory.getMemberCompanyDAO().create(memberID, memberName, companyID,
314                                       now/*creationDate*/, expireDate, isActive,
315                                       relationType, relationOption, relationStatus);
316             } catch (ObjectNotFoundException ex) {
317                 // Cannot find company with the space name, just ignore
318
}
319         }
320         // End for Company
321
}
322
323     public void processUpdate(GenericRequest request, GenericResponse response)
324         throws BadInputException, ObjectNotFoundException, DatabaseException, AuthenticationException, AssertionException {
325
326         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
327         MVNForumPermission permission = onlineUser.getPermission();
328         permission.ensureIsAuthenticated();
329
330         MyUtil.saveVNTyperMode(request, response);
331
332         int memberID = onlineUser.getMemberID();
333
334         Timestamp JavaDoc now = DateUtil.getCurrentGMTTimestamp();
335
336         // column(s) to update
337
int memberEmailVisible = GenericParamUtil.getParameterBoolean(request, "MemberEmailVisible")? MemberBean.MEMBER_EMAIL_VISIBLE : MemberBean.MEMBER_EMAIL_INVISIBLE;
338         int memberNameVisible = GenericParamUtil.getParameterBoolean(request, "MemberNameVisible") ? MemberBean.MEMBER_NAME_VISIBLE : MemberBean.MEMBER_NAME_INVISIBLE;
339         int memberOption = 0;//GenericParamUtil.getParameterInt(request, "MemberOption");
340
int memberStatus = 0;//@todo review and support it later
341
int memberMessageOption = 0;//GenericParamUtil.getParameterInt(request, "MemberMessageOption");
342
int memberPostsPerPage = GenericParamUtil.getParameterInt(request, "MemberPostsPerPage");
343         if (memberPostsPerPage < 5) {
344             memberPostsPerPage = 5;
345         }
346         double memberTimeZone = GenericParamUtil.getParameterTimeZone(request, "MemberTimeZone");
347         String JavaDoc memberSkin = GenericParamUtil.getParameterSafe(request, "MemberSkin", false);
348         String JavaDoc memberLanguage = GenericParamUtil.getParameterSafe(request, "MemberLanguage", false);
349         String JavaDoc memberFirstname = GenericParamUtil.getParameterSafe(request, "MemberFirstname", true);
350         String JavaDoc memberLastname = GenericParamUtil.getParameterSafe(request, "MemberLastname", true);
351         int memberGender = GenericParamUtil.getParameterBoolean(request, "MemberGender")? 1 : 0;
352         Date JavaDoc memberBirthday = GenericParamUtil.getParameterDate(request, "MemberBirthday");
353         String JavaDoc memberAddress = GenericParamUtil.getParameterSafe(request, "MemberAddress", false);
354         String JavaDoc memberCity = GenericParamUtil.getParameterSafe(request, "MemberCity", false);
355         String JavaDoc memberState = GenericParamUtil.getParameterSafe(request, "MemberState", false);
356         String JavaDoc memberCountry = GenericParamUtil.getParameterSafe(request, "MemberCountry", false);
357         String JavaDoc memberPhone = GenericParamUtil.getParameterSafe(request, "MemberPhone", false);
358         String JavaDoc memberMobile = GenericParamUtil.getParameterSafe(request, "MemberMobile", false);
359         String JavaDoc memberFax = GenericParamUtil.getParameterSafe(request, "MemberFax", false);
360         String JavaDoc memberCareer = GenericParamUtil.getParameterSafe(request, "MemberCareer", false);
361         String JavaDoc memberHomepage = GenericParamUtil.getParameterUrl(request, "MemberHomepage");
362         String JavaDoc memberYahoo = GenericParamUtil.getParameterSafe(request, "MemberYahoo", false);
363         String JavaDoc memberAol = GenericParamUtil.getParameterSafe(request, "MemberAol", false);
364         String JavaDoc memberIcq = GenericParamUtil.getParameterSafe(request, "MemberIcq", false);
365         String JavaDoc memberMsn = GenericParamUtil.getParameterSafe(request, "MemberMsn", false);
366         String JavaDoc memberCoolLink1 = GenericParamUtil.getParameterUrl(request, "MemberCoolLink1");
367         String JavaDoc memberCoolLink2 = GenericParamUtil.getParameterUrl(request, "MemberCoolLink2");
368
369         DAOFactory.getMemberDAO().update(memberID, // primary key
370
memberEmailVisible, memberNameVisible, now/*memberModifiedDate*/,
371                                memberOption, memberStatus, memberMessageOption,
372                                memberPostsPerPage, memberTimeZone, memberSkin,
373                                memberLanguage, memberFirstname, memberLastname,
374                                memberGender, memberBirthday, memberAddress,
375                                memberCity, memberState, memberCountry,
376                                memberPhone, memberMobile, memberFax,
377                                memberCareer, memberHomepage, memberYahoo,
378                                memberAol, memberIcq, memberMsn,
379                                memberCoolLink1, memberCoolLink2);
380
381         // now, update the new displayed language option
382
onlineUser.reloadProfile();
383         MemberBean justAddedMemberBean = null;
384         try {
385             justAddedMemberBean = DAOFactory.getMemberDAO().getMember_forPublic(memberID);
386         } catch(ObjectNotFoundException ex) {
387             Locale locale = I18nUtil.getLocaleInRequest(request);
388             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object JavaDoc[] {new Integer JavaDoc(memberID)});
389             throw new ObjectNotFoundException(localizedMessage);
390         }
391         MemberIndexer.scheduleUpdateMemberTask(justAddedMemberBean);
392
393     }
394
395     /*
396      * @todo: use new method of WebHelper
397      */

398     public void prepareEditEmail(GenericRequest request)
399         throws DatabaseException, ObjectNotFoundException, AuthenticationException, AssertionException {
400
401         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
402         MVNForumPermission permission = onlineUser.getPermission();
403         permission.ensureIsAuthenticated();
404
405         int memberID = onlineUser.getMemberID();
406         MemberBean memberBean = DAOFactory.getMemberDAO().getMember_forViewCurrentMember(memberID);
407         request.setAttribute("MemberEmail", memberBean.getMemberEmail());
408     }
409
410     public void processUpdateEmail(GenericRequest request)
411         throws BadInputException, ObjectNotFoundException, DatabaseException, InterceptorException,
412         DuplicateKeyException, AuthenticationException, AssertionException, MessagingException JavaDoc,IOException, TemplateException {
413
414         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
415         MVNForumPermission permission = onlineUser.getPermission();
416         permission.ensureIsAuthenticated();
417         Locale locale = I18nUtil.getLocaleInRequest(request);
418
419         int memberID = onlineUser.getMemberID();
420
421         // column(s) to update
422
String JavaDoc memberEmail = GenericParamUtil.getParameterEmail(request, "MemberEmail");
423         String JavaDoc memberEmailConfirm = GenericParamUtil.getParameterEmail(request, "MemberEmailConfirm");
424         if (memberEmail.length() > MVNForumGlobal.MAX_MEMBER_EMAIL_LENGTH) {
425             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.member_email_too_long");
426             throw new BadInputException(localizedMessage);
427             //throw new BadInputException("MemberEmail cannot be longer than 60 characters.");
428
}
429         InterceptorService.getInstance().validateMail(memberEmail);
430
431         // now check the password
432
MyUtil.ensureCorrectCurrentPassword(request);
433
434         if (!memberEmail.equals(memberEmailConfirm)) {
435             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.confirmed_email_is_not_match");
436             throw new BadInputException(localizedMessage);
437             //throw new BadInputException("Email and confirmed email are not the same, please try again.");
438
}
439
440         // invalidate the activate status
441
DAOFactory.getMemberDAO().updateActivateCode(memberID, "");
442
443         DAOFactory.getMemberDAO().updateEmail(memberID, memberEmail);
444
445         // now reload the permission if this online user change email (not activated now)
446
onlineUser.reloadPermission();
447
448         // now, if require activation, then we will send mail
449
if (MVNForumConfig.getRequireActivation()) {
450             String JavaDoc serverName = ParamUtil.getServerPath();//ParamUtil.getServer2(request);
451
SendMailUtil.sendActivationCodeEmail(memberID, serverName);
452         }
453     }
454
455     public void processUpdatePassword(GenericRequest request)
456         throws BadInputException, ObjectNotFoundException, DatabaseException,
457         AuthenticationException, AssertionException {
458
459         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
460         MVNForumPermission permission = onlineUser.getPermission();
461         permission.ensureIsAuthenticated();
462
463         int memberID = onlineUser.getMemberID();
464         Locale locale = I18nUtil.getLocaleInRequest(request);
465
466         // now check the password
467
MyUtil.ensureCorrectCurrentPassword(request);
468         /*
469         // NOTE: that we dont use getParameterPassword here since it will not forward-compatible
470         String memberOldPassword = GenericParamUtil.getParameter(request, "MemberOldMatkhau", true);
471         String oldEncodedPassword = Encoder.getMD5_Base64(memberOldPassword);
472         String currentPassword = DAOFactory.getMemberDAO().getPassword(memberID);
473         if (!currentPassword.equals(oldEncodedPassword)) {
474             String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.wrong_password");
475             throw new BadInputException(localizedMessage);
476             //throw new BadInputException("You have typed the wrong current password, please try again.");
477         }*/

478
479         // column(s) to update
480
String JavaDoc memberPassword1 = GenericParamUtil.getParameterPassword(request, "MemberMatkhau", 3, 0);
481         String JavaDoc memberPassword2 = GenericParamUtil.getParameterPassword(request, "MemberMatkhauConfirm", 3, 0);
482         if (!memberPassword1.equals(memberPassword2)) {
483             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.confirmed_password_is_not_match");
484             throw new BadInputException(localizedMessage);
485             //throw new BadInputException("Password and confirmed password are not the same, please try again.");
486
}
487         String JavaDoc memberPassword = Encoder.getMD5_Base64(memberPassword1);
488
489         String JavaDoc currentPassword = DAOFactory.getMemberDAO().getPassword(memberID);
490         if (currentPassword.equals(memberPassword)) {
491             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.old_password_and_new_password_cannot_equal");
492             throw new BadInputException(localizedMessage);
493             //throw new BadInputException("Old password and new password cannot equal, please try again.");
494
}
495
496         DAOFactory.getMemberDAO().updatePassword(memberID, // primary key
497
memberPassword);
498     }
499
500     public void prepareView_forCurrentMember(GenericRequest request)
501         throws DatabaseException, ObjectNotFoundException, AuthenticationException, AssertionException {
502
503         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
504         MVNForumPermission permission = onlineUser.getPermission();
505         permission.ensureIsAuthenticated();
506
507         // always update the number of new private message count in this case
508
onlineUser.updateNewMessageCount(true);
509
510         int memberID = onlineUser.getMemberID();
511         MemberBean memberBean = DAOFactory.getMemberDAO().getMember_forViewCurrentMember(memberID);
512         request.setAttribute("MemberBean", memberBean);
513     }
514
515     public void prepareEdit_forCurrentMember(GenericRequest request)
516         throws DatabaseException, ObjectNotFoundException, AuthenticationException, AssertionException {
517
518         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
519         MVNForumPermission permission = onlineUser.getPermission();
520         permission.ensureIsAuthenticated();
521
522         int memberID = onlineUser.getMemberID();
523         MemberBean memberBean = DAOFactory.getMemberDAO().getMember_forEditCurrentMember(memberID);
524         request.setAttribute("MemberBean", memberBean);
525     }
526
527     /*
528      * @todo: use new method of WebHelper
529      */

530     public void prepareEditSignature(GenericRequest request)
531         throws DatabaseException, ObjectNotFoundException, AuthenticationException, AssertionException {
532
533         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
534         MVNForumPermission permission = onlineUser.getPermission();
535         permission.ensureIsAuthenticated();
536
537         boolean isPreviewing = GenericParamUtil.getParameterBoolean(request, "preview");
538         if (isPreviewing) {
539             String JavaDoc signature = GenericParamUtil.getParameter(request, "MemberSignature");
540             if (signature.length() > 250) {
541                 signature = signature.substring(0, 250);// ensure no more than 250 char (should check in javascript ??)
542
}
543             request.setAttribute("MemberSignature", signature);
544         } else {
545             int memberID = onlineUser.getMemberID();
546             MemberBean memberBean = DAOFactory.getMemberDAO().getMember_forViewCurrentMember(memberID);
547             request.setAttribute("MemberSignature", memberBean.getMemberSignature());
548         }
549     }
550
551     public void processUpdateSignature(GenericRequest request, GenericResponse response)
552         throws ObjectNotFoundException, DatabaseException, AuthenticationException, AssertionException {
553
554         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
555         MVNForumPermission permission = onlineUser.getPermission();
556         permission.ensureIsAuthenticated();
557
558         MyUtil.saveVNTyperMode(request, response);
559
560         int memberID = onlineUser.getMemberID();
561
562         // column(s) to update
563
String JavaDoc memberSignature = GenericParamUtil.getParameter(request, "MemberSignature");
564         memberSignature = DisableHtmlTagFilter.filter(memberSignature);
565
566         DAOFactory.getMemberDAO().updateSignature(memberID, // primary key
567
memberSignature);
568     }
569
570     /*
571      * @todo: use new method of WebHelper
572      */

573     public void prepareEditAvatar(GenericRequest request)
574         throws DatabaseException, ObjectNotFoundException, AuthenticationException, AssertionException {
575
576         Locale locale = I18nUtil.getLocaleInRequest(request);
577         if (MVNForumConfig.getEnableAvatar() == false) {
578             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.avatar_is_disabled");
579             throw new AssertionException(localizedMessage);
580             //throw new AssertionException("Cannot use avatar because AVATAR feature is disabled by administrator.");
581
}
582
583         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
584         MVNForumPermission permission = onlineUser.getPermission();
585         permission.ensureIsAuthenticated();
586         permission.ensureCanUseAvatar();
587
588         int memberID = onlineUser.getMemberID();
589         MemberBean memberBean = DAOFactory.getMemberDAO().getMember_forViewCurrentMember(memberID);
590         request.setAttribute("MemberBean", memberBean);
591     }
592
593     /**
594      * Change picture from our predefined picture
595      * NOTE: this method will delete uploaded image (if any) of the member
596      */

597     public void updateMemberAvatar(GenericRequest request)
598         throws ObjectNotFoundException, DatabaseException, AuthenticationException, AssertionException {
599
600         if (MVNForumConfig.getEnableAvatar() == false) {
601             throw new AssertionException("Cannot use avatar because AVATAR feature is disabled by administrator.");
602         }
603
604         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
605         MVNForumPermission permission = onlineUser.getPermission();
606         permission.ensureIsAuthenticated();
607         permission.ensureCanUseAvatar();
608
609         int memberID = onlineUser.getMemberID();
610
611         // first, we delete uploaded image if there is one
612
/*StringBuffer bufferPicFile = new StringBuffer(128);
613         bufferPicFile.append(MVNForumConfig.getAvatarDir());
614         bufferPicFile.append(File.separatorChar).append(memberName).append(".jpg");
615         String picFile = bufferPicFile.toString();
616
617         log.trace("Delete avatar = " + picFile);
618         log.trace("String length = " + picFile.length());
619         File file = new File(picFile);
620         file.delete();// we dont need to check the returned value
621         */

622         BinaryStorage binaryStorage = ManagerFactory.getBinaryStorage();
623         try {
624             binaryStorage.deleteData(BinaryStorage.CATEGORY_AVATAR, String.valueOf(memberID), null);
625         } catch (IOException e) {
626             log.error("Cannot delete avatar.", e);
627         }
628         
629         // then we update the database with new one
630
String JavaDoc memberPicture = GenericParamUtil.getParameter(request, "MemberAvatar");
631         DAOFactory.getMemberDAO().updateAvatar(memberID, memberPicture);
632     }
633
634     /**
635      * upload user own avatar
636      */

637     public void uploadAvatar(javax.servlet.ServletConfig JavaDoc config, GenericRequest request)
638         throws BadInputException, AuthenticationException, IOException,
639         AssertionException, ObjectNotFoundException, DatabaseException {
640         
641         Locale locale = I18nUtil.getLocaleInRequest(request);
642
643         if (MVNForumConfig.getEnableAvatar() == false) {
644             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.avatar_is_disabled");
645             throw new AssertionException(localizedMessage);
646             //throw new AssertionException("Cannot use avatar because AVATAR feature is disabled by administrator.");
647
}
648
649         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
650         MVNForumPermission permission = onlineUser.getPermission();
651         permission.ensureIsAuthenticated();
652         permission.ensureCanUseAvatar();
653
654         int memberID = onlineUser.getMemberID();
655         String JavaDoc memberName = onlineUser.getMemberName();
656
657         int sizeMax = 60000; // 60KB
658
int sizeThreshold = 100000;// max memory used = 100K (more than needed)
659

660         List fileItems;
661         try {
662             FileUploadParser uploadParser = FileUploadParserFactory.getFileUploadParser();
663             fileItems = uploadParser.parseRequest(request, sizeMax, sizeThreshold, null, "UTF-8");
664         } catch (FileUploadException ex) {
665             log.error("Cannot upload", ex);
666             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "java.io.IOException.cannot_upload", new Object JavaDoc[] {ex.getMessage()});
667             throw new IOException(localizedMessage);
668             //throw new IOException("Cannot upload. Detailed reason: " + ex.getMessage());
669
}
670
671         // make sure only one file upload
672
int fileUploadCount = 0;
673         FileItem myFile = null;
674         for ( int i = 0 ; i < fileItems.size(); i++ ) {
675             myFile = (FileItem)fileItems.get(i);
676             if (!myFile.isFormField()) {
677                 break;
678                 //maybe we don't care about throws an AssertionException so comment this
679
//fileUploadCount++;
680
}
681
682             if (fileUploadCount > 1) {
683                 // never throw
684
throw new AssertionException("Assertion: Cannot upload more than 1 file while processing upload avatar for Member.");
685             }
686         }
687
688         if (myFile == null || myFile.isFormField() == true) {
689             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.cannot_process_upload_avatar_with_form_field");
690             throw new AssertionException(localizedMessage);
691             //throw new AssertionException("Cannot process uploaded avatar with a form field.");
692
}
693
694         // now everything all right, go ahead and create thumbnail
695

696         //@Trong
697
// InputStream inputStream = myFile.getInputStream();
698
// StringBuffer bufferPicFile = new StringBuffer(128);
699

700         //@Trong
701
// bufferPicFile.append(MVNForumConfig.getAvatarDir());
702
// log.debug("Upload avatar to the folder " + MVNForumConfig.getAvatarDir());
703
// bufferPicFile.append(File.separatorChar).append(memberName).append(".jpg");
704
// String thumbnailFile = bufferPicFile.toString();
705

706         //log.trace("uploaded file = " + thumbnailFile);
707

708         //@Trong
709
//The below method closes the inputStream after it have done its work.
710
//ImageUtil.createThumbnail(inputStream, thumbnailFile, 150/*maxWidth*/, 150/*maxHeight*/);// can throw BadInputException
711

712         //@Trong
713
// now the image has been save, go ahead and update database
714
//DAOFactory.getMemberDAO().updateAvatar(memberID, MemberBean.MEMBER_AVATAR_USING_UPLOAD);
715

716         String JavaDoc binaryMimeType = myFile.getContentType();
717         binaryMimeType = DisableHtmlTagFilter.filter(binaryMimeType);
718         int binaryFileSize = (int)myFile.getSize();
719         String JavaDoc fullFilePath = myFile.getName();
720         String JavaDoc binaryFilename = FileUtil.getFileName(fullFilePath);
721         binaryFilename = DisableHtmlTagFilter.filter(binaryFilename);
722         String JavaDoc binaryCreationIP = request.getRemoteAddr();
723         
724         BinaryStorage binaryStorage = ManagerFactory.getBinaryStorage();
725         binaryStorage.storeData(BinaryStorage.CATEGORY_AVATAR, String.valueOf(memberID), binaryFilename,
726                                 myFile.getInputStream(), binaryFileSize, 0, 0, binaryMimeType, binaryCreationIP);
727     }
728
729     public void prepareForgotPassword(GenericRequest request)
730         throws AssertionException, DatabaseException, AuthenticationException {
731
732         OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
733         if (MVNForumConfig.getEnableCaptcha()) {
734             onlineUser.buildNewCaptcha();
735         }
736     }
737
738     public void forgotPassword(GenericRequest request)
739         throws BadInputException, ObjectNotFoundException, DatabaseException, MessagingException JavaDoc,
740         AssertionException, AssertionException, DatabaseException, AuthenticationException, IOException,TemplateException {
741
742         // use for the captcha feature
743
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
744         Locale locale = I18nUtil.getLocaleInRequest(request);
745
746         int memberID = 0;
747         String JavaDoc memberName = GenericParamUtil.getParameter(request, "MemberName");
748         StringUtil.checkGoodName(memberName);
749         String JavaDoc memberEmail = GenericParamUtil.getParameter(request, "MemberEmail");
750         if (memberEmail.length() > 0) {
751             memberEmail = GenericParamUtil.getParameterEmail(request, "MemberEmail");
752         }
753
754         if (memberName.length() > 0) {// user enter his MemberName
755
// we find the email of this memberID, not the provided email
756
try {
757                     memberID = DAOFactory.getMemberDAO().getMemberIDFromMemberName(memberName);
758             } catch (ObjectNotFoundException e) {
759                 String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.membername_not_exists", new Object JavaDoc[] {memberName});
760                 throw new ObjectNotFoundException(localizedMessage);
761             }
762             MemberBean bean = DAOFactory.getMemberDAO().getMember_forPublic(memberID);
763             memberEmail = bean.getMemberEmail();
764         } else if (memberEmail.length() > 0) {// user enter his email
765
// we find the MemberID of this mail, now we sure that user didnt enter his MemberID
766
memberID = DAOFactory.getMemberDAO().getMemberIDFromMemberEmail(memberEmail);
767             MemberBean bean = DAOFactory.getMemberDAO().getMember_forPublic(memberID);
768             memberName = bean.getMemberName();
769         } else {// user didnt enter any thing
770
String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.your_member_name_or_email_is_not_entered");
771             throw new BadInputException(localizedMessage);
772             //throw new BadInputException("You must enter at least your MemberName or email");
773
}
774
775         // now we have the correct pair of MemberID and MemberEmail
776

777         // Check the assumption above
778
MemberBean memberBean = DAOFactory.getMemberDAO().getMember_forPublic(memberID);
779         if (!memberEmail.equalsIgnoreCase(memberBean.getMemberEmail())) {
780             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.serious_bug");
781             throw new AssertionException(localizedMessage);
782             //throw new AssertionException("Assertion when process forgot password. This is a serious bug. Please contact the Web site administrator to report the bug.");
783
}
784         // end check
785

786         // Now check the captcha
787
if (MVNForumConfig.getEnableCaptcha()) {
788             String JavaDoc captchaResponse = GenericParamUtil.getParameterSafe(request, "CaptchaResponse", false);
789             onlineUser.ensureCorrectCaptchaResponse(captchaResponse);
790         }
791
792         String JavaDoc currentTempPassword = DAOFactory.getMemberDAO().getTempPassword(memberID);
793
794         // if the current value length is less then 5, we assume that it is not set
795
// and we generate the new value only in this case. This will prevent the
796
// different values are sent out and confuse user.
797
if (currentTempPassword.length() < 5) {
798             //generate a temp password
799
currentTempPassword = RandomGenerator.getRandomMD5_Base64();
800             DAOFactory.getMemberDAO().updateTempPassword(memberID, currentTempPassword);
801         }
802
803         // next, encode to make sure it could be put on a link
804
String JavaDoc urlEncodedTempPassword = Encoder.encodeURL(currentTempPassword);
805
806         // we have pass the assertion check, go ahead
807
String JavaDoc serverName = ParamUtil.getServerPath();//ParamUtil.getServer2(request);
808

809         StringBuffer JavaDoc passwordResetUrl = new StringBuffer JavaDoc(256);
810         passwordResetUrl.append(serverName);
811         passwordResetUrl.append(ParamUtil.getContextPath());
812         passwordResetUrl.append(UserModuleConfig.getUrlPattern());
813         passwordResetUrl.append("/resetpassword?temppassword=");
814         passwordResetUrl.append(urlEncodedTempPassword);
815         passwordResetUrl.append("&member=");
816         passwordResetUrl.append(memberName);
817
818         // Prepare the FreeMarker configuration;
819
Configuration cfg = MVNForumConfig.getFreeMarkerConfiguration();
820
821         //Below is a code to map content of email to template
822
Map root = new HashMap();
823         root.put("serverName", serverName);
824         root.put("MVNForumInfo", MVNForumInfo.getProductDesc());
825         root.put("passwordResetUrl", passwordResetUrl.toString());
826         root.put("memberName", memberName);
827         root.put("currentTempPassword", currentTempPassword);
828
829         StringWriter subjectWriter = new StringWriter(256);
830         Template subjectTemplate = cfg.getTemplate(MVNForumGlobal.TEMPLATE_FORGOTPASSWORD_SUBJECT, "UTF-8");
831         subjectTemplate.process(root, subjectWriter);
832         String JavaDoc subject = subjectWriter.toString();
833
834         StringWriter bodyWriter = new StringWriter(1024);
835         Template bodyTemplate = cfg.getTemplate(MVNForumGlobal.TEMPLATE_FORGOTPASSWORD_BODY, "UTF-8");
836         bodyTemplate.process(root, bodyWriter);
837         String JavaDoc body = bodyWriter.toString();
838
839         log.debug("subject = " + subject);
840         log.debug("body = " + body);
841         try {
842             MailUtil.sendMail(MVNForumConfig.getWebMasterEmail() /*use the default MailFrom value*/,
843                               memberEmail /*to*/, "" /*cc*/, "" /*bcc*/, subject, body);
844         } catch (UnsupportedEncodingException e) {
845             log.error("Cannot support encoding", e);
846         }
847
848         // Only destroy captcha when send mail successfully
849
if (MVNForumConfig.getEnableCaptcha()) {
850             onlineUser.destroyCurrentCaptcha();
851         }
852     }
853
854     public void resetPassword(GenericRequest request)
855         throws BadInputException, ObjectNotFoundException, DatabaseException {
856
857         Locale locale = I18nUtil.getLocaleInRequest(request);
858
859         String JavaDoc memberName = GenericParamUtil.getParameter(request, "member", true);
860         StringUtil.checkGoodName(memberName);
861         // IMPORTANT: MUST check that temp password is not empty, because temppassword = empty
862
// means cannot reset password
863
String JavaDoc memberTempPassword = GenericParamUtil.getParameter(request, "temppassword", true);
864
865         int memberID = 0;
866         try {
867             memberID = DAOFactory.getMemberDAO().getMemberIDFromMemberName(memberName);
868         } catch (ObjectNotFoundException e) {
869             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.membername_not_exists", new Object JavaDoc[] {memberName});
870             throw new ObjectNotFoundException(localizedMessage);
871         }
872
873         String JavaDoc currentTempPassword = DAOFactory.getMemberDAO().getTempPassword(memberID);
874         if (memberTempPassword.equals(currentTempPassword) == false) {
875             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.wrong_temporary_password");
876             throw new BadInputException(localizedMessage);
877             //throw new BadInputException("Your temporary password is not correct, please try the forgot password feature.");
878
}
879
880         String JavaDoc memberPassword1 = GenericParamUtil.getParameterPassword(request, "MemberMatkhau", 3, 0);
881         String JavaDoc memberPassword2 = GenericParamUtil.getParameterPassword(request, "MemberMatkhauConfirm", 3, 0);
882         if (!memberPassword1.equals(memberPassword2)) {
883             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.confirmed_password_is_not_match");
884             throw new BadInputException(localizedMessage);
885             //throw new BadInputException("Password and confirmed password are not the same, please try again.");
886
}
887         String JavaDoc memberPassword = Encoder.getMD5_Base64(memberPassword1);
888
889         DAOFactory.getMemberDAO().updatePassword(memberID, memberPassword);
890         DAOFactory.getMemberDAO().updateTempPassword(memberID, "");// reset the temp password
891
}
892
893     public void sendActivateCode(GenericRequest request)
894         throws BadInputException, ObjectNotFoundException, DatabaseException,
895         MessagingException JavaDoc, IOException, TemplateException {
896
897         Locale locale = I18nUtil.getLocaleInRequest(request);
898         int memberID = 0;
899         String JavaDoc memberName = GenericParamUtil.getParameter(request, "MemberName", true);
900         StringUtil.checkGoodName(memberName);
901         String JavaDoc memberEmail = GenericParamUtil.getParameterEmail(request, "MemberEmail");
902
903         // we find the email of this memberID, not the provided email
904
try {
905             memberID = DAOFactory.getMemberDAO().getMemberIDFromMemberName(memberName);
906         } catch (ObjectNotFoundException e) {
907             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.membername_not_exists", new Object JavaDoc[] {memberName});
908             throw new ObjectNotFoundException(localizedMessage);
909         }
910
911         // Check if the email is correct
912
MemberBean memberBean = DAOFactory.getMemberDAO().getMember_forPublic(memberID);
913         if (!memberEmail.equalsIgnoreCase(memberBean.getMemberEmail())) {
914             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.provided_email_not_equals_member_email");
915             throw new BadInputException(localizedMessage);
916             //throw new BadInputException("Your provided email does not equals to the member's email in our database. Please try again.");
917
}
918
919         // end check, send mail now
920
String JavaDoc serverName = ParamUtil.getServerPath();//ParamUtil.getServer2(request);
921
SendMailUtil.sendActivationCodeEmail(memberID, serverName);
922     }
923
924     public void activateMember(GenericRequest request)
925         throws BadInputException, ObjectNotFoundException, DatabaseException,
926         AuthenticationException, AssertionException {
927
928         String JavaDoc memberName = GenericParamUtil.getParameter(request, "member", true);
929         StringUtil.checkGoodName(memberName);
930         Locale locale = I18nUtil.getLocaleInRequest(request);
931
932         // IMPORTANT: MUST check that ActivateCode is not empty, because ActivateCode = empty
933
// means invalid
934
String JavaDoc memberActivateCode = GenericParamUtil.getParameter(request, "activatecode", true);
935         if (memberActivateCode.equals(MemberBean.MEMBER_ACTIVATECODE_ACTIVATED)) {
936             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_activate.invalid_activation_code");
937             throw new BadInputException(localizedMessage);
938             //throw new BadInputException("Cannot activate member with invalid activation code.");
939
}
940         int memberID = 0;
941         try {
942             memberID = DAOFactory.getMemberDAO().getMemberIDFromMemberName(memberName);
943         } catch (ObjectNotFoundException e) {
944             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.membername_not_exists", new Object JavaDoc[] {memberName});
945             throw new ObjectNotFoundException(localizedMessage);
946         }
947
948         // Now, check that this member is not activated, to prevent the
949
// situation that other people try to annoy this member
950
if (DAOFactory.getMemberDAO().getActivateCode(memberID).equals(MemberBean.MEMBER_ACTIVATECODE_ACTIVATED)) {
951             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_activate.is_activated_member");
952             throw new BadInputException(localizedMessage);
953             //throw new BadInputException("Cannot activate an activated member.");
954
}
955
956         String JavaDoc currentActivateCode = DAOFactory.getMemberDAO().getActivateCode(memberID);
957         if (memberActivateCode.equals(currentActivateCode) == false) {
958             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_activate.wrong_activation_code");
959             throw new BadInputException(localizedMessage);
960             //throw new BadInputException("Your activation code is not correct, please try the Member Account Activation feature.");
961
}
962
963         DAOFactory.getMemberDAO().updateActivateCode(memberID, MemberBean.MEMBER_ACTIVATECODE_ACTIVATED);// activate member
964

965         // now reload the permission if this online user is the activated user
966
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
967         if (memberID == onlineUser.getMemberID()) {
968             onlineUser.reloadPermission();
969         }
970     }
971
972 /*************************************************
973  * For public view
974  *************************************************/

975     public void prepareView_forPublic(GenericRequest request)
976         throws BadInputException, ObjectNotFoundException, DatabaseException {
977
978         String JavaDoc memberName = GenericParamUtil.getParameter(request, "member", false);
979         Locale locale = I18nUtil.getLocaleInRequest(request);
980         // primary key column(s)
981
int memberID = -1;
982         if (memberName.length() == 0) {
983             memberID = GenericParamUtil.getParameterInt(request, "memberid");
984         } else {// has MemberName
985
/**@todo: improve this for better performance(dont use this method,
986              * and write 2 new methods)*/

987             StringUtil.checkGoodName(memberName);// check for better security
988
try {
989                 memberID = DAOFactory.getMemberDAO().getMemberIDFromMemberName(memberName);
990             } catch (ObjectNotFoundException e) {
991                 String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.membername_not_exists", new Object JavaDoc[] {memberName});
992                 throw new ObjectNotFoundException(localizedMessage);
993             }
994         }
995
996         try {
997             DAOFactory.getMemberDAO().increaseViewCount(memberID);
998         } catch (ObjectNotFoundException e) {
999             String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object JavaDoc[] {new Integer JavaDoc(memberID)});
1000            throw new ObjectNotFoundException(localizedMessage);
1001        }
1002
1003        MemberBean memberBean = DAOFactory.getMemberDAO().getMember_forPublic(memberID);
1004
1005        request.setAttribute("MemberBean", memberBean);
1006    }
1007
1008    /**
1009     * This method supports sorting base on many criteria
1010     */

1011    public void prepareListMembers_forPublic(GenericRequest request)
1012        throws DatabaseException, AssertionException, BadInputException, AuthenticationException {
1013
1014        Locale locale = I18nUtil.getLocaleInRequest(request);
1015        if (MVNForumConfig.getEnableListMembers() == false) {
1016            String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.list_members_is_disabled");
1017            throw new AssertionException(localizedMessage);
1018            //throw new AssertionException("Cannot list members because LIST_MEMBERS feature is disabled by administrator.");
1019
}
1020
1021        OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
1022        //MVNForumPermission permission = onlineUser.getPermission();
1023
//@todo: some permission checking is needed ???
1024

1025        // for sort and order stuff
1026
String JavaDoc sort = GenericParamUtil.getParameter(request, "sort");
1027        String JavaDoc order = GenericParamUtil.getParameter(request, "order");
1028        if (sort.length() == 0) sort = "MemberCreationDate";
1029        if (order.length()== 0) order = "DESC";
1030
1031        // we continue
1032
int postsPerPage = onlineUser.getPostsPerPage();
1033        int offset = 0;
1034        try {
1035            offset = GenericParamUtil.getParameterInt(request, "offset");
1036        } catch (BadInputException e) {
1037            // do nothing
1038
}
1039
1040        int totalMembers = DAOFactory.getMemberDAO().getNumberOfMembers();
1041        if (offset > totalMembers) {
1042            String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.offset_greater_than_total_rows");
1043            throw new BadInputException(localizedMessage);
1044            //throw new BadInputException("The offset is not allowed to be greater than total rows.");
1045
}
1046
1047        Collection memberBeans = DAOFactory.getMemberDAO().getMembers_withSortSupport_limit(offset, postsPerPage, sort, order);
1048
1049        request.setAttribute("MemberBeans", memberBeans);
1050        request.setAttribute("TotalMembers", new Integer JavaDoc(totalMembers));
1051    }
1052
1053    // just for showing member's avatar
1054
public void getAvatar(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response)
1055        throws BadInputException, DatabaseException, IOException {
1056
1057        if (MVNForumConfig.getEnableAvatar() == false) {
1058            response.sendError(HttpServletResponse.SC_FORBIDDEN);
1059            return;
1060        }
1061
1062        int memberID = ParamUtil.getParameterInt(request, "memberid");
1063
1064        MemberBean member = null;
1065        try {
1066            member = DAOFactory.getMemberDAO().getMember_forPublic(memberID);
1067        } catch (ObjectNotFoundException e) {
1068            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
1069            return;
1070        }
1071        
1072        String JavaDoc memberAvatar = member.getMemberAvatar();
1073        if (memberAvatar.equals(MemberBean.MEMBER_AVATAR_USING_UPLOAD) ||
1074            memberAvatar.startsWith(BinaryStorage.BINARY_STORAGE)||
1075            memberAvatar.startsWith(MVNForumGlobal.UPLOADED_AVATAR_DIR)) {
1076            memberAvatar = member.getMemberName() + ".jpg";
1077        } else {
1078            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
1079            return;
1080        }
1081        String JavaDoc imageMimeType = "image/jpeg";
1082
1083        File avatarFile = new File(MVNForumConfig.getAvatarDir() + File.separator + memberAvatar);
1084        if (!avatarFile.exists()) {
1085            response.sendError(HttpServletResponse.SC_NOT_FOUND);
1086            return;
1087        }
1088        if (!avatarFile.isFile()) {
1089            response.sendError(HttpServletResponse.SC_NO_CONTENT);
1090            return;
1091        }
1092
1093        long lastModified = avatarFile.lastModified();
1094        long ifModifiedSince = request.getDateHeader("If-Modified-Since");
1095        //log.debug("\n ** Last Modified : " + lastModified + " If Modified Since : " + ifModifiedSince + " **");
1096
if (ifModifiedSince != -1) {
1097            if (/*(request.getHeader("If-None-Match") == null)
1098                && */
(lastModified <= ifModifiedSince )) {
1099                // The entity has not been modified since the date
1100
// specified by the client. This is not an error case.
1101
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
1102                return;
1103            }
1104        }
1105
1106        OutputStream outputStream = null;
1107        try {
1108            String JavaDoc httpModified = DateUtil.getHTTPHeaderTime(new Date JavaDoc(lastModified));
1109            response.setContentType(imageMimeType);
1110            response.setHeader("Location", memberAvatar);
1111            response.setHeader("Last-Modified", httpModified);
1112            //response.setHeader("Content-Disposition", "attachment; filename=" + memberAvatar);//always download
1113
//response.setHeader("Content-Length", String.valueOf(avatarFile.length()));//problem with compression
1114

1115            // now, the header inited, just write the file content on the output
1116
try {
1117                outputStream = response.getOutputStream();
1118                //FileUtil.popFile(avatarFile, outputStream);
1119
BinaryStorage binaryStorage = ManagerFactory.getBinaryStorage();
1120                InputStream inputStream = binaryStorage.getInputStream(BinaryStorage.CATEGORY_AVATAR, String.valueOf(memberID), null);
1121                IOUtils.copy(inputStream, outputStream);
1122            } catch (IOException ex) {
1123                // CANNOT throw Exception after we output to the response
1124
log.error("Error while trying to send avatar from server", ex);
1125            }
1126
1127            outputStream.flush();
1128            outputStream.close();
1129            outputStream = null;// no close twice
1130
} catch (IOException ex) {
1131            throw ex;
1132        } finally {
1133            if (outputStream != null) {
1134                try {
1135                    outputStream.close();
1136                } catch (IOException ex) { }
1137            }
1138        }
1139    }
1140}
1141
Popular Tags