001: package org.apache.turbine.modules.actions;
002:
003: /*
004: * Licensed to the Apache Software Foundation (ASF) under one
005: * or more contributor license agreements. See the NOTICE file
006: * distributed with this work for additional information
007: * regarding copyright ownership. The ASF licenses this file
008: * to you under the Apache License, Version 2.0 (the
009: * "License"); you may not use this file except in compliance
010: * with the License. You may obtain a copy of the License at
011: *
012: * http://www.apache.org/licenses/LICENSE-2.0
013: *
014: * Unless required by applicable law or agreed to in writing,
015: * software distributed under the License is distributed on an
016: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017: * KIND, either express or implied. See the License for the
018: * specific language governing permissions and limitations
019: * under the License.
020: */
021:
022: import org.apache.commons.configuration.Configuration;
023:
024: import org.apache.commons.lang.StringUtils;
025:
026: import org.apache.commons.logging.Log;
027: import org.apache.commons.logging.LogFactory;
028:
029: import org.apache.turbine.Turbine;
030: import org.apache.turbine.TurbineConstants;
031: import org.apache.turbine.modules.Action;
032: import org.apache.turbine.om.security.User;
033: import org.apache.turbine.services.security.TurbineSecurity;
034: import org.apache.turbine.util.RunData;
035: import org.apache.turbine.util.security.DataBackendException;
036: import org.apache.turbine.util.security.TurbineSecurityException;
037:
038: /**
039: * This is where we authenticate the user logging into the system
040: * against a user in the database. If the user exists in the database
041: * that users last login time will be updated.
042: *
043: * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
044: * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
045: * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
046: * @version $Id: LoginUser.java 534527 2007-05-02 16:10:59Z tv $
047: */
048: public class LoginUser extends Action {
049: /** CGI Parameter for the user name */
050: public static final String CGI_USERNAME = "username";
051:
052: /** CGI Parameter for the password */
053: public static final String CGI_PASSWORD = "password";
054:
055: /** Logging */
056: private static Log log = LogFactory.getLog(LoginUser.class);
057:
058: /**
059: * Updates the user's LastLogin timestamp, sets their state to
060: * "logged in" and calls RunData.setUser() . If the user cannot
061: * be authenticated (database error?) the user is assigned
062: * anonymous status and, if tr.props contains a TEMPLATE_LOGIN,
063: * the screenTemplate is set to this, otherwise the screen is set
064: * to SCREEN_LOGIN
065: *
066: * @param data Turbine information.
067: * @exception TurbineSecurityException could not get instance of the
068: * anonymous user
069: */
070: public void doPerform(RunData data) throws TurbineSecurityException {
071: String username = data.getParameters().getString(CGI_USERNAME,
072: "");
073: String password = data.getParameters().getString(CGI_PASSWORD,
074: "");
075:
076: if (StringUtils.isEmpty(username)) {
077: return;
078: }
079:
080: try {
081: // Authenticate the user and get the object.
082: User user = TurbineSecurity.getAuthenticatedUser(username,
083: password);
084:
085: // Store the user object.
086: data.setUser(user);
087:
088: // Mark the user as being logged in.
089: user.setHasLoggedIn(Boolean.TRUE);
090:
091: // Set the last_login date in the database.
092: user.updateLastLogin();
093:
094: // This only happens if the user is valid; otherwise, we
095: // will get a valueBound in the User object when we don't
096: // want to because the username is not set yet. Save the
097: // User object into the session.
098: data.save();
099:
100: /*
101: * If the setPage("template.vm") method has not
102: * been used in the template to authenticate the
103: * user (usually Login.vm), then the user will
104: * be forwarded to the template that is specified
105: * by the "template.home" property as listed in
106: * TR.props for the webapp.
107: */
108:
109: } catch (Exception e) {
110: Configuration conf = Turbine.getConfiguration();
111:
112: if (e instanceof DataBackendException) {
113: log.error(e);
114: }
115:
116: // Set Error Message and clean out the user.
117: data.setMessage(conf.getString(
118: TurbineConstants.LOGIN_ERROR, ""));
119: data.setUser(TurbineSecurity.getAnonymousUser());
120:
121: String loginTemplate = conf
122: .getString(TurbineConstants.TEMPLATE_LOGIN);
123:
124: if (StringUtils.isNotEmpty(loginTemplate)) {
125: // We're running in a templating solution
126: data.setScreenTemplate(loginTemplate);
127: } else {
128: data.setScreen(conf
129: .getString(TurbineConstants.SCREEN_LOGIN));
130: }
131: }
132: }
133: }
|