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

org.javabeanstack.security.AbstractSecManager Maven / Gradle / Ivy

The newest version!
/*
* JavaBeanStack FrameWork
*
* Copyright (C) 2017 Jorge Enciso
* Email: [email protected]
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301  USA
 */
package org.javabeanstack.security;

import org.javabeanstack.security.model.IUserSession;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import org.apache.log4j.Logger;

import org.javabeanstack.data.IDataRow;
import org.javabeanstack.error.ErrorManager;
import org.javabeanstack.util.Strings;
import org.javabeanstack.data.IGenericDAO;
import org.javabeanstack.security.model.IClientAuthRequestInfo;


/**
 * Es un wraper de la clase Sessions. Se encarga de logeo de los usuario,
 * creación de las sesiones, manejo de la expiración de cada sesión.
 *
 * El test unitario se encuentra en TestProjects clase
 * py.com.oym.test.data.TestSesiones
 *
 * @author Jorge Enciso
 */
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public abstract class AbstractSecManager implements ISecManager, Serializable {
    private static final Logger LOGGER = Logger.getLogger(AbstractSecManager.class);

    protected abstract IGenericDAO getDAO();
    protected abstract ISessions getSessions();
    protected abstract IAppUserPwdLogSrv getAppUserPwdLogSrv();

    /**
     * Crea una sesión de usuario para acceso a la app
     *
     * @param userLogin usuario
     * @param password password
     * @param idcompany empresa que esta solicitando ingresar
     * @param idleSessionExpireInMinutes minutos sin actividad antes de cerrar
     * la sesión.
     * @return objeto conteniendo datos del login exitoso o rechazado
     */
    @Override
    public IUserSession createSession(String userLogin, String password, Object idcompany, Integer idleSessionExpireInMinutes) {
        IUserSession userSession = getSessions().createSession(userLogin, password, idcompany, idleSessionExpireInMinutes);
        //Grabación de log de passwords.
        if (!isExistUserPwdLog(userSession.getSessionId())) {
            insertUserPwdLog(userSession.getSessionId());
        }
        return userSession;
    }

    /**
     * Vuelve a crear la sesión con el acceso a una nueva empresa
     *
     * @param sessionId identificador de la sesión.
     * @param idcompany identificador de la empresa a la que se solicita el
     * nuevo acceso.
     * @return objeto sesión
     */
    @Override
    public IUserSession reCreateSession(String sessionId, Object idcompany) {
        return getSessions().reCreateSession(sessionId, idcompany);
    }

    /**
     * Devuelve verdadero si sus credenciales para el logeo son válidas o falso
     * si no
     *
     * @param userLogin
     * @param password
     * @return verdadero si sus credenciales para el logeo son válidas o falso
     * si no
     * @throws Exception
     */
    @Override
    public Boolean login(String userLogin, String password) throws Exception {
        IUserSession session = getSessions().login(userLogin, password);
        return session != null && session.getUser() != null;
    }

    /**
     * Devuelve el objeto userSession posterior a la authenticación del usuario.
     *
     * @param userLogin usuario
     * @param password palabra clave.
     * @return userSession conteniendo información de la sesión del usuario
     * @throws Exception
     */
    @Override
    public IUserSession login2(String userLogin, String password) throws Exception {
        return getSessions().login(userLogin, password);
    }

    /**
     * Devuelve verdadero o falso dependiendo si el identificador de la sesión
     * es válida o no.
     *
     * @param sesionId identificador de la sesión a consultar su válidez
     * @return verdadero o falso dependiendo si el identificador de la sesión.
     */
    @Override
    public Boolean isSessionIdValid(String sesionId) {
        IUserSession sesion;
        sesion = getSessions().getUserSession(sesionId);
        if (sesion == null) {
            return false;
        }
        if (sesion.getUser() == null) {
            return false;
        }
        return sesion.getSessionId() != null;
    }

    /**
     * Devuelve los roles asignados a un usuario solicitado
     *
     * @param userLogin codigo del usuaio
     * @return los roles asignados a un usuario solicitado
     */
    @Override
    public String getUserRol(String userLogin) {
        return "";
    }

    @Override
    public String getCompanyList() {
        return "";
    }

    /**
     * Devuelve si un usuario es miembro de un grupo.
     *
     * @param user usuario
     * @param userGroup grupo
     * @return verdadero o falso si pertenece a un grupo dado.
     */
    @Override
    public Boolean isUserMemberOf(String user, String userGroup) {
        LOGGER.debug("isUserMemberOf");
        String sqlComando;
        sqlComando = "select a "
                + " from AppUserMember a"
                + " where a.usergroup.code  = '{userGroup}' "
                + " and   a.usermember.code = '{user}'";

        Map params = new HashMap<>();
        params.put("user", user.trim());
        params.put("userGroup", userGroup.trim());
        sqlComando = Strings.textMerge(sqlComando, params);
        try {
            List result = getDAO().findListByQuery("", sqlComando, null);
            return !result.isEmpty();
        } catch (Exception exp) {
            ErrorManager.showError(exp, LOGGER);
        }
        return false;
    }

    public boolean isExistUserPwdLog(String sessionId){
        if (getAppUserPwdLogSrv() != null){
            return getAppUserPwdLogSrv().isExistUserPwdLog(sessionId);
        }
        return false;
    }

    public void insertUserPwdLog(String sessionId) {
        if (getAppUserPwdLogSrv() != null){
            getAppUserPwdLogSrv().insertUserPwdLog(sessionId);
        }
    }

    /**
     * Cierra una sesión.
     *
     * @param sessionId identificador de la sesión.
     */
    @Override
    public void logout(String sessionId) {
        getSessions().logout(sessionId);
    }

    /**
     * Cierra la sesión
     *
     * @param userSession objeto conteniendo la información de la sesión a
     * cerrar.
     */
    @Override
    public void logout(IUserSession userSession) {
        if (userSession != null && userSession.getSessionId() != null) {
            getSessions().logout(userSession.getSessionId());
        }
    }

    @Override
    public IClientAuthRequestInfo getClientAuthCache(String authHeader) {
        return getSessions().getClientAuthCache(authHeader);
    }

    @Override
    public void addClientAuthCache(String authHeader, IClientAuthRequestInfo authRequestInfo) {
        getSessions().addClientAuthCache(authHeader, authRequestInfo);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy