Skip to content

Commit 5b0c0ce

Browse files
authored
[JENKINS-73053] Allow users with Overall/Manage permission to configure endpoints (#784)
* [JENKINS-73053] Allow users with Overall/Manage permission to configure endpoints See [JENKINS-73053](https://issues.jenkins.io/browse/JENKINS-73053). * Tests that the endpoints configuration is visible to Overall/Manage
1 parent 40dd3eb commit 5b0c0ce

File tree

10 files changed

+29
-13
lines changed

10 files changed

+29
-13
lines changed

src/main/java/org/jenkinsci/plugins/github_branch_source/Connector.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ public static FormValidation checkScanCredentials(
182182
*/
183183
public static FormValidation checkScanCredentials(
184184
@CheckForNull Item context, String apiUri, String scanCredentialsId, @CheckForNull String repoOwner) {
185-
if (context == null && !Jenkins.get().hasPermission(Jenkins.ADMINISTER)
185+
if (context == null && !Jenkins.get().hasPermission(Jenkins.MANAGE)
186186
|| context != null && !context.hasPermission(Item.EXTENDED_READ)) {
187187
return FormValidation.ok();
188188
}

src/main/java/org/jenkinsci/plugins/github_branch_source/Endpoint.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public String getDisplayName() {
130130
@RequirePOST
131131
@Restricted(NoExternalUse.class)
132132
public FormValidation doCheckApiUri(@QueryParameter String apiUri) {
133-
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
133+
Jenkins.get().checkPermission(Jenkins.MANAGE);
134134
if (Util.fixEmptyAndTrim(apiUri) == null) {
135135
return FormValidation.warning("You must specify the API URL");
136136
}

src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubConfiguration.java

+8
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import edu.umd.cs.findbugs.annotations.CheckForNull;
2828
import edu.umd.cs.findbugs.annotations.NonNull;
2929
import hudson.Extension;
30+
import hudson.security.Permission;
3031
import hudson.util.ListBoxModel;
3132
import java.net.URI;
3233
import java.net.URISyntaxException;
@@ -38,6 +39,7 @@
3839
import java.util.Locale;
3940
import java.util.Set;
4041
import jenkins.model.GlobalConfiguration;
42+
import jenkins.model.Jenkins;
4143
import net.sf.json.JSONObject;
4244
import org.apache.commons.lang.StringUtils;
4345
import org.kohsuke.stapler.StaplerRequest;
@@ -232,4 +234,10 @@ public ListBoxModel doFillApiRateLimitCheckerItems() {
232234
}
233235
return items;
234236
}
237+
238+
@NonNull
239+
@Override
240+
public Permission getRequiredGlobalConfigPagePermission() {
241+
return Jenkins.MANAGE;
242+
}
235243
}

src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1800,7 +1800,7 @@ public ListBoxModel doFillCredentialsIdItems(
18001800
@QueryParameter String apiUri,
18011801
@QueryParameter String credentialsId) {
18021802
if (context == null
1803-
? !Jenkins.get().hasPermission(Jenkins.ADMINISTER)
1803+
? !Jenkins.get().hasPermission(Jenkins.MANAGE)
18041804
: !context.hasPermission(Item.EXTENDED_READ)) {
18051805
return new StandardListBoxModel().includeCurrentValue(credentialsId);
18061806
}

src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -2069,7 +2069,7 @@ public ListBoxModel doFillCredentialsIdItems(
20692069
@QueryParameter String apiUri,
20702070
@QueryParameter String credentialsId) {
20712071
if (context == null
2072-
? !Jenkins.get().hasPermission(Jenkins.ADMINISTER)
2072+
? !Jenkins.get().hasPermission(Jenkins.MANAGE)
20732073
: !context.hasPermission(Item.EXTENDED_READ)) {
20742074
return new StandardListBoxModel().includeCurrentValue(credentialsId);
20752075
}
@@ -2102,7 +2102,7 @@ public FormValidation doValidateRepositoryUrlAndCredentials(
21022102
@QueryParameter String repositoryUrl,
21032103
@QueryParameter String credentialsId,
21042104
@QueryParameter String repoOwner) {
2105-
if (context == null && !Jenkins.get().hasPermission(Jenkins.ADMINISTER)
2105+
if (context == null && !Jenkins.get().hasPermission(Jenkins.MANAGE)
21062106
|| context != null && !context.hasPermission(Item.EXTENDED_READ)) {
21072107
return FormValidation.error(
21082108
"Unable to validate repository information"); // not supposed to be seeing this form
@@ -2249,7 +2249,7 @@ public ListBoxModel doFillOrganizationItems(
22492249
if (credentialsId == null) {
22502250
return new ListBoxModel();
22512251
}
2252-
if (context == null && !Jenkins.get().hasPermission(Jenkins.ADMINISTER)
2252+
if (context == null && !Jenkins.get().hasPermission(Jenkins.MANAGE)
22532253
|| context != null && !context.hasPermission(Item.EXTENDED_READ)) {
22542254
return new ListBoxModel(); // not supposed to be seeing this form
22552255
}
@@ -2297,7 +2297,7 @@ public ListBoxModel doFillRepositoryItems(
22972297
if (repoOwner == null) {
22982298
return new ListBoxModel();
22992299
}
2300-
if (context == null && !Jenkins.get().hasPermission(Jenkins.ADMINISTER)
2300+
if (context == null && !Jenkins.get().hasPermission(Jenkins.MANAGE)
23012301
|| context != null && !context.hasPermission(Item.EXTENDED_READ)) {
23022302
return new ListBoxModel(); // not supposed to be seeing this form
23032303
}

src/main/java/org/jenkinsci/plugins/github_branch_source/SSHCheckoutTrait.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public ListBoxModel doFillCredentialsIdItems(
152152
@QueryParameter String apiUri,
153153
@QueryParameter String credentialsId) {
154154
if (context == null
155-
? !Jenkins.get().hasPermission(Jenkins.ADMINISTER)
155+
? !Jenkins.get().hasPermission(Jenkins.MANAGE)
156156
: !context.hasPermission(Item.EXTENDED_READ)) {
157157
return new StandardListBoxModel().includeCurrentValue(credentialsId);
158158
}
@@ -181,7 +181,7 @@ public FormValidation doCheckCredentialsId(
181181
@QueryParameter String serverUrl,
182182
@QueryParameter String value) {
183183
if (context == null
184-
? !Jenkins.get().hasPermission(Jenkins.ADMINISTER)
184+
? !Jenkins.get().hasPermission(Jenkins.MANAGE)
185185
: !context.hasPermission(Item.EXTENDED_READ)) {
186186
return FormValidation.ok();
187187
}

src/test/java/org/jenkinsci/plugins/github_branch_source/EndpointTest.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.htmlunit.HttpMethod;
2323
import org.htmlunit.Page;
2424
import org.htmlunit.WebRequest;
25+
import org.htmlunit.html.HtmlPage;
2526
import org.htmlunit.util.NameValuePair;
2627
import org.junit.Before;
2728
import org.junit.Rule;
@@ -45,7 +46,7 @@ public class EndpointTest {
4546
public void setUp() throws Exception {
4647
j.jenkins.setSecurityRealm(j.createDummySecurityRealm());
4748
MockAuthorizationStrategy auth = new MockAuthorizationStrategy();
48-
auth.grant(Jenkins.ADMINISTER).everywhere().to("alice");
49+
auth.grant(Jenkins.MANAGE).everywhere().to("alice");
4950
auth.grant(Jenkins.READ).everywhere().toEveryone();
5051
j.jenkins.setAuthorizationStrategy(auth);
5152
testUrl = Util.rawEncode(j.getURL().toString() + "testroot/");
@@ -90,6 +91,13 @@ public void canPostAsAdmin_doCheckApiUri() throws Exception {
9091
assertTrue(TestRoot.get().visited);
9192
}
9293

94+
@Test
95+
@Issue("JENKINS-73053")
96+
public void manageCanSetupEndpoints() throws Exception {
97+
HtmlPage htmlPage = j.createWebClient().login("alice").goTo("manage/configure");
98+
assertTrue(htmlPage.getVisibleText().contains("GitHub Enterprise Servers"));
99+
}
100+
93101
private String appendCrumb(String url) {
94102
return url + "&" + getCrumb();
95103
}

src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ public void doFillScanCredentials() throws Exception {
458458
try {
459459
r.jenkins.setSecurityRealm(r.createDummySecurityRealm());
460460
MockAuthorizationStrategy mockStrategy = new MockAuthorizationStrategy();
461-
mockStrategy.grant(Jenkins.ADMINISTER).onRoot().to("admin");
461+
mockStrategy.grant(Jenkins.MANAGE).onRoot().to("admin");
462462
mockStrategy.grant(Item.CONFIGURE).onItems(dummy).to("bob");
463463
mockStrategy.grant(Item.EXTENDED_READ).onItems(dummy).to("jim");
464464
r.jenkins.setAuthorizationStrategy(mockStrategy);

src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSourceTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,7 @@ public void doFillCredentials() throws Exception {
739739
try {
740740
r.jenkins.setSecurityRealm(r.createDummySecurityRealm());
741741
MockAuthorizationStrategy mockStrategy = new MockAuthorizationStrategy();
742-
mockStrategy.grant(Jenkins.ADMINISTER).onRoot().to("admin");
742+
mockStrategy.grant(Jenkins.MANAGE).onRoot().to("admin");
743743
mockStrategy.grant(Item.CONFIGURE).onItems(dummy).to("bob");
744744
mockStrategy.grant(Item.EXTENDED_READ).onItems(dummy).to("jim");
745745
r.jenkins.setAuthorizationStrategy(mockStrategy);

src/test/java/org/jenkinsci/plugins/github_branch_source/SSHCheckoutTraitTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public void given__descriptor__when__displayingCredentials__then__contractEnforc
8686
try {
8787
j.jenkins.setSecurityRealm(j.createDummySecurityRealm());
8888
MockAuthorizationStrategy mockStrategy = new MockAuthorizationStrategy();
89-
mockStrategy.grant(Jenkins.ADMINISTER).onRoot().to("admin");
89+
mockStrategy.grant(Jenkins.MANAGE).onRoot().to("admin");
9090
mockStrategy.grant(Item.CONFIGURE).onItems(dummy).to("bob");
9191
mockStrategy.grant(Item.EXTENDED_READ).onItems(dummy).to("jim");
9292
j.jenkins.setAuthorizationStrategy(mockStrategy);

0 commit comments

Comments
 (0)