JwmaAdminController.java :  » Web-Mail » Jwma » dtw » webmail » Java Open Source

Java Open Source » Web Mail » Jwma 
Jwma » dtw » webmail » JwmaAdminController.java
/***
 * jwma Java WebMail
 * Copyright (c) 2000-2003 jwma team
 *
 * jwma is free software; you can distribute and use this source
 * under the terms of the BSD-style license received along with
 * the distribution.
 ***/
package dtw.webmail;


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import org.apache.log4j.Logger;
import org.apache.log4j.NDC;

import dtw.webmail.util.*;
import dtw.webmail.model.*;
import dtw.webmail.admin.*;

/**
 * Class extending the <tt>HttpServlet</tt> to implement
 * the Admin controller of jwma.
 * <p>
 * Please see the related documentation for more detailed
 * information on process flow and functionality.
 *
 * @author Dieter Wimberger
 * @version 0.9.7 07/02/2003
 */
public class JwmaAdminController extends HttpServlet {

  //logging
  private static Logger log = Logger.getLogger(JwmaAdminController.class);

  /**
   * Initializes the servlet when it is loaded by the
   * servlet engine.
   * <p>This implementation just calls its superclass
   * implementation.
   *
   * @throws ServletException if initialization fails.
   */
  public void init(ServletConfig config)
      throws ServletException {

    super.init(config);
  }//init


  /**
   * Handles the incoming requests.
   * <p>
   *
   * @param req a reference to the actual <tt>HttpServletRequest</tt>
   *        instance.
   * @param res a reference to the actual <tt>HttpServletResponse</tt>
   *        instance.
   *
   * @throws ServletException if servlet related operations fail.
   * @throws IOException if i/o operations fail.
   */
  public void service(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException {

    try {
      NDC.push(req.getRemoteHost());
      //1. Handle Session
      HttpSession websession = req.getSession(true);
      Object o = websession.getValue("jwma.session");
      String acton = req.getParameter("acton");
      String dome = req.getParameter("todo");

      //2. Ensure valid jwma session
      JwmaSession session =
          ((o == null)? new JwmaSession(websession):((JwmaSession) o));
      session.setRequest(req);
      session.setResponse(res);
      session.setWebSession(websession);

      //3. Redirect invalid web sessions
      if (!session.isValidWebSession()) {
        session.redirect(JwmaKernel.LOGIN_VIEW);
      } else {

        //dispatch all actions that need a valid action.
        try {
          if (acton == null || acton.equals("")) {
            throw new JwmaException("request.target.missing");
          } else if (dome == null || dome.equals("")) {
            throw new JwmaException("request.action.missing");
          } else if (acton.equals("system")) {
            doDispatchSystemActions(session, dome);
          } else {
            //ensure authentication & administrator
            session.ensureAuthenticated();
            session.ensureAdministrator();

            if (acton.equals("session")) {
              //doDispatchSessionActions
            } else if (acton.equals("preferences")) {
              //doDispatchPreferencesActions(session,dome);
            } else if (acton.equals("settings")) {
              //doDispatchSettingsActions(session,dome);
            } else {
              throw new JwmaException("request.target.invalid");
            }
          }
        } catch (JwmaException ex) {
          //1. if not authenticated forward to login page
          if (!session.isAuthenticated()) {
            session.redirect(JwmaKernel.LOGIN_VIEW);
          } else {
            String message = ex.getMessage();
            //oneliner resolving of key to message in
            message = JwmaKernel.getReference().getLogMessage("jwma.usererror") +
                JwmaKernel.getReference().getErrorMessage(message);

            //log exception with description and trace if inlined exception
            //available, else with stacktrace.
            if (ex.hasException()) {
              log.error(message, ex.getException());
            } else {
              log.error(message, ex);
            }
            //store error
            session.storeBean("jwma.error", ex);
            //redirect last view with inlined error or
            //to error page.
            if (ex.isInlineError()) {
              session.redirectToActual();
            } else {
              session.redirect(JwmaKernel.ERROR_VIEW);
            }
          }
        }
      }
    } finally {
      NDC.pop();
    }
  }//service

  /*** Dispatchers ***************************************************/

  /**
   * Dispatches actions targeting a <tt>session</tt>.
   *
   * @param session a <tt>JwmaAdminSession</tt> instance.
   * @param dome the task as <tt>String</tt>.
   *
   * @throws JwmaException if it fails to dispatch the request to a
   *         method (i.e. invalid request), or the action method fails
   *         to execute the task.
   *
   private void doDispatchSessionActions(JwmaAdminSession session,String dome)
   throws JwmaException {

   if(dome.equals("logout")) {
   doLogout(session);
   } else if(dome.equals("login")) {
   String user=session.getRequest().getParameter("username");
   String passwd=session.getRequest().getParameter("password");
   doLogin(session,user,passwd);
   return;
   } else if(dome.equals("redirect")) {
   String view=session.getRequest().getParameter("view");
   doRedirect(session,view);
   } else {
   throw new JwmaException("session.action.invalid");
   }
   }//doDispatchSessionActions
   */

  /**
   * Dispatches actions targeting the <tt>system</tt>.
   *
   * @param session a <tt>JwmaAdminSession</tt> instance.
   * @param dome the task as <tt>String</tt>.
   *
   * @throws JwmaException if it fails to dispatch the request to a
   *         method (i.e. invalid request), or the action method fails
   *         to execute the task.
   */
  private void doDispatchSystemActions(JwmaSession session, String dome)
      throws JwmaException {

    if (dome.equals("status")) {
      doStatus(session);
    } else {
      throw new JwmaException("session.action.invalid");
    }
  }//doDispatchSystemActions

  /*** End Dispatchers *************************************************/




  /*** Session Actions  ************************************************/

  /**
   * Handles an admin login.
   *
   * @param session actual <tt>JwmaAdminSession</tt> instance.
   * @param username of the user as <tt>String</tt>.
   * @param password of the user as <tt>String</tt>.
   *
   *
   * @throws JwmaException if it fails to execute properly.
   *
   private void doLogin(JwmaAdminSession session,String user, String passwd)
   throws JwmaException {

   if(session.authenticate(user,passwd)) {
   session.redirect(JwmaKernel.ADMIN_MENU_VIEW);
   } else {
   throw new JwmaException("session.login.authentication");
   }
   }//doLogin

   /**
   * Logs the admin out of the admin session.
   *
   * @param session a <tt>JwmaAdminSession</tt> instance.
   *
   * @throws JwmaException if it fails to execute properly.
   *
   private void doLogout(JwmaAdminSession session)
   throws JwmaException {

   try{
   //remove authentication and beans
   session.end();
   session.redirect(JwmaKernel.ADMIN_MENU_VIEW);
   } catch (Exception ex) {
   throw new JwmaException("session.logout.failed");
   }
   }//doLogout
   */

  /**
   * Redirects a request to a given & possible view,
   * to the last view or to the menu view otherwise
   * <i><b>Note:</b> the bean instances are updated!</i>
   *
   * @param session a <tt>JwmaAdminSession</tt> instance.
   * @param view the view as <tt>String</tt>.
   */
  private void doRedirect(JwmaSession session, String view) {
    try {
      if (view != null) {
        //clean whitespace
        view.trim();
        if (view.equals("last")) {
          session.redirectToLast();
          return;
        } else if (view.equals("actual")) {
          session.redirectToActual();
          return;
        } else if (view.equals("preferences")) {

          return;
        } else if (view.equals("settings")) {
          return;
        } else if (view.equals("menu")) {
          session.redirect(JwmaKernel.ADMIN_MENU_VIEW);
          return;
        }
      }
      //if fall through here display menu
      session.redirect(JwmaKernel.ADMIN_MENU_VIEW);
      return;
    } catch (Exception ex) {
      //?
      //JwmaKernel.getReference().debugLog().writeStackTrace(ex);
    }
  }//doRedirect


  /*** End Session Actions  ***********************************************/

  /**
   * Prepares for displaying the status page.
   *
   * @param session a <tt>JwmaAdminSession</tt> instance.
   *
   * @throws JwmaException if it fails to execute properly.
   */
  private void doStatus(JwmaSession session)
      throws JwmaException {

    if (JwmaKernel.getReference().isJwmaStatusEnabled()) {
      session.storeBean("jwma.admin.status", JwmaStatus.getReference());
      session.redirect(JwmaKernel.ADMIN_STATUS_VIEW);
    } else {
      throw new JwmaException("system.status.disabled");
    }

  }//doStatus

  /*** System Actions  ****************************************************/



  /*** End System Actions  ************************************************/


  /**
   * Returns servlet info as <tt>String</tt>.
   *
   * @return Info about this servlet as <tt>String</tt>.
   */
  public String getServletInfo() {
    return "jwma (Java WebMail) AdminController Servlet";
  }//getServletInfo()

}//class JwmaAdminController
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.