a new servletfilter, which controls the caching-values in the http-header.\ra new...
[mir.git] / source / mir / core / ui / action / admin / AuthenticationAction.java
1 /*
2  * AuthenticationAction.java created on 05.09.2003
3  * 
4  * Copyright (C) 2001, 2002, 2003 The Mir-coders group
5  *
6  * This file is part of Mir.
7  *
8  * Mir is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * Mir is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with Mir; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  *
22  * In addition, as a special exception, The Mir-coders gives permission to link
23  * the code of this program with  any library licensed under the Apache Software License,
24  * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
25  * (or with modified versions of the above that use the same license as the above),
26  * and distribute linked combinations including the two.  You must obey the
27  * GNU General Public License in all respects for all of the code used other than
28  * the above mentioned libraries.  If you modify this file, you may extend this
29  * exception to your version of the file, but you are not obligated to do so.
30  * If you do not wish to do so, delete this exception statement from your version.
31  */
32 package mir.core.ui.action.admin;
33
34 import javax.servlet.ServletContext;
35 import javax.servlet.http.HttpServletRequest;
36 import javax.servlet.http.HttpServletResponse;
37 import javax.servlet.http.HttpSession;
38
39 import mir.config.MirPropertiesConfiguration;
40 import mir.config.MirPropertiesConfiguration.PropertiesConfigExc;
41 import mir.core.model.MirUser;
42 import mir.core.service.storage.UserService;
43 import mir.core.ui.action.DispatchAction;
44 import mir.core.ui.servlet.ServletConstants;
45 import multex.Failure;
46 import net.sf.hibernate.SessionFactory;
47
48 import org.apache.struts.action.ActionForm;
49 import org.apache.struts.action.ActionForward;
50 import org.apache.struts.action.ActionMapping;
51 import org.apache.struts.action.DynaActionForm;
52 import org.apache.struts.action.RedirectingActionForward;
53
54 /**
55  * AuthenticationAction
56  * @author idefix
57  * @version $Id: AuthenticationAction.java,v 1.3 2003/09/18 21:42:16 idfx Exp $
58  */
59 public class AuthenticationAction extends DispatchAction {
60         private MirPropertiesConfiguration _configuration;
61         
62         public AuthenticationAction(){
63                 try {
64                         _configuration = MirPropertiesConfiguration.instance();
65                 } catch (PropertiesConfigExc e) {
66                         throw new Failure("could not load config", e);
67                 }
68         }
69         
70         private ActionForward logon(ActionMapping actionMapping, ActionForm actionForm, 
71                 HttpServletRequest request, HttpServletResponse response)
72                 throws Exception {
73                 
74                 //retrieve the form input data                          
75                 DynaActionForm form = (DynaActionForm)actionForm;
76                 String login = (String) form.get("login");
77                 String password = (String) form.get("password");
78         
79                 if((login == null || login.trim().length() == 0) 
80                         && (password == null || password.trim().length() == 0)){
81                         //no input --> error
82                         return actionMapping.findForward("failed");
83                 }
84                 
85                 //access to persitence layer
86                 ServletContext context = this.getServlet().getServletContext();
87                 UserService userService = 
88                         new UserService((SessionFactory)context
89                                 .getAttribute(ServletConstants.SESSION_FACTORY));
90
91                 
92                 //try to retrieve user for the given values     
93                 MirUser mirUser = userService.loadUser(login, password);
94                 if(mirUser == null){
95                         //not existent user --> error
96                         return actionMapping.findForward("failed");
97                 }
98                 
99                 //add user to the session context
100                 HttpSession session = request.getSession();
101                 session.setAttribute(ServletConstants.USER, mirUser);
102                 
103                 //check if we have to redirect the user
104                 String requestUri = 
105                         (String) session.getAttribute(ServletConstants.REDIRECT_ACTION);
106                         System.out.println(requestUri);
107                 if(requestUri != null && requestUri.indexOf("index") == -1 
108                         && requestUri.indexOf("logon") == -1){
109                         
110                         // we have to redirect the user
111                         requestUri = requestUri.substring(requestUri.lastIndexOf("/"));
112
113                         //retrieve the correct action name
114                         String queryString = 
115                                 (String) session.getAttribute(ServletConstants.REDIRECT_QUERY_STRING);
116                         if(queryString != null){
117                                 requestUri = requestUri + "?" +queryString;
118                         }
119                         
120                         //construct a redirect
121                         RedirectingActionForward actionForward = 
122                                 new RedirectingActionForward(requestUri);
123                         System.out.println("redirect");
124                         //return the redirect
125                         return actionForward;
126                 }
127                 
128                 //normal redirect to the startpage
129                 System.out.println("success");
130                 return actionMapping.findForward("success");    
131         }
132         
133         private ActionForward logoff(ActionMapping actionMapping, ActionForm actionForm, 
134                 HttpServletRequest request, HttpServletResponse response)
135                 throws Exception {
136                 
137                 //kill session
138                 HttpSession session = request.getSession();
139                 session.setAttribute(ServletConstants.USER, null);
140                 session.invalidate();
141                 
142                 //return to the logon form
143                 return actionMapping.findForward("logon");
144         }
145 }