Skip to content

Commit e36f2eb

Browse files
authored
Merge pull request #78 from amuniz/JENKINS-62275
[JENKINS-62275] Jenkins.MANAGE has access to global config
2 parents b320967 + 36887ab commit e36f2eb

File tree

8 files changed

+81
-5
lines changed

8 files changed

+81
-5
lines changed

pom.xml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.jenkins-ci.plugins</groupId>
77
<artifactId>plugin</artifactId>
8-
<version>2.35</version>
8+
<version>4.1</version>
99
</parent>
1010

1111
<artifactId>build-timeout</artifactId>
@@ -31,8 +31,10 @@
3131
</scm>
3232

3333
<properties>
34-
<jenkins.version>1.625.1</jenkins.version>
35-
<java.level>7</java.level>
34+
<jenkins.version>2.222.1</jenkins.version>
35+
<java.level>8</java.level>
36+
<!-- To be removed once Jenkins.MANAGE permission gets out of beta -->
37+
<useBeta>true</useBeta>
3638
</properties>
3739

3840
<dependencies>

src/main/java/hudson/plugins/build_timeout/operations/BuildStepOperation.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,18 @@
2626

2727
import java.io.IOException;
2828
import java.io.OutputStream;
29+
import java.io.PrintStream;
2930
import java.util.ArrayList;
3031
import java.util.List;
3132
import java.util.Map;
33+
import java.util.logging.Level;
34+
import java.util.logging.Logger;
3235

3336
import hudson.model.Node;
37+
import hudson.model.TaskListener;
38+
import hudson.security.Permission;
39+
import hudson.util.LogTaskListener;
40+
import jenkins.model.Jenkins;
3441
import net.sf.json.JSONObject;
3542

3643
import org.kohsuke.stapler.DataBoundConstructor;
@@ -111,8 +118,11 @@ public BuildStepOperation(BuildStep buildstep, boolean continueEvenFailed) {
111118
* {@link Launcher} that cannot launch anything.
112119
*/
113120
private static class DummyLauncher extends Launcher {
121+
122+
private static Logger LOG = Logger.getLogger(BuildStepOperation.DummyLauncher.class.getName());
123+
114124
public DummyLauncher() {
115-
super(null, null);
125+
super(new LogTaskListener(LOG, Level.INFO), null);
116126
}
117127

118128
@Override
@@ -131,7 +141,7 @@ public Channel launchChannel(String[] arg0, OutputStream arg1,
131141
throw new UnsupportedOperationException("Launcher does not supported in BuildStep timeout operation");
132142
}
133143
}
134-
144+
135145
/**
136146
* @return launcher specified with launcherOption.
137147
*/
@@ -240,5 +250,11 @@ public List<Descriptor<?>> getBuildStepDescriptors(AbstractProject<?,?> project)
240250

241251
return buildsteps;
242252
}
253+
254+
@Nonnull
255+
@Override
256+
public Permission getRequiredGlobalConfigPagePermission() {
257+
return Jenkins.MANAGE;
258+
}
243259
}
244260
}

src/test/java/hudson/plugins/build_timeout/impl/AbsoluteTimeOutStrategyTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@
2626

2727
import java.util.Arrays;
2828

29+
import hudson.model.ParametersDefinitionProperty;
2930
import hudson.model.Result;
3031
import hudson.model.Cause;
3132
import hudson.model.FreeStyleProject;
3233
import hudson.model.ParametersAction;
34+
import hudson.model.StringParameterDefinition;
3335
import hudson.model.StringParameterValue;
3436
import hudson.plugins.build_timeout.BuildTimeOutJenkinsRule;
3537
import hudson.plugins.build_timeout.BuildTimeOutOperation;
@@ -68,6 +70,8 @@ public void after() {
6870
@Test
6971
public void testConfigurationWithParameter() throws Exception {
7072
FreeStyleProject p = j.createFreeStyleProject();
73+
// needed since Jenkins 2.3
74+
p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("TIMEOUT", null)));
7175
p.getBuildWrappersList().add(
7276
new BuildTimeoutWrapper(
7377
new AbsoluteTimeOutStrategy("${TIMEOUT}"),

src/test/java/hudson/plugins/build_timeout/impl/DeadlineTimeOutStrategyTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@
2424

2525
package hudson.plugins.build_timeout.impl;
2626

27+
import hudson.model.ParametersDefinitionProperty;
2728
import hudson.model.Result;
2829
import hudson.model.Cause;
2930
import hudson.model.FreeStyleProject;
3031
import hudson.model.ParametersAction;
32+
import hudson.model.StringParameterDefinition;
3133
import hudson.model.StringParameterValue;
3234
import hudson.plugins.build_timeout.BuildTimeOutJenkinsRule;
3335
import hudson.plugins.build_timeout.BuildTimeOutOperation;
@@ -87,6 +89,8 @@ private void testWithParam(int timeToDeadlineInSecondsFromNow, Result expectedRe
8789
String deadline = getDeadlineTimeFromNow(timeToDeadlineInSecondsFromNow);
8890

8991
FreeStyleProject p = j.createFreeStyleProject();
92+
// needed since Jenkins 2.3
93+
p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("DEADLINE", null)));
9094
p.getBuildWrappersList().add(
9195
new BuildTimeoutWrapper(new DeadlineTimeOutStrategy("${DEADLINE}",
9296
TOLERANCE_PERIOD_IN_MINUTES), Arrays

src/test/java/hudson/plugins/build_timeout/impl/ElasticTimeOutStrategyJenkinsTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import hudson.model.Cause;
3333
import hudson.model.FreeStyleProject;
3434
import hudson.model.ParametersAction;
35+
import hudson.model.ParametersDefinitionProperty;
36+
import hudson.model.StringParameterDefinition;
3537
import hudson.model.StringParameterValue;
3638
import hudson.plugins.build_timeout.BuildTimeOutJenkinsRule;
3739
import hudson.plugins.build_timeout.BuildTimeOutOperation;
@@ -95,6 +97,8 @@ public void testCanConfigureWithWebPage() throws Exception {
9597
@Test
9698
public void testFailSafeTimeoutWithVariable() throws Exception {
9799
FreeStyleProject p = j.createFreeStyleProject();
100+
// needed since Jenkins 2.3
101+
p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("FailSafeTimeout", null)));
98102
p.getBuildWrappersList().add(new BuildTimeoutWrapper(
99103
new ElasticTimeOutStrategy("200", "${FailSafeTimeout}", "3", true),
100104
null,

src/test/java/hudson/plugins/build_timeout/impl/NoActivityTimeOutStrategyTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import java.util.Arrays;
3232
import java.util.Date;
3333

34+
import hudson.model.ParametersDefinitionProperty;
35+
import hudson.model.StringParameterDefinition;
3436
import org.junit.After;
3537
import org.junit.Before;
3638
import org.junit.Rule;
@@ -252,6 +254,8 @@ public void testCanConfigureWithWebPageUsingStringExpression() throws Exception
252254
@Test
253255
public void testConfigurationWithParameter() throws Exception {
254256
FreeStyleProject p = j.createFreeStyleProject();
257+
// needed since Jenkins 2.3
258+
p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("TIMEOUT", null)));
255259
p.getBuildWrappersList().add(
256260
new BuildTimeoutWrapper(
257261
new NoActivityTimeOutStrategy("${TIMEOUT}"),

src/test/java/hudson/plugins/build_timeout/operations/AbortAndRestartOperationTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import java.util.Arrays;
3333
import java.util.LinkedList;
3434

35+
import hudson.model.ParametersDefinitionProperty;
36+
import hudson.model.StringParameterDefinition;
3537
import org.junit.Rule;
3638
import org.junit.Test;
3739
import org.jvnet.hudson.test.SleepBuilder;
@@ -116,6 +118,8 @@ public void testAbortAndRestartTwice() throws Exception {
116118
@Test
117119
public void testUsingVariable() throws Exception {
118120
FreeStyleProject p = j.createFreeStyleProject();
121+
// needed since Jenkins 2.3
122+
p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("RESTART", null)));
119123
p.getBuildWrappersList().add(new BuildTimeoutWrapper(
120124
new QuickBuildTimeOutStrategy(1000),
121125
Arrays.<BuildTimeOutOperation>asList(new AbortAndRestartOperation("${RESTART}")),

src/test/java/hudson/plugins/build_timeout/operations/BuildStepOperationTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828

2929
import java.io.IOException;
3030
import java.util.Arrays;
31+
import java.util.Collection;
32+
import java.util.Optional;
3133

3234
import hudson.Extension;
3335
import hudson.Functions;
@@ -37,29 +39,38 @@
3739
import hudson.model.AbstractProject;
3840
import hudson.model.Cause;
3941
import hudson.model.BuildListener;
42+
import hudson.model.Descriptor;
4043
import hudson.model.FreeStyleProject;
4144
import hudson.model.ParametersAction;
45+
import hudson.model.ParametersDefinitionProperty;
46+
import hudson.model.StringParameterDefinition;
4247
import hudson.model.StringParameterValue;
4348
import hudson.model.Result;
49+
import hudson.model.User;
4450
import hudson.plugins.build_timeout.BuildTimeOutJenkinsRule;
4551
import hudson.plugins.build_timeout.BuildTimeOutOperation;
4652
import hudson.plugins.build_timeout.BuildTimeOutOperationDescriptor;
4753
import hudson.plugins.build_timeout.QuickBuildTimeOutStrategy;
4854
import hudson.plugins.build_timeout.BuildTimeoutWrapper;
4955
import hudson.plugins.build_timeout.impl.AbsoluteTimeOutStrategy;
56+
import hudson.security.ACL;
57+
import hudson.security.ACLContext;
5058
import hudson.tasks.BuildStepDescriptor;
5159
import hudson.tasks.BuildStepMonitor;
5260
import hudson.tasks.Builder;
5361
import hudson.tasks.Recorder;
5462
import hudson.tasks.ArtifactArchiver;
5563
import hudson.tasks.BatchFile;
5664
import hudson.tasks.Shell;
65+
import jenkins.model.Jenkins;
5766
import net.sf.json.JSONObject;
5867

5968
import org.junit.Before;
6069
import org.junit.Rule;
6170
import org.junit.Test;
71+
import org.jvnet.hudson.test.JenkinsRule;
6272
import org.jvnet.hudson.test.JenkinsRule.WebClient;
73+
import org.jvnet.hudson.test.MockAuthorizationStrategy;
6374
import org.jvnet.hudson.test.SleepBuilder;
6475
import org.kohsuke.stapler.DataBoundConstructor;
6576
import org.kohsuke.stapler.StaplerRequest;
@@ -308,6 +319,8 @@ public void testConfigurationWithoutDbc() throws Exception {
308319
@Test
309320
public void testLauncher() throws Exception {
310321
FreeStyleProject p = j.createFreeStyleProject();
322+
// needed since Jenkins 2.3
323+
p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("TESTSTRING", null)));
311324

312325
String TESTSTRING = "***THIS IS OUTPUT IN TIMEOUT***";
313326

@@ -363,6 +376,31 @@ public void testNoLauncher() throws Exception {
363376
new ParametersAction(new StringParameterValue("TESTSTRING", TESTSTRING))
364377
).get());
365378
}
379+
380+
@Test
381+
public void managePermissionShouldAccess() {
382+
final String USER = "user";
383+
final String MANAGER = "manager";
384+
j.jenkins.setSecurityRealm(j.createDummySecurityRealm());
385+
j.jenkins.setAuthorizationStrategy(new MockAuthorizationStrategy()
386+
// Read access
387+
.grant(Jenkins.READ).everywhere().to(USER)
388+
389+
// Read and Manage
390+
.grant(Jenkins.READ).everywhere().to(MANAGER)
391+
.grant(Jenkins.MANAGE).everywhere().to(MANAGER)
392+
);
393+
394+
try (ACLContext c = ACL.as(User.getById(USER, true))) {
395+
Collection<Descriptor> descriptors = Functions.getSortedDescriptorsForGlobalConfigUnclassified();
396+
assertTrue("Global configuration should not be accessible to READ users", descriptors.size() == 0);
397+
}
398+
try (ACLContext c = ACL.as(User.getById(MANAGER, true))) {
399+
Collection<Descriptor> descriptors = Functions.getSortedDescriptorsForGlobalConfigUnclassified();
400+
Optional<Descriptor> found = descriptors.stream().filter(descriptor -> descriptor instanceof BuildStepOperation.DescriptorImpl).findFirst();
401+
assertTrue("Global configuration should be accessible to MANAGE users", found.isPresent());
402+
}
403+
}
366404

367405
/**
368406
* A builder without {@link DataBoundConstructor}.

0 commit comments

Comments
 (0)