diff --git a/core/src/main/java/jenkins/security/s2m/MasterKillSwitchConfiguration.java b/core/src/main/java/jenkins/security/s2m/MasterKillSwitchConfiguration.java index cfec0ab96ecebc43d774805c4fe0b74b2746719b..c5b23e529025805a5e4627718e6f0b12ba13f46b 100644 --- a/core/src/main/java/jenkins/security/s2m/MasterKillSwitchConfiguration.java +++ b/core/src/main/java/jenkins/security/s2m/MasterKillSwitchConfiguration.java @@ -1,6 +1,8 @@ package jenkins.security.s2m; import hudson.Extension; +import hudson.ExtensionList; +import hudson.ExtensionPoint; import javax.inject.Inject; import jenkins.model.GlobalConfiguration; import jenkins.model.GlobalConfigurationCategory; @@ -52,8 +54,39 @@ public class MasterKillSwitchConfiguration extends GlobalConfiguration { return jenkins.isUseSecurity() // if security is off, there's no point && (jenkins.getComputers().length>1 // if there's no slave, || !jenkins.clouds.isEmpty() // and no clouds, likewise this is pointless + || Relevance.fromExtension() // unless a plugin thinks otherwise ) ; } + + /** + * Some plugins may cause the {@link MasterKillSwitchConfiguration} to be relevant for additional reasons, + * by implementing this extension point they can indicate such additional conditions. + * + * @since FIXME + */ + public static abstract class Relevance implements ExtensionPoint { + + /** + * Is the {@link MasterKillSwitchConfiguration} relevant. + * + * @return {@code true} if the {@link MasterKillSwitchConfiguration} relevant. + */ + public abstract boolean isRelevant(); + + /** + * Is the {@link MasterKillSwitchConfiguration} relevant for any of the {@link Relevance} extensions. + * + * @return {@code true} if and only if {@link Relevance#isRelevant()} for at least one extension. + */ + public static boolean fromExtension() { + for (Relevance r : ExtensionList.lookup(Relevance.class)) { + if (r.isRelevant()) { + return true; + } + } + return false; + } + } }