| 1 41 package com.mvnforum.user; 42 43 import java.io.IOException ; 44 45 import javax.servlet.ServletContext ; 46 import javax.servlet.ServletException ; 47 import javax.servlet.http.*; 48 49 import com.mvnforum.MVNForumConfig; 50 import com.mvnforum.MyUtil; 51 import com.mvnforum.auth.*; 52 import com.mvnforum.common.MVNCaptchaService; 53 import net.myvietnam.mvncore.exception.*; 54 import net.myvietnam.mvncore.filter.DisableHtmlTagFilter; 55 import net.myvietnam.mvncore.mvnframework.URLMap; 56 import net.myvietnam.mvncore.util.ParamUtil; 57 import net.myvietnam.mvncore.util.StringUtil; 58 import net.myvietnam.mvncore.web.GenericRequest; 59 import net.myvietnam.mvncore.web.GenericResponse; 60 import net.myvietnam.mvncore.web.impl.GenericRequestServletImpl; 61 import net.myvietnam.mvncore.web.impl.GenericResponseServletImpl; 62 import org.apache.commons.logging.Log; 63 import org.apache.commons.logging.LogFactory; 64 65 public class UserModuleProcessor { 66 67 private static Log log = LogFactory.getLog(UserModuleProcessor.class); 68 69 private final String ORIGINAL_REQUEST = "mvnforum.user.OriginalRequest"; 70 71 private HttpServlet mainServlet = null; 72 private ServletContext servletContext = null; 73 74 private OnlineUserManager onlineUserManager = OnlineUserManager.getInstance(); 75 private UserModuleURLMapHandler urlMapHandler = new UserModuleURLMapHandler(); 76 77 private ForumWebHandler forumWebHandler = new ForumWebHandler(); 78 private ThreadWebHandler threadWebHandler = new ThreadWebHandler(); 79 private PostWebHandler postWebHandler = new PostWebHandler(); 80 private AttachmentWebHandler attachmentWebHandler = new AttachmentWebHandler(); 81 private MemberWebHandler memberWebHandler = new MemberWebHandler(); 82 private CompanyWebHandler companyWebHandler = new CompanyWebHandler(); 83 private WatchWebHandler watchWebHandler = new WatchWebHandler(); 84 private FavoriteThreadWebHandler favoriteThreadWebHandler = new FavoriteThreadWebHandler(); 85 private MessageWebHandler messageWebHandler = new MessageWebHandler(); 86 private PmAttachmentWebHandler pmAttachmentWebHandler = new PmAttachmentWebHandler(); 87 private MessageFolderWebHandler messageFolderWebHandler = new MessageFolderWebHandler(); 88 89 public UserModuleProcessor(HttpServlet servlet) { 90 mainServlet = servlet; 91 servletContext = servlet.getServletContext(); 92 } 93 94 public String process(HttpServletRequest request, HttpServletResponse response) 95 throws IOException , ServletException { 96 97 long start = 0; 98 String requestURI = StringUtil.getEmptyStringIfNull(request.getPathInfo()); 99 String responseURI = null; 100 OnlineUser onlineUser = null; 101 102 GenericRequest genericRequest = new GenericRequestServletImpl(request, servletContext); 103 GenericResponse genericResponse = new GenericResponseServletImpl(response); 104 105 if (log.isDebugEnabled()) { 106 start = System.currentTimeMillis(); 107 log.debug("UserModuleProcessor : requestURI = " + requestURI); 108 } 109 110 try { 113 onlineUser = onlineUserManager.getOnlineUser(genericRequest); 114 onlineUser.updateNewMessageCount(false); 115 if (requestURI.equals("/index")) { 116 if (MVNForumConfig.getEnablePortalLikeIndexPage()) { 117 forumWebHandler.prepareListIndex(genericRequest, requestURI); } else { 119 forumWebHandler.prepareList(genericRequest, requestURI); } 121 } else if (requestURI.equals("/listforums")) { 123 forumWebHandler.prepareList(genericRequest, requestURI); } else if (requestURI.equals("/listthreads")) { 125 threadWebHandler.prepareList_limit(genericRequest); 126 } else if (requestURI.equals("/listrecentthreads")) { 127 threadWebHandler.prepareListRecentThreads_limit(genericRequest); } else if (requestURI.equals("/viewthread")) { 129 postWebHandler.prepareViewThread(genericRequest); 130 } else if (requestURI.equals("/printthread")) { 131 postWebHandler.prepareViewThread(genericRequest); 132 133 } else if (requestURI.equals("/deletethread")) { 134 threadWebHandler.prepareDelete(genericRequest); 135 } else if (requestURI.equals("/deletethreadprocess")) { 136 threadWebHandler.processDelete(genericRequest); 137 } else if (requestURI.equals("/movethread")) { 138 threadWebHandler.prepareMoveThread(genericRequest); 139 } else if (requestURI.equals("/movethreadprocess")) { 140 threadWebHandler.processMoveThread(genericRequest); 141 } else if (requestURI.equals("/editthreadstatus")) { 142 threadWebHandler.prepareEditThreadStatus(genericRequest); 143 } else if (requestURI.equals("/editthreadstatusprocess")) { 144 threadWebHandler.processEditThreadStatus(genericRequest); 145 } else if (requestURI.equals("/editthreadtype")) { 146 threadWebHandler.prepareEditThreadType(genericRequest); 147 } else if (requestURI.equals("/editthreadtypeprocess")) { 148 threadWebHandler.processEditThreadType(genericRequest); 149 150 } else if (requestURI.equals("/modcp")) { 151 threadWebHandler.prepareModerationControlPanel(genericRequest); 152 } else if (requestURI.equals("/listrecentpendingthreads")) { 153 threadWebHandler.prepareListRecentDisabledThreads_limit(genericRequest); 154 } else if (requestURI.equals("/listthreadswithpendingposts")) { 155 threadWebHandler.prepareListEnableThreadsWithPendingPosts_inForum_limit(genericRequest); 156 } else if (requestURI.equals("/listrecentthreadswithpendingposts")) { 157 threadWebHandler.prepareListRecentEnableThreadsWithPendingPosts_limit(genericRequest); 158 } else if (requestURI.equals("/moderatependingthreads")) { 159 threadWebHandler.prepareModeratePendingThreads_inForum_limit(genericRequest); 160 } else if (requestURI.equals("/moderatependingthreadsprocess")) { 161 threadWebHandler.processModeratePendingThreads(genericRequest); 162 } else if (requestURI.equals("/moderatependingposts")) { 163 postWebHandler.prepareModeratePendingPosts_limit(genericRequest); 164 } else if (requestURI.equals("/moderatependingpostsprocess")) { 165 postWebHandler.processModeratePendingPosts(genericRequest); 166 167 } else if (requestURI.equals("/listpendingthreadsxml")) { 168 threadWebHandler.prepareListDisabledThreads_limit_xml(genericRequest); 169 170 } else if (requestURI.equals("/addpost")) { 171 postWebHandler.prepareAdd(genericRequest, genericResponse); 172 } else if (requestURI.equals("/addpostprocess")) { 173 postWebHandler.processAdd(genericRequest, genericResponse); 174 } else if (requestURI.equals("/editpost")) { 175 postWebHandler.prepareEdit(genericRequest); 176 } else if (requestURI.equals("/updatepost")) { 177 postWebHandler.processUpdate(genericRequest); 178 } else if (requestURI.equals("/printpost")) { 179 postWebHandler.preparePrintPost(genericRequest); 180 } else if (requestURI.equals("/deletepost")) { 181 postWebHandler.prepareDelete(genericRequest); 182 } else if (requestURI.equals("/deletepostprocess")) { 183 postWebHandler.processDelete(genericRequest); 184 185 } else if (requestURI.equals("/addattachment")) { 186 attachmentWebHandler.prepareAdd(genericRequest); 187 } else if (requestURI.equals("/addattachmentprocess")) { 188 attachmentWebHandler.processAdd(genericRequest, genericResponse); 189 } else if (requestURI.equals("/getattachment")) { 190 attachmentWebHandler.downloadAttachment(request, response); 191 return null; } else if (requestURI.equals("/deleteattachment")) { 193 attachmentWebHandler.prepareDelete(genericRequest); 194 } else if (requestURI.equals("/deleteattachmentprocess")) { 195 attachmentWebHandler.processDelete(genericRequest); 196 } else if (requestURI.equals("/editattachment")) { 197 attachmentWebHandler.prepareEdit(genericRequest); 198 } else if (requestURI.equals("/editattachmentprocess")) { 199 attachmentWebHandler.processEdit(genericRequest); 200 201 } else if (requestURI.equals("/myfavoritethread")) { 202 threadWebHandler.prepareList_inFavorite(genericRequest); 203 } else if (requestURI.equals("/addfavoritethreadprocess")) { 204 favoriteThreadWebHandler.processAdd(genericRequest); 205 } else if (requestURI.equals("/deletefavoritethreadprocess")) { 206 favoriteThreadWebHandler.processDelete(genericRequest); 207 208 } else if (requestURI.equals("/registermember")) { 209 memberWebHandler.prepareAdd(genericRequest); 210 } else if (requestURI.equals("/registermemberprocess")) { 211 memberWebHandler.processAdd(genericRequest, genericResponse); } else if (requestURI.equals("/viewmember")) { 213 memberWebHandler.prepareView_forPublic(genericRequest); } else if (requestURI.equals("/listmembers")) { 215 memberWebHandler.prepareListMembers_forPublic(genericRequest); } else if (requestURI.equals("/editmember")) { 217 memberWebHandler.prepareEdit_forCurrentMember(genericRequest); 218 } else if (requestURI.equals("/updatemember")) { 219 memberWebHandler.processUpdate(genericRequest, genericResponse); 220 } else if (requestURI.equals("/myprofile")) { 221 memberWebHandler.prepareView_forCurrentMember(genericRequest); 222 } else if (requestURI.equals("/changepassword")) { 223 onlineUser.getPermission().ensureIsAuthenticated(); } else if (requestURI.equals("/changepasswordprocess")) { 225 memberWebHandler.processUpdatePassword(genericRequest); 226 } else if (requestURI.equals("/changeemail")) { 227 memberWebHandler.prepareEditEmail(genericRequest); 228 } else if (requestURI.equals("/changeemailprocess")) { 229 memberWebHandler.processUpdateEmail(genericRequest); 230 } else if (requestURI.equals("/changesignature")) { 231 memberWebHandler.prepareEditSignature(genericRequest); 232 } else if (requestURI.equals("/changesignatureprocess")) { 233 memberWebHandler.processUpdateSignature(genericRequest, genericResponse); 234 } else if (requestURI.equals("/changeavatar")) { 235 memberWebHandler.prepareEditAvatar(genericRequest); 236 } else if (requestURI.equals("/uploadavatar")) { 237 memberWebHandler.uploadAvatar(mainServlet.getServletConfig(), genericRequest); 238 } else if (requestURI.equals("/updateavatar")) { 239 memberWebHandler.updateMemberAvatar(genericRequest); 240 } else if (requestURI.equals("/mywatch")) { 241 watchWebHandler.prepareList(genericRequest); 242 } else if (requestURI.equals("/addwatch")) { 243 watchWebHandler.prepareAdd(genericRequest); 244 } else if (requestURI.equals("/addwatchprocess")) { 245 watchWebHandler.processAdd(genericRequest); 246 } else if (requestURI.equals("/deletewatchprocess")) { 247 watchWebHandler.processDelete(genericRequest); 248 249 } else if (requestURI.equals("/mymessage")) { 250 messageWebHandler.prepareList(genericRequest); 251 } else if (requestURI.equals("/addmessage")) { 252 messageWebHandler.prepareAdd(genericRequest, genericResponse); 253 } else if (requestURI.equals("/addmessageprocess")) { 254 messageWebHandler.processAdd(genericRequest, genericResponse); 255 } else if (requestURI.equals("/viewmessage")) { 256 messageWebHandler.prepareViewMessage(genericRequest); 257 } else if (requestURI.equals("/sendmessageprocess")) { 258 messageWebHandler.processSendMessage(genericRequest); 259 } else if (requestURI.equals("/deletemessageprocess")) { 260 messageWebHandler.processDelete(genericRequest); 261 } else if (requestURI.equals("/processmessage")) { 262 messageWebHandler.processMessage(genericRequest); 263 } else if (requestURI.equals("/addmessageattachment")) { 264 pmAttachmentWebHandler.prepareAdd(genericRequest); 265 } else if (requestURI.equals("/addmessageattachmentprocess")) { 266 pmAttachmentWebHandler.processAdd(genericRequest, genericResponse); 267 } else if (requestURI.equals("/getpmattachment")) { 268 pmAttachmentWebHandler.downloadAttachment(request, response); 269 return null; 271 } else if (requestURI.equals("/mymessagefolder")) { 272 messageFolderWebHandler.prepareList(genericRequest); 273 } else if (requestURI.equals("/addmessagefolder")) { 274 messageFolderWebHandler.prepareAdd(genericRequest); 275 } else if (requestURI.equals("/addmessagefolderprocess")) { 276 messageFolderWebHandler.processAdd(genericRequest); 277 } else if (requestURI.equals("/deletemessagefolder")) { 278 messageFolderWebHandler.prepareDelete(genericRequest); 279 } else if (requestURI.equals("/deletemessagefolderprocess")) { 280 messageFolderWebHandler.processDelete(genericRequest); 281 } else if (requestURI.equals("/updatefolderorder")) { 282 messageFolderWebHandler.processUpdateOrder(genericRequest); 283 284 } else if (requestURI.equals("/listcompanies")) { 285 companyWebHandler.prepareListCompanies_forPublic(genericRequest); 286 } else if (requestURI.equals("/companyhomepage")) { 287 companyWebHandler.prepareView(genericRequest); 288 289 } else if (requestURI.equals("/search")) { 290 postWebHandler.prepareSearch(genericRequest); 291 } else if (requestURI.equals("/searchprocess")) { 292 postWebHandler.processSearch(genericRequest, genericResponse); 293 } else if (requestURI.equals("/rsssummary")) { 294 threadWebHandler.prepareRSSSummary(genericRequest); 295 } else if (requestURI.equals("/atom")) { 296 threadWebHandler.prepareListRSS(request); 297 } else if (requestURI.equals("/rss")) { 298 threadWebHandler.prepareListRSS(request); 299 } else if (requestURI.equals("/rss2")) { 300 threadWebHandler.prepareListRSS(request); 301 302 } else if (requestURI.equals("/getmvncoreimage")) { 303 MyUtil.writeMvnCoreImage(request, response); 304 return null; 305 } else if (requestURI.equals("/getmvnforumimage")) { 306 MyUtil.writeMvnForumImage(request, response); 307 return null; 308 309 } else if (requestURI.equals("/captchaimage")) { 310 MVNCaptchaService.getInstance().writeCaptchaImage(request, response); 311 return null; 312 } else if (requestURI.equals("/iforgotpasswords")) { 313 memberWebHandler.prepareForgotPassword(genericRequest); } else if (requestURI.equals("/forgotpasswordprocess")) { 315 memberWebHandler.forgotPassword(genericRequest); } else if (requestURI.equals("/resetpasswordprocess")) { 317 memberWebHandler.resetPassword(genericRequest); 319 } else if (requestURI.equals("/sendactivationcodeprocess")) { 320 memberWebHandler.sendActivateCode(genericRequest); } else if (requestURI.equals("/activatememberprocess")) { 322 memberWebHandler.activateMember(genericRequest); 324 } else if (requestURI.equals("/listonlineusers")) { 325 if (MVNForumConfig.getEnableOnlineUsers() == false) { 327 throw new AssertionException("Cannot list online users because ONLINE_USERS feature is disabled by administrator."); 328 } 329 onlineUserManager.getOnlineUser(request); 331 332 Action action = new ActionInUserModule(request, requestURI); onlineUserManager.updateOnlineUserAction(request, action); 335 336 boolean duplicateUsers = MVNForumConfig.getEnableDuplicateOnlineUsers(); 339 request.setAttribute("OnlineUserActions", onlineUserManager.getOnlineUserActions(0, duplicateUsers)); 341 } else if (requestURI.equals("/loginprocess")) { 342 if (MVNForumConfig.getEnableLogin() == false) { 343 throw new AuthenticationException(NotLoginException.LOGIN_DISABLED); 344 } 345 onlineUserManager.processLogin(request, response); 346 347 String url = ParamUtil.getParameter(request, "url"); 348 if (url.length() > 0) { 349 responseURI = url; 350 } else { 351 String originalRequest = ParamUtil.getAttribute(request.getSession(), ORIGINAL_REQUEST); 352 if (originalRequest.length() > 0) { 353 request.getSession().setAttribute(ORIGINAL_REQUEST, ""); 354 responseURI = originalRequest; 355 } 356 } 357 } else if (requestURI.equals("/logout")) { 358 onlineUserManager.logout(request, response); 359 request.setAttribute("Reason", "Logout successfully."); 360 } else if (requestURI.equals("/deletecookieprocess")) { 361 onlineUserManager.deleteCookie(request, response); 362 } else if (requestURI.equals("/getavatar")) { 363 memberWebHandler.getAvatar(request, response); 364 return null; } 366 } catch (AuthenticationException e) { 367 boolean shouldSaveOriginalRequest = (e.getReason()==NotLoginException.NOT_LOGIN) || (e.getReason()==NotLoginException.NOT_ENOUGH_RIGHTS); 370 if (shouldSaveOriginalRequest && (request.getMethod().equals("GET"))) { 371 String url = UserModuleConfig.getUrlPattern() + requestURI + "?" + StringUtil.getEmptyStringIfNull(request.getQueryString()); 372 request.getSession().setAttribute(ORIGINAL_REQUEST, url); 373 } 374 requestURI = MVNForumConfig.getRedirectLoginURL(); request.setAttribute("Reason", e.getReasonExplanation(onlineUser.getLocale())); 376 } catch (Exception e) { 377 if (e instanceof BadInputException) { 378 log.warn("Exception in UserModuleProcessor e = " + e.getMessage(), e); 380 } else if (e instanceof AssertionException) { 381 log.fatal("Exception in UserModuleProcessor e = " + e.getMessage(), e); 383 } else { 384 log.error("Exception in UserModuleProcessor [" + e.getClass().getName() + "] : " + e.getMessage(), e); 385 } 386 requestURI = "/error"; 387 String message = StringUtil.getEmptyStringIfNull(e.getMessage()); 388 if (message.length() == 0) { 389 message = e.getClass().getName(); 390 } 391 request.getSession().setAttribute("ErrorMessage", DisableHtmlTagFilter.filter(message)); 392 } 393 394 try { 396 401 Action action = new ActionInUserModule(request, requestURI); onlineUserManager.updateOnlineUserAction(request, action); 403 404 if (responseURI == null) { 406 URLMap map = urlMapHandler.getMap(requestURI, request, onlineUser.getLocaleName()); 407 responseURI = map.getResponse(); 408 } } catch (MissingURLMapEntryException e) { 410 log.error("Exception: missing urlmap entry in forum module: requestURI = " + requestURI); 411 responseURI = "/mvnplugin/mvnforum/user/error.jsp"; 412 request.getSession().setAttribute("ErrorMessage", DisableHtmlTagFilter.filter(e.getMessage())); 413 } catch (Exception e) { 414 responseURI = "/mvnplugin/mvnforum/user/error.jsp"; 417 request.getSession().setAttribute("ErrorMessage", DisableHtmlTagFilter.filter(e.getMessage())); 418 } 419 420 if (log.isDebugEnabled()) { 422 long duration = System.currentTimeMillis() - start; 423 log.debug("UserModuleProcessor : responseURI = " + responseURI + ". (" + duration + " ms)"); 424 } 425 426 return responseURI; 427 433 } 434 } 435 | Popular Tags |