001: /*
002: * CoadunationLib: The coaduntion implementation library.
003: * Copyright (C) 2006 Rift IT Contracting
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
018: *
019: * UserStoreManager.java
020: *
021: * This object is responsible for managing access to the user store objects. It
022: * will not run as a singleton. This will prevent un-wanted threads and objects
023: * from accessing it directly. This means it has to be initialized intentionally
024: * and at the correct place.
025: */
026:
027: // package path
028: package com.rift.coad.lib.security.user;
029:
030: // java imports
031: import java.util.Map;
032: import java.util.HashMap;
033: import java.util.StringTokenizer;
034: import java.util.Vector;
035: import java.util.Iterator;
036:
037: // logging import
038: import org.apache.log4j.Logger;
039:
040: // coadunation imports
041: import com.rift.coad.lib.configuration.ConfigurationFactory;
042: import com.rift.coad.lib.configuration.Configuration;
043: import com.rift.coad.lib.security.UserSession;
044:
045: /**
046: * This object is responsible for managing access to the user store objects. It
047: * will not run as a singleton. This will prevent un-wanted threads and objects
048: * from accessing it directly. This means it has to be initialized intentionally
049: * and at the correct place.
050: *
051: * @author Brett Chaldecott
052: */
053: public class UserStoreManager {
054:
055: // the class constants
056: private final static String USER_STORE_CONNECTORS = "connectors";
057:
058: // the classes private member variables
059: private Logger log = Logger.getLogger(UserStoreManager.class
060: .getName());
061: private Map connectors = null;
062:
063: /**
064: * Creates a new instance of UserStoreManager.
065: *
066: * @exception UserException
067: */
068: public UserStoreManager() throws UserException {
069: try {
070: Configuration config = ConfigurationFactory.getInstance()
071: .getConfig(this .getClass());
072: StringTokenizer connectorList = new StringTokenizer(config
073: .getString(USER_STORE_CONNECTORS), ",");
074: connectors = new HashMap();
075: while (connectorList.hasMoreTokens()) {
076: String connectorName = connectorList.nextToken();
077: try {
078: log.info("Load the connector [" + connectorName
079: + "]");
080: UserStoreConnector connector = (UserStoreConnector) Class
081: .forName(connectorName).newInstance();
082: connectors.put(connector.getName(), connector);
083: } catch (Exception ex) {
084: log.error("Failed to load the connector ["
085: + connectorName + "]", ex);
086: }
087: }
088: } catch (Exception ex) {
089: throw new UserException("Failed to load the user stores : "
090: + ex.getMessage(), ex);
091: }
092: }
093:
094: /**
095: * This method will return the list of handlers for the given auth type.
096: *
097: * @return The list of handlers for the given authentication type.
098: * @param authType The type of authentication that is required.
099: * @exception UserException
100: */
101: public Vector getLoginHandlers(String authType)
102: throws UserException {
103: try {
104: Vector handlerList = new Vector();
105: for (Iterator iter = connectors.keySet().iterator(); iter
106: .hasNext();) {
107: UserStoreConnector connector = (UserStoreConnector) connectors
108: .get(iter.next());
109: if (connector.handleAuthType(authType)) {
110: handlerList
111: .add(connector.getLoginHandler(authType));
112: }
113: }
114: return handlerList;
115: } catch (Exception ex) {
116: throw new UserException("Fail to retrieve the handlers : "
117: + ex.getMessage(), ex);
118: }
119: }
120:
121: /**
122: * This method will return the user information for the requested user name.
123: *
124: * @return The user object containing the user information
125: * @param username The name of the user.
126: * @exception UserException
127: */
128: public UserSession getUserInfo(String username)
129: throws UserException {
130: try {
131: for (Iterator iter = connectors.keySet().iterator(); iter
132: .hasNext();) {
133: UserStoreConnector connector = (UserStoreConnector) connectors
134: .get(iter.next());
135: UserSession userInfo = connector.getUserInfo(username);
136: if (userInfo != null) {
137: return userInfo;
138: }
139: }
140: throw new UserException(
141: "Failed to retrieve the user info for [" + username
142: + "]");
143: } catch (Exception ex) {
144: throw new UserException("Fail to retrieve the handlers : "
145: + ex.getMessage(), ex);
146: }
147: }
148: }
|