提交 a6517254 编写于 作者: K kohsuke

hooking up realm&authorization configuration UI to the config submission logic.


git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@6226 71c3de6d-444a-0410-be80-ed276b4c234a
上级 a79716fc
......@@ -25,6 +25,7 @@ import hudson.tasks.BuildWrappers;
import hudson.tasks.Builder;
import hudson.tasks.Publisher;
import hudson.security.SecurityRealm;
import hudson.security.AuthorizationStrategy;
import org.apache.commons.jexl.parser.ASTSizeFunction;
import org.apache.commons.jexl.util.Introspector;
import org.kohsuke.stapler.Ancestor;
......@@ -444,10 +445,14 @@ public class Functions {
return BuildWrappers.getFor(project);
}
public static List<Descriptor<SecurityRealm>> getSecurityRealms() {
public static List<Descriptor<SecurityRealm>> getSecurityRealmDescriptors() {
return SecurityRealm.LIST;
}
public static List<Descriptor<AuthorizationStrategy>> getAuthorizationStrategyDescriptors() {
return AuthorizationStrategy.LIST;
}
public static List<Descriptor<Builder>> getBuilderDescriptors(AbstractProject<?,?> project) {
return filterBuildStepDescriptors(BuildStep.BUILDERS,project);
}
......
......@@ -10,6 +10,7 @@ import hudson.Launcher.LocalLauncher;
import hudson.Plugin;
import hudson.PluginManager;
import hudson.PluginWrapper;
import hudson.StructuredForm;
import hudson.TcpSlaveAgentListener;
import hudson.Util;
import static hudson.Util.fixEmpty;
......@@ -58,6 +59,7 @@ import hudson.util.HudsonIsLoading;
import hudson.util.MultipartFormDataParser;
import hudson.util.XStream2;
import hudson.widgets.Widget;
import net.sf.json.JSONObject;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.ui.AbstractProcessingFilter;
import org.apache.commons.fileupload.FileItem;
......@@ -1246,13 +1248,22 @@ public final class Hudson extends View implements ItemGroup<TopLevelItem>, Node
req.setCharacterEncoding("UTF-8");
JSONObject json = StructuredForm.get(req);
// keep using 'useSecurity' field as the main configuration setting
// until we get the new security implementation working
// useSecurity = null;
if (req.getParameter("use_security") != null) {
if (json.has("use_security")) {
useSecurity = true;
securityRealm = new LegacySecurityRealm();
authorizationStrategy = new LegacyAuthorizationStrategy();
if(newSecurity) {
JSONObject security = json.getJSONObject("use_security");
securityRealm = SecurityRealm.LIST.newInstanceFromRadioList(security,"realm");
authorizationStrategy = AuthorizationStrategy.LIST.newInstanceFromRadioList(security,"authorization");
} else {
// compatibility mode
securityRealm = new LegacySecurityRealm();
authorizationStrategy = new LegacyAuthorizationStrategy();
}
} else {
useSecurity = null;
securityRealm = SecurityRealm.NO_AUTHENTICATION;
......
......@@ -4,6 +4,7 @@ import hudson.ExtensionPoint;
import hudson.model.Describable;
import hudson.model.Descriptor;
import hudson.model.Hudson;
import hudson.util.DescriptorList;
import org.acegisecurity.Authentication;
import java.io.Serializable;
......@@ -57,7 +58,7 @@ public abstract class AuthorizationStrategy implements Describable<Authorization
* descriptor for this.
*/
public Descriptor<AuthorizationStrategy> getDescriptor() {
return null;
return DESCRIPTOR;
}
@Override
......@@ -70,5 +71,19 @@ public abstract class AuthorizationStrategy implements Describable<Authorization
return true;
}
};
private static final Descriptor<AuthorizationStrategy> DESCRIPTOR = new Descriptor<AuthorizationStrategy>(Unsecured.class) {
public String getDisplayName() {
return "Anyone can do anything";
}
};
}
/**
* All registered {@link SecurityRealm} implementations.
*/
public static final DescriptorList<AuthorizationStrategy> LIST = new DescriptorList<AuthorizationStrategy>(
Unsecured.DESCRIPTOR
);
}
......@@ -3,11 +3,11 @@ package hudson.security;
import hudson.ExtensionPoint;
import hudson.model.Describable;
import hudson.model.Descriptor;
import hudson.util.DescriptorList;
import org.acegisecurity.Authentication;
import org.acegisecurity.AuthenticationManager;
import org.springframework.context.ApplicationContext;
import java.util.List;
import java.util.Map;
/**
......@@ -86,7 +86,7 @@ public abstract class SecurityRealm implements Describable<SecurityRealm>, Exten
/**
* All registered {@link SecurityRealm} implementations.
*/
public static final List<Descriptor<SecurityRealm>> LIST = Descriptor.toList(
public static final DescriptorList<SecurityRealm> LIST = new DescriptorList<SecurityRealm>(
HudsonPrivateSecurityRealm.DescriptorImpl.INSTANCE,
LDAPSecurityRealm.DESCRIPTOR
);
......
package hudson.util;
import hudson.model.Describable;
import hudson.model.Descriptor;
import hudson.model.Descriptor.FormException;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.Stapler;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* List of {@link Descriptor}s.
*
* <p>
* This class is really just a list but also defines
* some Hudson specific methods that operate on
* {@link Descriptor} list.
*
* @author Kohsuke Kawaguchi
* @since 1.161
*/
public final class DescriptorList<T extends Describable<T>> extends CopyOnWriteArrayList<Descriptor<T>> {
public DescriptorList(Descriptor<T>... descriptors) {
super(descriptors);
}
/**
* Creates a new instance of a {@link Describable}
* from the structured form submission data posted
* by a radio button group.
*/
public T newInstanceFromRadioList(JSONObject config) throws FormException {
int idx = config.getInt("value");
return get(idx).newInstance(Stapler.getCurrentRequest(),config);
}
public T newInstanceFromRadioList(JSONObject parent, String name) throws FormException {
return newInstanceFromRadioList(parent.getJSONObject(name));
}
}
......@@ -27,7 +27,10 @@
<table style="width:100%">
<s:descriptorRadioList title="Security Realm" varName="realm"
instance="${it.securityRealm}"
descriptors="${h.securityRealms}"/>
descriptors="${h.securityRealmDescriptors}"/>
<s:descriptorRadioList title="Authorization" varName="authorization"
instance="${it.authorizationStrategy}"
descriptors="${h.authorizationStrategyDescriptors}"/>
</table>
</s:block>
</j:if>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册