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