Package org.glite.authz.pap.services

Source Code of org.glite.authz.pap.services.ProvisioningService

/**
* Copyright (c) Members of the EGEE Collaboration. 2006-2009.
* See http://www.eu-egee.org/partners/ for details on the copyright holders.
*
* 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.
*/

package org.glite.authz.pap.services;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.axis.MessageContext;
import org.apache.axis.transport.http.HTTPConstants;
import org.glite.authz.pap.authz.operations.policyprovisioning.GetPoliciesForPAPOperation;
import org.glite.authz.pap.authz.operations.policyprovisioning.GetPoliciesForPDPOperation;
import org.glite.authz.pap.common.xacml.utils.XMLObjectHelper;
import org.glite.authz.pap.services.provisioning.axis_skeletons.Provisioning;
import org.glite.authz.pap.services.provisioning.exceptions.MissingIssuerException;
import org.glite.authz.pap.services.provisioning.exceptions.VersionMismatchException;
import org.glite.authz.pap.services.provisioning.exceptions.WrongFormatIssuerException;
import org.opensaml.saml2.common.Extensions;
import org.opensaml.saml2.core.Response;
import org.opensaml.xacml.XACMLObject;
import org.opensaml.xacml.profile.saml.XACMLPolicyQueryType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ProvisioningService implements Provisioning {

    private final Logger log = LoggerFactory.getLogger(ProvisioningService.class);
    private static final Object lock = new Object();

    public Response XACMLPolicyQuery(XACMLPolicyQueryType query) throws java.rmi.RemoteException {

        HttpServletRequest httpServletRequest =
            (HttpServletRequest) MessageContext.getCurrentContext().getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
       
        // lock need to keep memory usage low, it's not possible to re-use opensaml objects so they have to
        // be cloned for every request.
        synchronized (lock) {

            try {
                // log the received query
                log.trace("Received XACLMPolicyQuery " + XMLObjectHelper.toString(query));

                /* check a few things about the query */
                try {
                    ServicesUtils.checkQuery(query);
                } catch (VersionMismatchException e) {
                    log.error(e.getMessage(), e);
                    return ServicesUtils.createErrorResponse(query, e);
                } catch (MissingIssuerException e) {
                    log.error(e.getMessage(), e);
                    return ServicesUtils.createErrorResponse(query, e);
                } catch (WrongFormatIssuerException e) {
                    log.error(e.getMessage(), e);
                    return ServicesUtils.createErrorResponse(query, e);
                }

                /* get local policies */

                List<XACMLObject> resultList = null;

                /*
                 * TODO discrimination between a PAP and a PDP is done after the presence of the Extensions
                 * element, too simplistic
                 */

                Extensions extensions = query.getExtensions();

                if (extensions == null)

                    resultList = GetPoliciesForPDPOperation.instance().execute();

                else

                    resultList = GetPoliciesForPAPOperation.instance().execute();

                /* prepare the response */

                Response response = ServicesUtils.createResponse(query, resultList, httpServletRequest);

                log.trace("Sending Response : " + XMLObjectHelper.toString(query));

                return response;

            } catch (RuntimeException e) {
                ServiceClassExceptionManager.log(log, e);
                throw e;
            }
        }
    }
}
TOP

Related Classes of org.glite.authz.pap.services.ProvisioningService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.