Package org.geoserver.xacml.request

Source Code of org.geoserver.xacml.request.URLMatchRequestCtxBuilder

/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/

package org.geoserver.xacml.request;

import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

import org.geoserver.xacml.geoxacml.XACMLConstants;
import org.geoserver.xacml.role.XACMLRole;

import com.sun.xacml.attr.AttributeValue;
import com.sun.xacml.attr.DNSNameAttribute;
import com.sun.xacml.attr.IPv4AddressAttribute;
import com.sun.xacml.attr.IPv6AddressAttribute;
import com.sun.xacml.ctx.Attribute;
import com.sun.xacml.ctx.RequestCtx;
import com.sun.xacml.ctx.Subject;

/**
* Builds a request for URL Matching against regular expressions Http parameters are encoded as
* resources
*
*
* @author Christian Mueller
*
*/
public class URLMatchRequestCtxBuilder extends RequestCtxBuilder {
    private String urlString = null, remoteHost = null, remoteIP = null;

    private Map<String, Object> httpParams;

    public String getUrlString() {
        return urlString;
    }

    public URLMatchRequestCtxBuilder(XACMLRole role, String urlString, String method,
            Map<String, Object> httpParams, String remoteIP, String remoteHost) {
        super(role, method);
        this.urlString = urlString;
        this.httpParams = httpParams;
        this.remoteHost = remoteHost;
        this.remoteIP = remoteIP;
    }

    @Override
    public RequestCtx createRequestCtx() {

        Set<Subject> subjects = new HashSet<Subject>(1);
        addRole(subjects);

        Set<Attribute> resources = new HashSet<Attribute>(1);
        addGeoserverResource(resources);
        addResource(resources, XACMLConstants.URlResourceURI, urlString);
        if (httpParams != null && httpParams.size() > 0) {
            for (Entry<String, Object> entry : httpParams.entrySet()) {
                URI paramURI = null;
                try {
                    paramURI = new URI(XACMLConstants.URLParamPrefix + entry.getKey());
                } catch (URISyntaxException e) {
                    throw new RuntimeException(e); // should never happen
                }
                if (entry.getValue() instanceof String[]) {
                    for (String value : (String[]) entry.getValue()) {
                        addResource(resources, paramURI, value);
                    }
                } else {
                    addResource(resources, paramURI, entry.getValue().toString());
                }

            }
        }


        Set<Attribute> actions = new HashSet<Attribute>(1);
        addAction(actions);

        Set<Attribute> environment = new HashSet<Attribute>(1);
        try {
            if (remoteHost != null) {
                environment.add(new Attribute(XACMLConstants.DNSNameEnvironmentURI, null, null,
                        new DNSNameAttribute(remoteHost)));
            }
            if (remoteIP != null) {
                InetAddress addr = InetAddress.getByName(remoteIP);
                if (addr instanceof Inet4Address)
                    environment.add(new Attribute(XACMLConstants.IPAddressEnvironmentURI, null, null,
                            new IPv4AddressAttribute(addr)));
                if (addr instanceof Inet6Address) {
                    environment.add(new Attribute(XACMLConstants.IPAddressEnvironmentURI, null, null,
                            new IPv6AddressAttribute(addr)));
                }
            }
        } catch (Exception ex) {
            throw new RuntimeException(ex); // should not happen
        }
       
       

        RequestCtx ctx = new RequestCtx(subjects, resources, actions, environment);
        return ctx;

    }

}
TOP

Related Classes of org.geoserver.xacml.request.URLMatchRequestCtxBuilder

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.