|
What this is
Other links
The source code
/*
* $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/user/UserModuleProcessor.java,v 1.73.2.1 2005/05/20 08:52:56 minhnn Exp $
* $Author: minhnn $
* $Revision: 1.73.2.1 $
* $Date: 2005/05/20 08:52:56 $
*
* ====================================================================
*
* Copyright (C) 2002-2005 by MyVietnam.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* All copyright notices regarding mvnForum MUST remain intact
* in the scripts and in the outputted HTML.
* The "powered by" text/logo with a link back to
* http://www.mvnForum.com and http://www.MyVietnam.net in the
* footer of the pages MUST remain visible when the pages
* are viewed on the internet or intranet.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Support can be obtained from support forums at:
* http://www.mvnForum.com/mvnforum/index
*
* Correspondence and Marketing Questions can be sent to:
* info@MyVietnam.net
*
* @author: Minh Nguyen minhnn@MyVietnam.net
* @author: Mai Nguyen mai.nh@MyVietnam.net
*/
package com.mvnforum.user;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import com.mvnforum.*;
import com.mvnforum.auth.*;
import com.mvnforum.common.MVNCaptchaService;
import net.myvietnam.mvncore.exception.*;
import net.myvietnam.mvncore.filter.DisableHtmlTagFilter;
import net.myvietnam.mvncore.util.ParamUtil;
import net.myvietnam.mvncore.util.StringUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class UserModuleProcessor {
private static Log log = LogFactory.getLog(UserModuleProcessor.class);
private final String ORIGINAL_REQUEST = "mvnforum.user.OriginalRequest";
private HttpServlet mainServlet = null;
private ServletContext servletContext = null;
private OnlineUserManager onlineUserManager = OnlineUserManager.getInstance();
private UserModuleURLMapHandler urlMapHandler = new UserModuleURLMapHandler();
private ForumWebHandler forumWebHandler = new ForumWebHandler();
private ThreadWebHandler threadWebHandler = new ThreadWebHandler();
private PostWebHandler postWebHandler = new PostWebHandler();
private AttachmentWebHandler attachmentWebHandler = new AttachmentWebHandler();
private MemberWebHandler memberWebHandler = new MemberWebHandler();
private CompanyWebHandler companyWebHandler = new CompanyWebHandler();
private WatchWebHandler watchWebHandler = new WatchWebHandler();
private FavoriteThreadWebHandler favoriteThreadWebHandler = new FavoriteThreadWebHandler();
private MessageWebHandler messageWebHandler = new MessageWebHandler();
private PmAttachmentWebHandler pmAttachmentWebHandler = new PmAttachmentWebHandler();
private MessageFolderWebHandler messageFolderWebHandler = new MessageFolderWebHandler();
public UserModuleProcessor(HttpServlet servlet) {
mainServlet = servlet;
servletContext = servlet.getServletContext();
}
public String process(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
long start = 0;
String requestURI = StringUtil.getEmptyStringIfNull(request.getPathInfo());
String responseURI = null;
OnlineUser onlineUser = null;
if (log.isDebugEnabled()) {
start = System.currentTimeMillis();
log.debug("UserModuleProcessor : requestURI = " + requestURI);
}
// step 1: some command need to be processed before we do the URI mapping (of the MODAL)
// MODAL processing
try {
onlineUser = onlineUserManager.getOnlineUser(request);
onlineUser.updateNewMessageCount(false);
if (requestURI.equals("/index")) {
if (MVNForumConfig.getEnablePortalLikeIndexPage()) {
forumWebHandler.prepareListIndex(request, requestURI);//no permission
} else {
forumWebHandler.prepareList(request, requestURI);//no permission
}
} else if (requestURI.equals("/listforums")) {
forumWebHandler.prepareList(request, requestURI);//no permission
} else if (requestURI.equals("/listthreads")) {
threadWebHandler.prepareList_limit(request);
} else if (requestURI.equals("/listrecentthreads")) {
threadWebHandler.prepareListRecentThreads_limit(request);//no permission
} else if (requestURI.equals("/viewthread")) {
postWebHandler.prepareViewThread(request);
} else if (requestURI.equals("/printthread")) {
postWebHandler.prepareViewThread(request);
} else if (requestURI.equals("/deletethread")) {
threadWebHandler.prepareDelete(request);
} else if (requestURI.equals("/deletethreadprocess")) {
threadWebHandler.processDelete(request);
} else if (requestURI.equals("/movethread")) {
threadWebHandler.prepareMoveThread(request);
} else if (requestURI.equals("/movethreadprocess")) {
threadWebHandler.processMoveThread(request);
} else if (requestURI.equals("/editthreadstatus")) {
threadWebHandler.prepareEditThreadStatus(request);
} else if (requestURI.equals("/editthreadstatusprocess")) {
threadWebHandler.processEditThreadStatus(request);
} else if (requestURI.equals("/editthreadtype")) {
threadWebHandler.prepareEditThreadType(request);
} else if (requestURI.equals("/editthreadtypeprocess")) {
threadWebHandler.processEditThreadType(request);
} else if (requestURI.equals("/modcp")) {
threadWebHandler.prepareModerationControlPanel(request);
} else if (requestURI.equals("/listrecentpendingthreads")) {
threadWebHandler.prepareListRecentDisabledThreads_limit(request);
} else if (requestURI.equals("/listthreadswithpendingposts")) {
threadWebHandler.prepareListEnableThreadsWithPendingPosts_inForum_limit(request);
} else if (requestURI.equals("/listrecentthreadswithpendingposts")) {
threadWebHandler.prepareListRecentEnableThreadsWithPendingPosts_limit(request);
} else if (requestURI.equals("/moderatependingthreads")) {
threadWebHandler.prepareModeratePendingThreads_inForum_limit(request);
} else if (requestURI.equals("/moderatependingthreadsprocess")) {
threadWebHandler.processModeratePendingThreads(request);
} else if (requestURI.equals("/moderatependingposts")) {
postWebHandler.prepareModeratePendingPosts_limit(request);
} else if (requestURI.equals("/moderatependingpostsprocess")) {
postWebHandler.processModeratePendingPosts(request);
} else if (requestURI.equals("/listpendingthreadsxml")) {
threadWebHandler.prepareListDisabledThreads_limit_xml(request);
} else if (requestURI.equals("/addpost")) {
postWebHandler.prepareAdd(request, response);
} else if (requestURI.equals("/addpostprocess")) {
postWebHandler.processAdd(request, response);
} else if (requestURI.equals("/editpost")) {
postWebHandler.prepareEdit(request);
} else if (requestURI.equals("/updatepost")) {
postWebHandler.processUpdate(request);
} else if (requestURI.equals("/printpost")) {
postWebHandler.preparePrintPost(request);
} else if (requestURI.equals("/deletepost")) {
postWebHandler.prepareDelete(request);
} else if (requestURI.equals("/deletepostprocess")) {
postWebHandler.processDelete(request);
} else if (requestURI.equals("/addattachment")) {
attachmentWebHandler.prepareAdd(request);
} else if (requestURI.equals("/addattachmentprocess")) {
attachmentWebHandler.processAdd(request, response);
} else if (requestURI.equals("/getattachment")) {
attachmentWebHandler.downloadAttachment(request, response);
return null;//download attachment, no further process is needed
} else if (requestURI.equals("/deleteattachment")) {
attachmentWebHandler.prepareDelete(request);
} else if (requestURI.equals("/deleteattachmentprocess")) {
attachmentWebHandler.processDelete(request);
} else if (requestURI.equals("/editattachment")) {
attachmentWebHandler.prepareEdit(request);
} else if (requestURI.equals("/editattachmentprocess")) {
attachmentWebHandler.processEdit(request);
} else if (requestURI.equals("/myfavoritethread")) {
threadWebHandler.prepareList_inFavorite(request);
} else if (requestURI.equals("/addfavoritethreadprocess")) {
favoriteThreadWebHandler.processAdd(request);
} else if (requestURI.equals("/deletefavoritethreadprocess")) {
favoriteThreadWebHandler.processDelete(request);
} else if (requestURI.equals("/registermember")) {
memberWebHandler.prepareAdd(request);
} else if (requestURI.equals("/registermemberprocess")) {
memberWebHandler.processAdd(request, response);// no permission
} else if (requestURI.equals("/viewmember")) {
memberWebHandler.prepareView_forPublic(request);// no permission
} else if (requestURI.equals("/listmembers")) {
memberWebHandler.prepareListMembers_forPublic(request);// no permission
} else if (requestURI.equals("/editmember")) {
memberWebHandler.prepareEdit_forCurrentMember(request);
} else if (requestURI.equals("/updatemember")) {
memberWebHandler.processUpdate(request, response);
} else if (requestURI.equals("/myprofile")) {
memberWebHandler.prepareView_forCurrentMember(request);
} else if (requestURI.equals("/changepassword")) {
onlineUser.getPermission().ensureIsAuthenticated();// check if login
} else if (requestURI.equals("/changepasswordprocess")) {
memberWebHandler.processUpdatePassword(request);
} else if (requestURI.equals("/changeemail")) {
memberWebHandler.prepareEditEmail(request);
} else if (requestURI.equals("/changeemailprocess")) {
memberWebHandler.processUpdateEmail(request);
} else if (requestURI.equals("/changesignature")) {
memberWebHandler.prepareEditSignature(request);
} else if (requestURI.equals("/changesignatureprocess")) {
memberWebHandler.processUpdateSignature(request, response);
} else if (requestURI.equals("/changeavatar")) {
memberWebHandler.prepareEditAvatar(request);
} else if (requestURI.equals("/uploadavatar")) {
memberWebHandler.uploadAvatar(mainServlet.getServletConfig(), request);
} else if (requestURI.equals("/updateavatar")) {
memberWebHandler.updateMemberAvatar(request);
} else if (requestURI.equals("/mywatch")) {
watchWebHandler.prepareList(request);
} else if (requestURI.equals("/addwatch")) {
watchWebHandler.prepareAdd(request);
} else if (requestURI.equals("/addwatchprocess")) {
watchWebHandler.processAdd(request);
} else if (requestURI.equals("/deletewatchprocess")) {
watchWebHandler.processDelete(request);
} else if (requestURI.equals("/mymessage")) {
messageWebHandler.prepareList(request);
} else if (requestURI.equals("/addmessage")) {
messageWebHandler.prepareAdd(request, response);
} else if (requestURI.equals("/addmessageprocess")) {
messageWebHandler.processAdd(request, response);
} else if (requestURI.equals("/viewmessage")) {
messageWebHandler.prepareViewMessage(request);
} else if (requestURI.equals("/sendmessageprocess")) {
messageWebHandler.processSendMessage(request);
} else if (requestURI.equals("/deletemessageprocess")) {
messageWebHandler.processDelete(request);
} else if (requestURI.equals("/processmessage")) {
messageWebHandler.processMessage(request);
} else if (requestURI.equals("/addmessageattachment")) {
pmAttachmentWebHandler.prepareAdd(request);
} else if (requestURI.equals("/addmessageattachmentprocess")) {
pmAttachmentWebHandler.processAdd(request, response);
} else if (requestURI.equals("/getpmattachment")) {
pmAttachmentWebHandler.downloadAttachment(request, response);
return null;//download attachment, no further process is needed
} else if (requestURI.equals("/mymessagefolder")) {
messageFolderWebHandler.prepareList(request);
} else if (requestURI.equals("/addmessagefolder")) {
messageFolderWebHandler.prepareAdd(request);
} else if (requestURI.equals("/addmessagefolderprocess")) {
messageFolderWebHandler.processAdd(request);
} else if (requestURI.equals("/deletemessagefolder")) {
messageFolderWebHandler.prepareDelete(request);
} else if (requestURI.equals("/deletemessagefolderprocess")) {
messageFolderWebHandler.processDelete(request);
} else if (requestURI.equals("/updatefolderorder")) {
messageFolderWebHandler.processUpdateOrder(request);
} else if (requestURI.equals("/listcompanies")) {
companyWebHandler.prepareListCompanies_forPublic(request);
} else if (requestURI.equals("/companyhomepage")) {
companyWebHandler.prepareView(request);
} else if (requestURI.equals("/search")) {
postWebHandler.prepareSearch(request);
} else if (requestURI.equals("/searchprocess")) {
postWebHandler.processSearch(request, response);
} else if (requestURI.equals("/rsssummary")) {
threadWebHandler.prepareRSSSummary(request);
} else if (requestURI.equals("/atom")) {
threadWebHandler.prepareListRSS(request);
} else if (requestURI.equals("/rss")) {
threadWebHandler.prepareListRSS(request);
} else if (requestURI.equals("/rss2")) {
threadWebHandler.prepareListRSS(request);
} else if (requestURI.equals("/getmvncoreimage")) {
MyUtil.writeMvnCoreImage(request, response);
return null;
} else if (requestURI.equals("/getmvnforumimage")) {
MyUtil.writeMvnForumImage(request, response);
return null;
} else if (requestURI.equals("/captchaimage")) {
MVNCaptchaService.getInstance().writeCaptchaImage(request, response);
return null;
} else if (requestURI.equals("/iforgotpasswords")) {
memberWebHandler.prepareForgotPassword(request);//no permission
} else if (requestURI.equals("/forgotpasswordprocess")) {
memberWebHandler.forgotPassword(request);//no permission
} else if (requestURI.equals("/resetpasswordprocess")) {
memberWebHandler.resetPassword(request);//no permission
} else if (requestURI.equals("/sendactivationcodeprocess")) {
memberWebHandler.sendActivateCode(request);//no permission
} else if (requestURI.equals("/activatememberprocess")) {
memberWebHandler.activateMember(request);//no permission
} else if (requestURI.equals("/listonlineusers")) {
//@todo: move to WebHandler
if (MVNForumConfig.getEnableOnlineUsers() == false) {
throw new AssertionException("Cannot list online users because ONLINE_USERS feature is disabled by administrator.");
}
// This will ensure removing all time-out users (if there is)
onlineUserManager.getOnlineUser(request);
// the following 2 lines fix the bug that no online user found in the first time request
Action action = new ActionInUserModule(request, requestURI);// may throw MissingURLMapEntryException
onlineUserManager.updateOnlineUserAction(request, action);
// now set the attribute
//request.setAttribute("OnlineUserActions", onlineUserManager.getOnlineUserActions(0/*default*/));// no permission
boolean duplicateUsers = MVNForumConfig.getEnableDuplicateOnlineUsers();
request.setAttribute("OnlineUserActions", onlineUserManager.getOnlineUserActions(0/*default*/, duplicateUsers));// no permission
} else if (requestURI.equals("/loginprocess")) {
if (MVNForumConfig.getEnableLogin() == false) {
throw new AuthenticationException(NotLoginException.LOGIN_DISABLED);
}
onlineUserManager.processLogin(request, response);
String url = ParamUtil.getParameter(request, "url");
if (url.length() > 0) {
responseURI = url;
} else {
String originalRequest = ParamUtil.getAttribute(request.getSession(), ORIGINAL_REQUEST);
if (originalRequest.length() > 0) {
request.getSession().setAttribute(ORIGINAL_REQUEST, "");
responseURI = originalRequest;
}
}
} else if (requestURI.equals("/logout")) {
onlineUserManager.logout(request, response);
request.setAttribute("Reason", "Logout successfully.");
} else if (requestURI.equals("/deletecookieprocess")) {
onlineUserManager.deleteCookie(request, response);
} else if (requestURI.equals("/getavatar")) {
memberWebHandler.getAvatar(request, response);
return null;//download attachment, no further process is needed
}
} catch (AuthenticationException e) {
// make sure not from login page, we cannot set original request in this situation
// and also make sure the request's method must be GET to set the OriginalRequest
boolean shouldSaveOriginalRequest = (e.getReason()==NotLoginException.NOT_LOGIN) || (e.getReason()==NotLoginException.NOT_ENOUGH_RIGHTS);
if (shouldSaveOriginalRequest && (request.getMethod().equals("GET"))) {
String url = UserModuleConfig.getUrlPattern() + requestURI + "?" + StringUtil.getEmptyStringIfNull(request.getQueryString());
request.getSession().setAttribute(ORIGINAL_REQUEST, url);
}
requestURI = "/login";
request.setAttribute("Reason", e.getReasonExplanation(onlineUser.getLocale()));
} catch (Exception e) {
if (e instanceof BadInputException) {
// we log in WARN level if this is the exception from user input
log.warn("Exception in UserModuleProcessor e = " + e.getMessage(), e);
} else if (e instanceof AssertionException) {
// we log in FATAL level if this is the exception from user input
log.fatal("Exception in UserModuleProcessor e = " + e.getMessage(), e);
} else {
log.error("Exception in UserModuleProcessor [" + e.getClass().getName() + "] : " + e.getMessage(), e);
}
requestURI = "/error";
String message = StringUtil.getEmptyStringIfNull(e.getMessage());
if (message.length() == 0) {
message = e.getClass().getName();
}
request.getSession().setAttribute("ErrorMessage", DisableHtmlTagFilter.filter(message));
}
// step 2: map the URI (of the CONTROLLER)
try {
// NOTE 1: there is one situation when responseURI != null (after login successfully for the first time),
// but since it will make a NEW request via sendRedirect, so we dont count
// NOTE 2: there are 2 situation when requestURI is different from the original requestURI
// that is /login and /error, because of this so we must pass the requestURI
/* @todo Could below the MapHandler ??? */
Action action = new ActionInUserModule(request, requestURI);// may throw MissingURLMapEntryException
onlineUserManager.updateOnlineUserAction(request, action);
// now updateOnlineUserAction is ok, we go ahead
if (responseURI == null) {
URLMap map = urlMapHandler.getMap(requestURI, request, onlineUser.getLocaleName());
responseURI = map.getResponse();
}// if
} catch (MissingURLMapEntryException e) {
log.error("Exception: missing urlmap entry in forum module: requestURI = " + requestURI);
responseURI = "/mvnplugin/mvnforum/user/error.jsp";
request.getSession().setAttribute("ErrorMessage", DisableHtmlTagFilter.filter(e.getMessage()));
} catch (Exception e) {
// This will catch AuthenticationException, AssertionException, DatabaseException
// in the method onlineUserManager.updateOnlineUserAction(request, action)
responseURI = "/mvnplugin/mvnforum/user/error.jsp";
request.getSession().setAttribute("ErrorMessage", DisableHtmlTagFilter.filter(e.getMessage()));
}
// step 3: forward or dispatch to the VIEW
if (log.isDebugEnabled()) {
long duration = System.currentTimeMillis() - start;
log.debug("UserModuleProcessor : responseURI = " + responseURI + ". (" + duration + " ms)");
}
return responseURI;
/*
if (responseURI.endsWith(".jsp")) {
servletContext.getRequestDispatcher(responseURI).forward(request, response);
} else {
response.sendRedirect(ParamUtil.getContextPath() + responseURI);
}*/
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.