Package org.opencustomer.webapp.module.common

Source Code of org.opencustomer.webapp.module.common.LogonAction

/*******************************************************************************
* ***** BEGIN LICENSE BLOCK Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is the OpenCustomer CRM.
*
* The Initial Developer of the Original Code is Thomas Bader (Bader & Jene
* Software-Ingenieurb�ro). Portions created by the Initial Developer are
* Copyright (C) 2005 the Initial Developer. All Rights Reserved.
*
* Contributor(s): Thomas Bader <thomas.bader@bader-jene.de>
*
* ***** END LICENSE BLOCK *****
*/

package org.opencustomer.webapp.module.common;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.opencustomer.connector.ldap.auth.LdapUtil;
import org.opencustomer.db.vo.system.UserVO;
import org.opencustomer.framework.webapp.struts.Action;
import org.opencustomer.util.configuration.SystemConfiguration;
import org.opencustomer.util.configuration.UserConfiguration;
import org.opencustomer.util.logon.LdapLogon;
import org.opencustomer.util.logon.LocalLogon;
import org.opencustomer.util.logon.Logon;
import org.opencustomer.webapp.Globals;
import org.opencustomer.webapp.auth.Authenticator;
import org.opencustomer.webapp.auth.AuthenticatorUtility;
import org.opencustomer.webapp.util.menu.Menu;
import org.opencustomer.webapp.util.menu.MenuFactory;
import org.opencustomer.webapp.util.menu.MenuItem;

/**
*
* @author thbader
*/
public final class LogonAction extends Action<LogonForm>
{
    private static Logger log = Logger.getLogger(LogonAction.class);

    private static final int LOGIN_NOK = 0;

    private static final int LOGIN_OK = 1;

    /**
     * Method which have to be overwritten to handle the request.
     *
     * @param servlet The ActionServlet instance owning this Action
     * @param mapping The ActionMapping used to select this instance
     * @param actionForm The optional ActionForm bean for this request (if any)
     * @param request The servlet request we are processing
     * @param response The servlet response we are processing
     * @param log the log to save messages
     * @exception IOException if an input/output error occurs
     * @exception ServletException if a servlet exception occurs
     */
    public ActionForward execute(ActionMapping mapping, LogonForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
        ActionMessages errors = new ActionMessages();

        int forward = LOGIN_NOK;

        if (AuthenticatorUtility.isLoggedIn(request)) {
            if (log.isInfoEnabled())
                log.info("user session is already active ... login is not necessary");

            forward = LOGIN_OK;
        } else if (form.getDoLogin() != null) {  
            Logon logon;
           
            if(!SystemConfiguration.getInstance().getBooleanValue(SystemConfiguration.Key.LDAP_AUTHENTICATION_ENABLED)){
                if(log.isDebugEnabled())
                    log.debug("do local login");
                logon = new LocalLogon();
            } else {
                if(log.isDebugEnabled())
                    log.debug("do ldap login");
                logon = new LdapLogon();         
            }
           
            UserVO user = logon.validate(form.getLogin(), form.getPassword(), request.getRemoteAddr(), Logon.Type.WEBAPP, errors);
           
            if((user == null || !errors.isEmpty()) && SystemConfiguration.getInstance().getBooleanValue(SystemConfiguration.Key.LDAP_AUTHENTICATION_ENABLED) && !LdapUtil.getInstance().testLdapConnection()) {
                errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("module.common.login.error.noLdapConnection"));
            }
           
            if(errors.isEmpty()) {
                request.getSession().setAttribute(Globals.USER_KEY, user);
                request.getSession().setAttribute(Globals.AUTHENTICATOR_KEY, new Authenticator(user));
                request.getSession().setAttribute(org.apache.struts.Globals.LOCALE_KEY, user.getLocale());
                request.getSession().setAttribute(Globals.CONFIGURATION_KEY, new UserConfiguration(user));
               
                MenuFactory menuFactory = (MenuFactory)request.getSession().getServletContext().getAttribute(Globals.MENU_FACTORY_KEY);
                Menu menu = menuFactory.getCustomizedMenu(AuthenticatorUtility.getAuthenticator(request));
                request.getSession().setAttribute(Globals.MENU_KEY, menu);

                forward = LOGIN_OK;
            }
        }

        if (!errors.isEmpty())
            saveErrors(request, errors);

        if (forward == LOGIN_OK) {
            Menu menu     = (Menu) request.getSession().getAttribute(Globals.MENU_KEY);
           
            if(form.getDeeplink() != null) {
                MenuItem item = null;
               
                if(log.isDebugEnabled())
                    log.debug("execute deeplink");

                if("EVENT".equals(form.getDeeplink())) {
                    if(log.isDebugEnabled()) {
                        log.debug("prepare deeplink to event with id: "+form.getId());
                    }
                    item   = menu.findItem("/calendar/showMainCalendar");
                } else if("JOB".equals(form.getDeeplink())) {
                    if(log.isDebugEnabled()) {
                        log.debug("prepare deeplink to job with id: "+form.getId());
                    }
                    item   = menu.findItem("/home/jobs");
                }

                if(item != null) {
                    if(log.isDebugEnabled())
                        log.debug("active menu item with id: "+item.getId());
                       
                    menu.activate(item.getId());
                }
            }

            return new ActionForward(getActionURL(request, menu.getActiveItem().getAction()));
        else {
            return mapping.getInputForward();
        }
    }

    private String getActionURL(HttpServletRequest request, String path)
    {
        String pattern = (String) request.getSession().getServletContext().getAttribute(org.apache.struts.Globals.SERVLET_KEY);

        StringBuilder url = new StringBuilder();

        if (pattern.startsWith("*."))
        {
            url.append(path);
            url.append(pattern.substring(1));

        }
        else if (pattern.endsWith("/*"))
        {
            url.append(pattern.substring(0, pattern.length() - 2));
            url.append(path);

        }
        else if (pattern.equals("/"))
        {
            url.append(path);
        }

        return url.toString();
    }
}
TOP

Related Classes of org.opencustomer.webapp.module.common.LogonAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.