24
24
package hudson.security;
26
import com.google.common.base.Predicate;
27
import hudson.BulkChange;
26
28
import hudson.Extension;
29
import hudson.Functions;
27
30
import hudson.markup.MarkupFormatter;
28
import jenkins.model.GlobalConfiguration;
31
import hudson.model.Descriptor;
32
import hudson.model.Descriptor.FormException;
33
import hudson.model.ManagementLink;
34
import hudson.util.FormApply;
36
import java.io.IOException;
37
import java.util.logging.Level;
38
import java.util.logging.Logger;
40
import javax.servlet.ServletException;
42
import jenkins.model.GlobalConfigurationCategory;
29
43
import jenkins.model.Jenkins;
30
44
import jenkins.util.ServerTcpPort;
31
45
import net.sf.json.JSONObject;
32
47
import org.kohsuke.stapler.StaplerRequest;
34
import java.io.IOException;
48
import org.kohsuke.stapler.StaplerResponse;
37
51
* Security configuration.
39
53
* @author Kohsuke Kawaguchi
41
@Extension(ordinal=200)
42
public class GlobalSecurityConfiguration extends GlobalConfiguration {
55
@Extension(ordinal = Integer.MAX_VALUE - 210)
56
public class GlobalSecurityConfiguration extends ManagementLink {
58
private static final Logger LOGGER = Logger.getLogger(GlobalSecurityConfiguration.class.getName());
43
60
public MarkupFormatter getMarkupFormatter() {
44
61
return Jenkins.getInstance().getMarkupFormatter();
47
64
public int getSlaveAgentPort() {
48
65
return Jenkins.getInstance().getSlaveAgentPort();
52
public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
68
public synchronized void doConfigure(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, FormException {
69
// for compatibility reasons, the actual value is stored in Jenkins
70
BulkChange bc = new BulkChange(Jenkins.getInstance());
72
boolean result = configure(req, req.getSubmittedForm());
73
LOGGER.log(Level.FINE, "security saved: "+result);
74
Jenkins.getInstance().save();
75
FormApply.success(req.getContextPath()+"/manage").generateResponse(req, rsp, null);
81
public boolean configure(StaplerRequest req, JSONObject json) throws hudson.model.Descriptor.FormException {
53
82
// for compatibility reasons, the actual value is stored in Jenkins
54
83
Jenkins j = Jenkins.getInstance();
84
j.checkPermission(Jenkins.ADMINISTER);
56
85
if (json.has("useSecurity")) {
57
86
JSONObject security = json.getJSONObject("useSecurity");
58
87
j.setSecurityRealm(SecurityRealm.all().newInstanceFromRadioList(security, "realm"));
59
88
j.setAuthorizationStrategy(AuthorizationStrategy.all().newInstanceFromRadioList(security, "authorization"));
62
90
j.setSlaveAgentPort(new ServerTcpPort(security.getJSONObject("slaveAgentPort")).getPort());
63
91
} catch (IOException e) {
64
throw new FormException(e,"slaveAgentPortType");
92
throw new hudson.model.Descriptor.FormException(e, "slaveAgentPortType");
67
94
if (security.has("markupFormatter")) {
68
95
j.setMarkupFormatter(req.bindJSON(MarkupFormatter.class, security.getJSONObject("markupFormatter")));
73
100
j.disableSecurity();
103
// persist all the additional security configs
104
boolean result = true;
105
for(Descriptor<?> d : Functions.getSortedDescriptorsForGlobalConfig(FILTER)){
106
result &= configureDescriptor(req,json,d);
112
private boolean configureDescriptor(StaplerRequest req, JSONObject json, Descriptor<?> d) throws FormException {
113
// collapse the structure to remain backward compatible with the JSON structure before 1.
114
String name = d.getJsonSafeClassName();
115
JSONObject js = json.has(name) ? json.getJSONObject(name) : new JSONObject(); // if it doesn't have the property, the method returns invalid null object.
117
return d.configure(req, js);
121
public String getDisplayName() {
122
return Messages.GlobalSecurityConfiguration_DisplayName();
126
public String getDescription() {
127
return Messages.GlobalSecurityConfiguration_Description();
131
public String getIconFileName() {
136
public String getUrlName() {
137
return "configureSecurity";
141
public Permission getRequiredPermission() {
142
return Jenkins.ADMINISTER;
145
public static Predicate<GlobalConfigurationCategory> FILTER = new Predicate<GlobalConfigurationCategory>() {
146
public boolean apply(GlobalConfigurationCategory input) {
147
return input instanceof GlobalConfigurationCategory.Security;