FMResourceMapper.java revision 8d3140b524c0e28c0a49dc7c7d481123ef3cfe11
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2007 Sun Microsystems Inc. All Rights Reserved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The contents of this file are subject to the terms
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of the Common Development and Distribution License
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * (the License). You may not use this file except in
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * compliance with the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * You can obtain a copy of the License at
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * opensso/legal/CDDLv1.0.txt
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * at opensso/legal/CDDLv1.0.txt.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If applicable, add the following below the CDDL Header,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * with the fields enclosed by brackets [] replaced by
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * your own identifying information:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * $Id: FMResourceMapper.java,v 1.3 2008/06/25 05:50:16 qcheng Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.xacml.plugins;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.xacml.common.XACMLConstants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.xacml.context.Attribute;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.xacml.context.Resource;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.xml.XMLUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.xacml.common.XACMLException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.xacml.spi.ResourceMapper;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.net.URI;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.List;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Map;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Element;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This class implements ResourceMapper to map between XACML context
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Resource and FM native resource
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This mapper would recognise only the following XACML
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * defined <code>attributeId</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <pre>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * urn:oasis:names:tc:xacml:1.0:resource:resource-id
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * </pre>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The attribtue is required to have dataType
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <pre>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * http://www.w3.org/2001/XMLSchema#string
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * </pre>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Attribute resource-id is mapped to OpenAM Policy resource name.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This mapper also recognises only additional attributeId
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <pre>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * urn:opensso:names:xacml:2.0:resource:target-service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * </pre>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The attribtue is required to have dataType
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <pre>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * http://www.w3.org/2001/XMLSchema#string
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * </pre>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Attribute target-service is mapped to OpenAM Policy service type name
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If the attribute is not specified in the request a default value
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of <code>iPlanetAMWebAgentService</code> would be used. This is
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * the service name for policies that protect URLs.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic class FMResourceMapper implements ResourceMapper {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Initializes the mapper implementation. This would be called immediately
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * after constructing an instance of the implementation.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param pdpEntityId EntityID of PDP
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param pepEntityId EntityID of PEP
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param properties configuration properties
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception XACMLException if can not initialize
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void initialize(String pdpEntityId, String pepEntityId,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map properties)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws XACMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns native resource and service name
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param xacmlContextResource XACML context Resource
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return native resource and service name.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returned object is an array of String objects.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * First element would be resource name.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Second element would be service name.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception XACMLException if can not map to native resource
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * and service name
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String[] mapToNativeResource(Resource xacmlContextResource)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws XACMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String[] resourceService = new String[2];
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String resourceName = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String serviceName = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List attributes = xacmlContextResource.getAttributes();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (attributes != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (int count = 0; count < attributes.size(); count++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Attribute attr = (Attribute) attributes.get(count);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (attr != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster URI tmpURI = attr.getAttributeId();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (tmpURI.toString().equals(XACMLConstants.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster RESOURCE_ID)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster tmpURI = attr.getDataType();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (tmpURI.toString().equals(XACMLConstants.XS_STRING)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element element = (Element)attr.getAttributeValues().get(0);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster resourceName = XMLUtils.getElementValue(element);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (tmpURI.toString().equals(XACMLConstants.TARGET_SERVICE)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster tmpURI = attr.getDataType();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (tmpURI.toString().equals(XACMLConstants.XS_STRING)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element element = (Element)attr.getAttributeValues().get(0);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster serviceName = XMLUtils.getElementValue(element);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster resourceService[0] = resourceName;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster resourceService[1] = serviceName;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return resourceService;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns XACML context Resource
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param resourceName native resource name
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param serviceName native service name the requested resource belongs to
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return XACML context Resource
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception XACMLException if can not map to XACML context Resource
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Resource mapToXACMLResoure(String resourceName,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String serviceName) throws XACMLException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster}
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster