com.photon.phresco.ldap.impl.LDAPManagerImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.photon.phresco.ldap.impl.LDAPManagerImpl.java

Source

/*
 * ###
 * Phresco Service Implemenation
 * 
 * Copyright (C) 1999 - 2012 Photon Infotech Inc.
 * 
 * Licensed under the Apache 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.apache.org/licenses/LICENSE-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.
 * ###
 */
/*******************************************************************************
 * Copyright (c) 2011 Photon.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Photon Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.photon.in/legal/ppl-v10.html
 * 
 * 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.
 * 
 * Contributors:
 *     Photon - initial API and implementation
 ******************************************************************************/
package com.photon.phresco.ldap.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;

import org.apache.commons.codec.binary.Base64;
import org.apache.log4j.Logger;

import com.photon.phresco.commons.model.User;
import com.photon.phresco.exception.PhrescoException;
import com.photon.phresco.ldap.LDAPConstants;
import com.photon.phresco.ldap.api.LDAPManager;
import com.photon.phresco.ldap.model.LDAPConfiguration;
import com.photon.phresco.util.Constants;
import com.photon.phresco.util.Credentials;

public class LDAPManagerImpl implements LDAPManager {

    private static final Logger S_LOGGER = Logger.getLogger(LDAPManagerImpl.class);
    private static Boolean isDebugEnabled = S_LOGGER.isDebugEnabled();
    private LDAPConfiguration ldapConfig;

    public LDAPManagerImpl(Properties props) throws PhrescoException {
        ldapConfig = new LDAPConfiguration(props);
    }

    @Override
    public User authenticate(Credentials credentials) throws PhrescoException {
        if (isDebugEnabled) {
            S_LOGGER.debug("Entering Method LDAPManagerImpl.authenticate(Credentials credentials)");
        }
        String userName = credentials.getUsername();
        String passwordEncoded = credentials.getPassword();
        byte[] decodedBytes = Base64.decodeBase64(passwordEncoded);
        String password = new String(decodedBytes);
        Properties env = new Properties();
        env.put(Context.INITIAL_CONTEXT_FACTORY, ldapConfig.getLdapContextFactory());
        env.put(Context.PROVIDER_URL, ldapConfig.getLdapUrl());
        env.put(Context.SECURITY_PRINCIPAL, getUserPrincipal(userName));
        env.put(Context.SECURITY_CREDENTIALS, password);

        DirContext dc = null;
        try {
            dc = new InitialDirContext(env);
            if (isDebugEnabled) {
                S_LOGGER.debug("authenticate() Login Success for " + userName);
            }
            return getUser(credentials, dc);
        } catch (Exception e) {
            e.printStackTrace();
            if (isDebugEnabled) {
                S_LOGGER.debug("authenticate() Login Failed for " + userName);
            }
            return new User();
        } finally {
            try {
                if (dc != null) {
                    dc.close();
                }
            } catch (NamingException e) {
                throw new PhrescoException(e);
            }
        }
    }

    private String getUserPrincipal(String userName) {
        if (isDebugEnabled) {
            S_LOGGER.debug("Entering Method LDAPManagerImpl.getUserPrincipal(String userName)");
        }
        StringBuffer userPrincipal = new StringBuffer();
        userPrincipal.append(ldapConfig.getLdapLoginAttribute());
        userPrincipal.append(Constants.STR_EQUALS);
        userPrincipal.append(userName.trim());
        userPrincipal.append(Constants.STR_COMMA);
        userPrincipal.append(ldapConfig.getLdapBaseDn());
        return userPrincipal.toString();
    }

    private User getUser(Credentials credentials, DirContext ctx) throws PhrescoException {
        if (isDebugEnabled) {
            S_LOGGER.debug("Entering Method LDAPManagerImpl.getUserInfo(String userName, DirContext ctx)");
        }
        User user = new User();
        try {
            String userName = credentials.getUsername();
            SearchControls constraints = new SearchControls();
            constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
            String[] attrIDs = { "*" };
            constraints.setReturningAttributes(attrIDs);
            NamingEnumeration<SearchResult> ne = ctx.search(ldapConfig.getLdapBaseDn(),
                    ldapConfig.getLdapLoginAttribute() + Constants.STR_EQUALS + userName, constraints);
            if (ne.hasMore()) {
                Attributes attrs = ne.next().getAttributes();

                user.setName(userName);
                //      userInfo.setCredentials(credentials);
                user.setDisplayName(getDisplayName(attrs));
                user.setEmail(getMailId(attrs));
                user.setPhrescoEnabled(isPhrescoEnabled(attrs));
                //      userInfo.setCustomerNames(getCustomerNames(attrs));

            }

        } catch (Exception e) {
            throw new PhrescoException(e);
        }
        return user;
    }

    private List<String> getCustomerNames(Attributes attrs) throws NamingException {
        if (isDebugEnabled) {
            S_LOGGER.debug("Entering Method LDAPManagerImpl.getCustomerName(Attributes attrs");
        }
        List<String> customerNames = new ArrayList<String>();
        Attribute attribute = attrs.get(ldapConfig.getCustomerNameAttribute());
        if (attribute != null) {
            NamingEnumeration<?> all = attribute.getAll();
            while (all.hasMoreElements()) {
                customerNames.add((String) all.nextElement());
            }
        }

        return customerNames;
    }

    private boolean isPhrescoEnabled(Attributes attrs) throws NamingException {
        if (isDebugEnabled) {
            S_LOGGER.debug("Entering Method LDAPManagerImpl.isPhrescoEnabled(Attributes attrs");
        }
        String phrescoEnabled = "false";
        Attribute attribute = attrs.get(ldapConfig.getPhrescoEnabledAttribute());
        if (attribute != null) {
            phrescoEnabled = (String) attribute.get();
        } else {
            phrescoEnabled = "true";
        }
        return Boolean.parseBoolean(phrescoEnabled);
    }

    private String getDisplayName(Attributes attrs) throws NamingException {
        if (isDebugEnabled) {
            S_LOGGER.debug("Entering Method LDAPManagerImpl.getDisplayName(Attributes attrs)");
        }
        String displayName = null;
        Attribute attribute = attrs.get(ldapConfig.getDisplayNameAttribute());
        if (attribute != null) {
            displayName = (String) attribute.get();
        }
        return displayName;
    }

    private String getMailId(Attributes attrs) throws NamingException {
        if (isDebugEnabled) {
            S_LOGGER.debug("Entering Method LDAPManagerImpl.getMailId(Attributes attrs");
        }
        String mailId = null;
        Attribute attribute = attrs.get(ldapConfig.getMailIdAttribute());
        if (attribute != null) {
            mailId = (String) attribute.get();
        }
        return mailId;
    }

}