Package org.talend.esb.auxiliary.storage.rest.security

Source Code of org.talend.esb.auxiliary.storage.rest.security.AuxiliaryStorageRestServiceSecurityProvider

/*
* ============================================================================
*
* Copyright (C) 2011 - 2013 Talend Inc. - www.talend.com
*
* This source code is available under agreement available at
* %InstallDIR%\license.txt
*
* You should have received a copy of the agreement
* along with this program; if not, write to Talend SA
* 9 rue Pages 92150 Suresnes, France
*
* ============================================================================
*/
package org.talend.esb.auxiliary.storage.rest.security;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.cxf.Bus;
import org.apache.cxf.common.injection.NoJSR250Annotations;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.endpoint.ServerRegistry;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
import org.apache.cxf.jaxrs.security.JAASAuthenticationFilter;
import org.apache.cxf.rs.security.saml.SamlHeaderInHandler;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.ws.security.SecurityConstants;

@NoJSR250Annotations(unlessNull = "bus")
public class AuxiliaryStorageRestServiceSecurityProvider extends AbstractRestSecurityProvider {

    private static final String ENDPOINT_SIGNATURE_PASSWORD = "ws-security.signature.password";

    private String signatureProperties;
    private String signatureUsername;
    private String signaturePassword;

    private JAXRSServerFactoryBean server;

    public void init() {

        if (Authentication.NO == auxiliaryStorageAuthentication) {
            return;
        }

        // TODO: !!! find more correct way to enable/switch(?) security on provider endpoint
         Bus serverBus = server.getBus();
         ServerRegistry registry = serverBus.getExtension(ServerRegistry.class);
         List<Server> servers = registry.getServers();
         for (Server sr : servers) {
             EndpointInfo ei = sr.getEndpoint().getEndpointInfo();
             if (null != ei && ei.getAddress().endsWith(server.getAddress())){
                 registry.unregister(sr);
                 sr.destroy();
             }
         }

        @SuppressWarnings("unchecked")
        List<Object> providers = (List<Object>) server.getProviders();

        if (Authentication.BASIC == auxiliaryStorageAuthentication) {
            JAASAuthenticationFilter jaasAuthFilter = new JAASAuthenticationFilter();
            jaasAuthFilter.setContextName("karaf");

            providers.add(jaasAuthFilter);
            server.setProviders(providers);
        }

        if (Authentication.SAML == auxiliaryStorageAuthentication) {
            Map<String, Object> endpointProps = new HashMap<String, Object>();

            endpointProps.put(SecurityConstants.SIGNATURE_PROPERTIES, signatureProperties);
            endpointProps.put(SecurityConstants.SIGNATURE_USERNAME, signatureUsername);
            endpointProps.put(ENDPOINT_SIGNATURE_PASSWORD, signaturePassword);
            endpointProps.put(SecurityConstants.CALLBACK_HANDLER,
                    new WSPasswordCallbackHandler(signatureUsername, signaturePassword));

            Map<String, Object> properties = server.getProperties();
            if (null == properties) {
                properties = new HashMap<String, Object>();
            }
            properties.putAll(endpointProps);
            server.setProperties(properties);

            SamlHeaderInHandler samlHandler = new SamlHeaderInHandler();

            providers.add(samlHandler);
            server.setProviders(providers);
        }

        server.create();
    }

    public void setSignatureProperties(String signatureProperties) {
        this.signatureProperties = signatureProperties;
    }

    public void setSignatureUsername(String signatureUsername) {
        this.signatureUsername = signatureUsername;
    }

    public void setSignaturePassword(String signaturePassword) {
        this.signaturePassword = signaturePassword;
    }

    public void setAuxiliaryStorageEndpoint(JAXRSServerFactoryBean server) {
        this.server = server;
    }

}
TOP

Related Classes of org.talend.esb.auxiliary.storage.rest.security.AuxiliaryStorageRestServiceSecurityProvider

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.