/*
 * $Id: CheckLoginTag.java,v 1.22 2004/10/28 19:41:58 marbobo Exp $
 *
 * Copyright (c) Siemens AG 2008 
 *           (c) Universität Paderborn 2008 
 * Licensed under EUPL 1.1. 
 *
 * $Log: CheckLoginTag.java,v $
 * Revision 1.22  2004/10/28 19:41:58  marbobo
 * + Bugfix wegen Kontextpfad
 * + Anpassung wegen Loginseite
 *
 * Revision 1.21  2004/10/28 14:17:49  marbobo
 * + Kategorieparameter berücksichtigen
 *
 * Revision 1.20  2004/05/10 16:03:18  jonyp
 * checks for default login page
 *
 * Revision 1.19  2004/05/10 13:27:56  jonyp
 * added feature to forward to a defaultLoginPage (defined in SysParameter)
 *
 * Revision 1.18  2004/03/13 19:15:13  marbobo
 * Unbenutze lokale Variablen projektweit entsorgt
 *
 * Revision 1.17  2004/02/18 01:18:57  marbobo
 * /sysLink.do anpassung
 *
 * Revision 1.16  2003/12/24 10:12:04  bigmac
 * Projektweite Import-Optimierung
 *
 * Revision 1.15  2003/10/20 18:49:25  marbobo
 * sysLink bugfix
 *
 * Revision 1.14  2003/10/13 08:12:31  bigmac
 * Überflüssige Abfrage auf Gastuser entfernt
 *
 * Revision 1.13  2003/10/08 01:06:31  marbobo
 * +berücksichtigung von anchor
 *
 * Revision 1.12  2003/09/08 16:59:05  marbobo
 * *** empty log message ***
 *
 * Revision 1.11  2003/08/10 21:50:19  bigmac
 * *** empty log message ***
 *
 * Revision 1.10  2003/08/02 16:13:37  bigmac
 * *** empty log message ***
 *
 * Revision 1.9  2003/07/23 10:45:34  marbobo
 * -unnötige Importanweisungen entfernt
 *
 * Revision 1.8  2003/07/10 22:27:17  marbobo
 * TO-DO-Eintrag entfernt
 *
 * Revision 1.7  2003/05/08 18:11:28  marbobo
 * Uservariable als "loggedUser" eingefügt
 *
 * Revision 1.6  2003/05/08 16:10:24  vchris
 * Anpassungen bzgl. neuem ACL-Dialog
 *
 * Revision 1.5  2003/04/02 10:34:51  bigmac
 * *** empty log message ***
 *
 * Revision 1.4  2002/11/05 14:52:52  koppy
 * UNIX lf
 *
 * Revision 1.3  2002/11/04 09:55:19  koppy
 * logging
 *
 * Revision 1.2  2002/10/22 17:50:52  koppy
 * bugfix
 *
 * Revision 1.1  2002/10/21 14:36:40  bigmac
 * *** empty log message ***
 *
 * Revision 1.2  2002/10/21 13:52:42  koppy
 * LoginTag --> CheckLoginTag
 *
 * Revision 1.1  2002/10/21 09:16:39  koppy
 * LoginTag --> CheckLoginTag
 *
 * Revision 1.1  2002/10/15 13:50:54  koppy
 * Initiale Version
 *
 */
package vkc.view.tag;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;

import vkc.db.entities.VKCUser;
import vkc.util.ServletUtils;
import vkc.view.WebShare;

/**
 * Tag für den Check, ob ein VKCUser in der aktuellen Session eingeloggt ist.
 * Falls nicht, wird auf eine Login-Seite weitergeleitet.
 *
 * @author koppy
 */
public class CheckLoginTag extends TagSupport {
    /** Name der User Bean */
    private String name = WebShare.USER_KEY;

    /** Name der Login-Seite */
    private String loginPage = "";

    /**
     * Name der Seite auf die nach erfolgreichem Login weitergeleitet werden
     * soll
     */
    private String referer = null;
    

    /**
     * Konstruktor
     */
    public CheckLoginTag() {
        super();
    }

    /**
     * Setzt die Login-Seite für die Weiterleitung
     *
     * @param loginPage Name der Login-Seite
     */
    public void setLoginPage( String loginPage ) {
        this.loginPage = loginPage;
    }

    public String getLoginPage() {
        return loginPage;
    }
    
    /**
     * Setzt den Namen der Bean
     *
     * @param name Name der Bean
     */
    public void setName( String name ) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
    
    /**
     * Setzt die Seite, zu der bei erfolgreichem Login weitergeleitet wird
     */
    public void setReferer( String referer ) {
        this.referer = referer;
    }

    public String getReferer() {
        return referer;
    }
    
    /**
     * Aufruf der Methode am Anfang des Tags
     */
    public int doStartTag() throws JspException {
        return SKIP_BODY;
    }

    /**
     * Aufruf der Methode am Anfang des LoginTags
     */
    public int doEndTag() throws javax.servlet.jsp.JspTagException {
        // Ist ein gültiger User eingeloggt ?
        HttpSession session = pageContext.getSession();
		VKCUser user = (VKCUser)session.getAttribute( getName() );

        if ( user != null ) {
            return EVAL_PAGE;
        }

        // Referer in der Session speichern
        if ( getReferer() == null ) {
            setReferer( ServletUtils.getRequestedPath( (HttpServletRequest) pageContext.getRequest() ) );
        }

        try {
            // Ansonsten Kontrolle an dem VKCRequestProcessor weitergeben
            HttpServletResponse response = (HttpServletResponse)pageContext.getResponse();
            HttpServletRequest  request  = (HttpServletRequest)pageContext.getRequest();
            String query = request.getQueryString() == null ? "" : "?" + request.getQueryString();
            response.sendRedirect( request.getContextPath() + "/fakeURL.do" + query );
        } catch ( Exception e ) {
            throw new JspTagException( "Exception forwarding to VKCRequestProcessor : " + e.toString() );
        }

        return SKIP_PAGE;
    }

    /**
     * Allokierte Resourcen wieder freigeben
     */
    public void release() {
        super.release();

        loginPage = WebShare.LOGIN_PAGE;
        name = WebShare.USER_KEY;
        referer = null;
    }
}