Subversion Repositories bacoAlunos

Rev

Rev 1306 | Rev 1312 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.authenticate;

import jomm.utils.DesUtils;
import openldap.ILdapManager;
import openldap.LdapManagerFactory;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.common.CommonServicesManager;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.ftpservices.FtpService;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.utl.ist.berserk.logic.serviceManager.IService;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;


/*
 * @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
 *
 *
 * Created at 17/Out/2003 , 23:45:24
 *
 */

/**
 * @author Jorge Machado
 *
 *
 * Created at 17/Out/2003 , 23:45:24
 *
 */

public class AuthenticateService implements IService
{
    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(AuthenticateService.class);

    private static final boolean USE_LDAP = ConfigProperties.getBooleanProperty("use.ldap");

    ILdapManager ldapManager = LdapManagerFactory.getLdapManager();

    public UserSession run(1.5.0/docs/api/java/lang/String.html">String username, 1.5.0/docs/api/java/lang/String.html">String password, UserSession userSession) throws ServiceException
    {
        if(userSession.getUser() != null)
            throw new AuthenticateException(AuthenticateException.ALREADY_AUTHENTICATED);

        if(username == null || username.trim().length() == 0 || password == null || password.trim().length() == 0)
            throw new AuthenticateException(AuthenticateException.FAIL_AUTHENTICATION);
        boolean go = false;
        if(USE_LDAP)
            go = ldapManager.login(username,password);

        User u = null;
        if(!go)
        {
            u = DaoFactory.getUserDaoImpl().loadByUsernameAndPassword(username,password);
            if(u == null)
            {
                logger.warn("user:" + username + " fail password");
                throw new AuthenticateException(AuthenticateException.FAIL_AUTHENTICATION);
            }

            logger.warn("user:" + username + " fail LDAP but pass local authentication");
        }
        else
            try
            {
                u = DaoFactory.getUserDaoImpl().loadByUsername(username);
            }
            catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e){}

        if(u == null)
        {
            logger.warn("user:" + username + " does not exist");
            throw new AuthenticateException(AuthenticateException.DOES_NOT_EXIST);
            /*
            u = getUserInfo(username);
            u.setPassword(password);
            //put password to be complete for advising
            CommonServicesManager.getInstance().adviseNew(u);
//            u.setPassword(null); OLD Line now we save the last sucessfully password in DB
            u.setPassword(jomm.utils.BytesUtils.getDigestMD5Hex(password));
            if(u.getRoles().contains("teacher"))
            {

            }
            else if (u.getRoles().contains("student"))
            {

            }*/

        }
        else
        {
//            String passwordAux = u.getPassword();
            u.setPassword(password);

            CommonServicesManager.getInstance().adviseUpdate(u);
//            u.setPassword(passwordAux);
            u.setPassword(jomm.utils.BytesUtils.getDigestMD5Hex(password));
        }

        //CHECK USER BLOCK's
        if(!u.isAdmin() && !u.isSuperuser())
        {
            if(u.isAutoBlockMode() && u.isAutoBlock()
                    ||
                    !u.isAutoBlockMode() && u.isManualBlock())
            {
                logger.warn("user:" + username + " blocked");
                throw  new AuthenticateException(AuthenticateException.BLOCKED);
            }
        }

        logger.warn("user:" + username + " authenticated");

        //((UserSessionImpl)userSession).reset();
        //((UserSessionImpl)userSession).clearObjectsWithOpenTransaction();

        //DaoFactory.getUserSessionDaoImpl().flush();

        //PASSWORD PARA SERVICOS FTP CLIENT
                ((UserSessionImpl) userSession).put(FtpService.FTP_PASSWORD, DesUtils.getInstance().encrypt(password));
        //put password to be complete for advising
        userSession.setName(u.getName());
        userSession.setUsername(u.getUsername());
        userSession.setUser(u);
        if(u.getRoles() == null || u.getRoles().trim().length() == 0)
            u.setRoles(Globals.ROLE_INVITED);

        DaoFactory.getUserSessionDaoImpl().reattach(userSession);
        return userSession;
    }

    private User getUserInfo(1.5.0/docs/api/java/lang/String.html">String username)
    {
        1.5.0/docs/api/java/util/HashMap.html">HashMap map = ldapManager.getUserInfo(username);
        UserImpl u = DomainObjectFactory.createUserImpl();
        u.setUsername(username);
        u.setName(getName(map));
        u.setRoles(getRoles(map));
        u.setNewUser(true);
        /*todo call commonServices Manager advise New put Password First*/
        DaoFactory.getUserDaoImpl().save(u);
        return u;
    }

    private 1.5.0/docs/api/java/lang/String.html">String getName(1.5.0/docs/api/java/util/HashMap.html">HashMap text)
    {
        1.5.0/docs/api/java/util/Set.html">Set s = text.entrySet();
        1.5.0/docs/api/java/util/Iterator.html">Iterator iter = s.iterator();
        int iterCount=0;
        1.5.0/docs/api/java/lang/String.html">String name=null;

        while(iter.hasNext())
        {
            1.5.0/docs/api/java/util/Map.Entry.html">Map.Entry e = (1.5.0/docs/api/java/util/Map.Entry.html">Map.Entry) iter.next();
            if(iterCount==3)
            {
                name=e.getValue().toString();
            }
            iterCount++;
        }
        return name;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getRoles(1.5.0/docs/api/java/util/HashMap.html">HashMap text)
    {
        1.5.0/docs/api/java/util/Set.html">Set s = text.entrySet();
        1.5.0/docs/api/java/util/Iterator.html">Iterator iter = s.iterator();
        int iterCount=0;
        1.5.0/docs/api/java/lang/String.html">String roles=null;

        while(iter.hasNext())
        {
            1.5.0/docs/api/java/util/Map.Entry.html">Map.Entry e = (1.5.0/docs/api/java/util/Map.Entry.html">Map.Entry) iter.next();
            if(iterCount==0)
            {
                1.5.0/docs/api/java/lang/String.html">String[] splitText=e.getValue().toString().split(",");
                if(splitText[1].contains("CN"))
                {
                    roles="student";
                }
                else if(splitText[1].contains("OU"))
                {
                    roles="teacher";
                }
            }
            iterCount++;
        }
        return roles;
    }
}