package jenkins.security.s2m;
import hudson.Extension;
import javax.inject.Inject;
import jenkins.model.GlobalConfiguration;
import jenkins.model.GlobalConfigurationCategory;
import jenkins.model.Jenkins;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest;
/**
* Exposes {@link AdminWhitelistRule#masterKillSwitch} to the admin.
*
* @author Kohsuke Kawaguchi
* @since 1.THU
*/
@Extension
public class MasterKillSwitchConfiguration extends GlobalConfiguration {
@Inject
AdminWhitelistRule rule;
@Inject
Jenkins jenkins;
@Override
public GlobalConfigurationCategory getCategory() {
return GlobalConfigurationCategory.get(GlobalConfigurationCategory.Security.class);
}
public boolean getMasterToSlaveAccessControl() {
return !rule.getMasterKillSwitch();
}
@Override
public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
if (isRelevant()) {
// don't record on/off unless this becomes relevant, so that we can differentiate
// those who have disabled vs those who haven't cared.
rule.setMasterKillSwitch(!json.has("masterToSlaveAccessControl"));
}
return true;
}
/**
* Returns true if the configuration of this subsystem becomes relevant.
* Unless this option is relevant, we don't let users choose this.
*/
public boolean isRelevant() {
return jenkins.hasPermission(Jenkins.RUN_SCRIPTS) && jenkins.isUseSecurity();
}
}