All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sakaiproject.component.imsent.user.IMSEntUserDirectoryProvider Maven / Gradle / Ivy

There is a newer version: 23.2
Show newest version
/**********************************************************************************
 * $URL$
 * $Id$
 ***********************************************************************************
 *
 * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 The Sakai Foundation
 *
 * Licensed under the Educational Community License, Version 2.0 (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.opensource.org/licenses/ECL-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 **********************************************************************************/

package org.sakaiproject.component.imsent.user;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import lombok.extern.slf4j.Slf4j;

import org.sakaiproject.db.api.SqlReader;
import org.sakaiproject.db.api.SqlService;
import org.sakaiproject.user.api.UserDirectoryProvider;
import org.sakaiproject.user.api.UserEdit;

/**
 * 

* IMSEntUserDirectoryProvider is a sample UserDirectoryProvider. *

*/ @Slf4j public class IMSEntUserDirectoryProvider implements UserDirectoryProvider { /********************************************************************************************************************************************************************************************************************************************************** * Dependencies and their setter methods *********************************************************************************************************************************************************************************************************************************************************/ /** Dependency: SqlService */ protected SqlService m_sqlService = null; /** * Dependency: SqlService. * * @param service * The SqlService. */ public void setSqlService(SqlService service) { log.info("Setting Sql Service"); m_sqlService = service; } /** Configuration: to run the ddl on init or not. */ // TODO: Set back to false protected boolean m_autoDdl = true; /** * Configuration: to run the ddl on init or not. * * @param value * the auto ddl value. */ public void setAutoDdl(String value) { m_autoDdl = new Boolean(value).booleanValue(); } /********************************************************************************************************************************************************************************************************************************************************** * Init and Destroy *********************************************************************************************************************************************************************************************************************************************************/ /** * Final initialization, once all dependencies are set. */ public void init() { try { log.info("init()"); } catch (Exception t) { log.info(this + ".init() - failed attempting to log " + t); log.warn(".init(): " + t); } try { // if we are auto-creating our schema, check and create if (m_autoDdl && m_sqlService != null) { m_sqlService.ddl(this.getClass().getClassLoader(), "imsent_provider"); log.info("Back from autoddl"); } // Check to see if we are ready to run... if (!isReady()) { log.warn(".init(): Not properly initialized."); } } catch (Exception t) { log.warn(".init(): ", t); m_isReady = false; } // Check to see if we are ready to run... if (!isReady()) { log.warn(".init(): Not properly initialized."); } } // init /** * Returns to uninitialized state. You can use this method to release resources thet your Service allocated when Turbine shuts down. */ public void destroy() { log.info("destroy()"); } // destroy /** * Determine if we are in a ready-to-go-state */ private boolean m_isReady = true; private boolean m_firstCheck = true; private boolean isReady() { // Only check things once if (!m_firstCheck) return m_isReady; m_firstCheck = false; boolean retval = true; if (m_sqlService == null) { log.warn("sqlService injection failed"); retval = false; } // Check all other injections here // Return the value and set m_isReady = retval; return retval; } /********************************************************************************************************************************************************************************************************************************************************** * UserDirectoryProvider implementation *********************************************************************************************************************************************************************************************************************************************************/ public class SakaiIMSUser { // From User public String eMail = null; public String displayName = null; public String sortName = null; public String firstName = null; public String lastName = null; // From Resource // public ResourceProperties getProperties; public String id = null; // For use locally public String password = null; // For debugging public String toString() { String rv = "SakaiIMSUser Email=" + eMail + " DisplayName=" + displayName + " SortName=" + sortName + " FirstName=" + firstName + " LastName=" + lastName + " Id=" + id + " Password=" + password; return rv; } } public SakaiIMSUser retrieveUser(final String userId, boolean isEmail) { String statement; if (userId == null) return null; if (isEmail) { // 1 2 3 4 5 6 7 statement = "select USERID,FN,SORT,PASSWORD,FAMILY,GIVEN,EMAIL from IMSENT_PERSON where EMAIL = ?"; } else { statement = "select USERID,FN,SORT,PASSWORD,FAMILY,GIVEN,EMAIL from IMSENT_PERSON where USERID = ?"; } Object fields[] = new Object[1]; fields[0] = userId; log.info("SQL:" + statement); List rv = m_sqlService.dbRead(statement, fields, new SqlReader() { public Object readSqlResultRecord(ResultSet result) { try { SakaiIMSUser rv = new SakaiIMSUser(); rv.id = result.getString(1); rv.displayName = result.getString(2); rv.sortName = result.getString(3); if (rv.sortName == null) rv.sortName = rv.displayName; rv.password = result.getString(4); rv.lastName = result.getString(5); rv.firstName = result.getString(6); rv.eMail = result.getString(7); log.info("Inside reader " + rv); return rv; } catch (SQLException e) { log.warn(this + ".authenticateUser: " + userId + " : " + e); return null; } } }); if ((rv != null) && (rv.size() > 0)) { log.info("Returning "); log.info(" " + (SakaiIMSUser) rv.get(0)); return (SakaiIMSUser) rv.get(0); } return null; } /** * Construct. */ public IMSEntUserDirectoryProvider() { } // SampleUserDirectoryProvider /** * Copy the information from our internal structure into the Sakai User structure. * * @param edit * @param imsUser */ private void copyInfo(UserEdit edit, SakaiIMSUser imsUser) { edit.setId(imsUser.id); edit.setFirstName(imsUser.firstName); edit.setLastName(imsUser.lastName); edit.setEmail(imsUser.eMail); edit.setPassword(imsUser.password); // Sakai currently creates sortname from first and last name edit.setType("imsent"); } /** * Access a user object. Update the object with the information found. * * @param edit * The user object (id is set) to fill in. * @return true if the user object was found and information updated, false if not. */ public boolean getUser(UserEdit edit) { if (!isReady()) return false; if (edit == null) return false; String userId = edit.getEid(); log.info("getUser(" + userId + ")"); SakaiIMSUser rv = retrieveUser(userId, false); if (rv == null) return false; copyInfo(edit, rv); return true; } // getUser /** * Access a collection of UserEdit objects; if the user is found, update the information, otherwise remove the UserEdit object from the collection. * * @param users * The UserEdit objects (with id set) to fill in or remove. */ public void getUsers(Collection users) { for (Iterator i = users.iterator(); i.hasNext();) { UserEdit user = (UserEdit) i.next(); if (!getUser(user)) { i.remove(); } } } /** * Find a user object who has this email address. Update the object with the information found. * * @param email * The email address string. * @return true if the user object was found and information updated, false if not. */ public boolean findUserByEmail(UserEdit edit, String email) { if (!isReady()) return false; if ((edit == null) || (email == null)) return false; log.info("findUserByEmail(" + email + ")"); SakaiIMSUser rv = retrieveUser(email, true); if (rv == null) return false; copyInfo(edit, rv); return true; } // findUserByEmail /** * Authenticate a user / password. If the user edit exists it may be modified, and will be stored if... * * @param id * The user id. * @param edit * The UserEdit matching the id to be authenticated (and updated) if we have one. * @param password * The password. * @return true if authenticated, false if not. */ public boolean authenticateUser(final String userId, UserEdit edit, String password) { if (!isReady()) return false; if ((userId == null) || (password == null)) return false; log.info("authenticateUser(" + userId + ")"); SakaiIMSUser rv = retrieveUser(userId, false); if (rv == null) return false; return (password.compareTo(rv.password) == 0); } // authenticateUser /** * {@inheritDoc} */ public boolean authenticateWithProviderFirst(String id) { return false; } } // SampleUserDirectoryProvider




© 2015 - 2024 Weber Informatics LLC | Privacy Policy