Package com.ds.tools.hudson.crowd

Source Code of com.ds.tools.hudson.crowd.CrowdSecurityRealm$DescriptorImpl

package com.ds.tools.hudson.crowd;

import groovy.lang.Binding;
import hudson.Extension;
import hudson.model.Descriptor;
import hudson.security.SecurityRealm;
import hudson.util.spring.BeanBuilder;

import java.util.Properties;

import org.acegisecurity.AuthenticationManager;
import org.acegisecurity.userdetails.UserDetailsService;
import org.apache.log4j.Logger;
import org.kohsuke.stapler.DataBoundConstructor;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.XmlWebApplicationContext;

import com.atlassian.crowd.integration.service.soap.client.ClientProperties;

public class CrowdSecurityRealm extends SecurityRealm {
    private static org.apache.log4j.Logger log = Logger.getLogger(CrowdSecurityRealm.class);

    public final String url;

    public final String applicationName;

    public final String applicationPassword;

    @Extension
    public static final class DescriptorImpl extends Descriptor<SecurityRealm> {
        public DescriptorImpl() {
            super(CrowdSecurityRealm.class);
        }

        @Override
        public String getDisplayName() {
            return "Crowd";
        }

    }

    @DataBoundConstructor
    public CrowdSecurityRealm(String url, String applicationName, String applicationPassword) {
        this.url = url.trim();
        this.applicationName = applicationName.trim();
        this.applicationPassword = applicationPassword.trim();
    }

    public SecurityComponents createSecurityComponents() {
        // load the base configuration from the crowd-integration-client jar
        XmlWebApplicationContext crowdConfigContext = new XmlWebApplicationContext();
        crowdConfigContext.setClassLoader(getClass().getClassLoader());
        /*
         * crowdConfigContext .setConfigLocations(new String[] {
         * "classpath:/applicationContext-HudsonCrowdClient.xml" });
         */
        crowdConfigContext
                .setConfigLocations(new String[] { "classpath:/applicationContext-CrowdClient.xml" });
        crowdConfigContext.refresh();

        // load the Hudson-Crowd configuration from Crowd.groovy
        BeanBuilder builder = new BeanBuilder(crowdConfigContext, getClass().getClassLoader());
        Binding binding = new Binding();
        builder.parse(getClass().getResourceAsStream("Crowd.groovy"), binding);
        WebApplicationContext context = builder.createApplicationContext();

        // configure the ClientProperties object
        if (applicationName != null || applicationPassword != null || url != null) {
            Properties props = new Properties();
            props.setProperty("application.name", applicationName);
            props.setProperty("application.password", applicationPassword);
            props.setProperty("crowd.server.url", url);
            props.setProperty("session.validationinterval", "5");
            ClientProperties clientProperties = (ClientProperties) crowdConfigContext
                    .getBean("clientProperties");
            clientProperties.updateProperties(props);
        } else {
            log.warn("Client properties are incomplete");
        }

        return new SecurityComponents(findBean(AuthenticationManager.class, context), findBean(
                UserDetailsService.class, context));
    }
}
TOP

Related Classes of com.ds.tools.hudson.crowd.CrowdSecurityRealm$DescriptorImpl

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.