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

org.javabeanstack.web.rest.resources.AbstractWebResource Maven / Gradle / Ivy

The newest version!
/*
* JavaBeanStack FrameWork
*
* Copyright (C) 2018 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.web.rest.resources;

import com.google.common.base.Strings;
import javax.ejb.EJB;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import org.apache.log4j.Logger;
import org.javabeanstack.security.ISecManager;
import org.javabeanstack.data.services.IDataService;
import org.javabeanstack.model.IAppCompany;
import org.javabeanstack.security.IOAuthConsumer;
import org.javabeanstack.security.model.ClientAuthRequestInfo;
import org.javabeanstack.security.model.IClientAuthRequestInfo;
import org.javabeanstack.ws.resources.IWebResource;

/**
 *
 * @author Jorge Enciso
 */
public abstract class AbstractWebResource implements IWebResource {
    private static final Logger LOGGER = Logger.getLogger(AbstractWebResource.class);    

    @EJB
    private IOAuthConsumer oAuthConsumer;  

    @Context
    HttpServletRequest requestContext;

    @Override
    public abstract  T getDataService();

    @Override
    public abstract ISecManager getSecManager();
    
    @Override
    public Long getIdCompany(String authHeader) {
        IClientAuthRequestInfo info = getSecManager().getClientAuthCache(authHeader);
        if (info != null){
            return info.getIdcompany();
        }
        return null;
    }

    @Override
    public final String getIpClient() {
        return requestContext.getRemoteAddr();
    }

    @Override
    public final String getRemoteHost() {
        return requestContext.getRemoteHost();
    }

    public String getToken(String authHeader) {
        IClientAuthRequestInfo info = getSecManager().getClientAuthCache(authHeader);
        if (info != null){
            return info.getToken();
        }
        return null;
    }
    
    protected IOAuthConsumer getOAuthConsumer(){
        return oAuthConsumer;
    }

    public Boolean verifyToken(String token) {
        return getOAuthConsumer().isValidToken(token);
    }

    protected void setToken(String tokenHeader){
        String[] tokens = tokenHeader.split("\\ ");
        String token = tokens[1];
        Long idcompany = 0L;
        //Si el token es null
        if (Strings.isNullOrEmpty(token)) {
            throw new org.javabeanstack.web.rest.exceptions.TokenError("Debe proporcionar el token de autorización");
        }
        //Si ya se utilizo este token recientemente
        if (getSecManager().getClientAuthCache(tokenHeader) != null){
            return;
        }
        //Verificar válidez del token
        if (!verifyToken(token)){
            // Verificar y traer credenciales del servidor y grabar en el local
            if (!verifyTokenInMainServer(token)){
                LOGGER.error("Este token ya expiró o es incorrecto Server: "+token);
                throw new org.javabeanstack.web.rest.exceptions.TokenError("Este token ya expiró o es incorrecto");                
            }
            //Reverificar en el local
            if (!verifyToken(token)){
                LOGGER.error("Este token ya expiró o es incorrecto: local "+token);
                throw new org.javabeanstack.web.rest.exceptions.TokenError("Este token ya expiró o es incorrecto");                
            }
        }
        //Asignar idcompany
        IAppCompany appCompanyToken = getOAuthConsumer().getCompanyMapped(token);
        if (appCompanyToken != null) {
            if (appCompanyToken.getIdcompanymask() != null) {
                idcompany = appCompanyToken.getIdcompanymask();
            }
            else{
                idcompany = appCompanyToken.getIdcompany();
            }
        }
        // Guardar los datos de autenticación en el cache.
        IClientAuthRequestInfo requestInfo = new ClientAuthRequestInfo();
        requestInfo.setIdcompany(idcompany);
        requestInfo.setAppAuthToken(getOAuthConsumer().findAuthToken(token));
        getSecManager().addClientAuthCache(tokenHeader, requestInfo);
    }

    protected boolean verifyTokenInMainServer(String token){
        //Implementar en clases hijas
        return false;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy