From 80e17109de71a1536e1ae01c144350a10d7200ac Mon Sep 17 00:00:00 2001 From: Liam Newman Date: Thu, 27 May 2021 02:54:01 -0700 Subject: [PATCH] Fix withCredetials() to correctly detect missing creds Fixes #1155 --- .../org/kohsuke/github/GitHubBuilder.java | 4 +- .../kohsuke/github/GitHubConnectionTest.java | 62 +++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GitHubBuilder.java b/src/main/java/org/kohsuke/github/GitHubBuilder.java index 94ba46a0e..a5372af02 100644 --- a/src/main/java/org/kohsuke/github/GitHubBuilder.java +++ b/src/main/java/org/kohsuke/github/GitHubBuilder.java @@ -60,13 +60,13 @@ public class GitHubBuilder implements Cloneable { builder = fromEnvironment(); - if (builder.authorizationProvider != null) + if (builder.authorizationProvider != AuthorizationProvider.ANONYMOUS) return builder; try { builder = fromPropertyFile(); - if (builder.authorizationProvider != null) + if (builder.authorizationProvider != AuthorizationProvider.ANONYMOUS) return builder; } catch (FileNotFoundException e) { // fall through diff --git a/src/test/java/org/kohsuke/github/GitHubConnectionTest.java b/src/test/java/org/kohsuke/github/GitHubConnectionTest.java index 852b64e39..1c554d08b 100644 --- a/src/test/java/org/kohsuke/github/GitHubConnectionTest.java +++ b/src/test/java/org/kohsuke/github/GitHubConnectionTest.java @@ -2,6 +2,7 @@ package org.kohsuke.github; import org.junit.Assume; import org.junit.Test; +import org.kohsuke.github.authorization.AuthorizationProvider; import org.kohsuke.github.authorization.UserAuthorizationProvider; import java.io.IOException; @@ -137,6 +138,67 @@ public class GitHubConnectionTest extends AbstractGitHubWireMockTest { assertThat(((UserAuthorizationProvider) builder.authorizationProvider).getLogin(), equalTo("bogus login")); } + @Test + public void testGitHubBuilderFromCredentials() throws IOException { + // we disable this test for JDK 16+ as the current hacks in setupEnvironment() don't work with JDK 16+ + Assume.assumeThat(Double.valueOf(System.getProperty("java.specification.version")), lessThan(16.0)); + + Map props = new HashMap(); + + props.put("endpoint", "bogus endpoint url"); + props.put("oauth", "bogus oauth token string"); + setupEnvironment(props); + GitHubBuilder builder = GitHubBuilder.fromCredentials(); + + assertThat(builder.endpoint, equalTo("bogus endpoint url")); + + assertThat(builder.authorizationProvider, instanceOf(UserAuthorizationProvider.class)); + assertThat(builder.authorizationProvider.getEncodedAuthorization(), equalTo("token bogus oauth token string")); + assertThat(((UserAuthorizationProvider) builder.authorizationProvider).getLogin(), nullValue()); + + props.put("login", "bogus login"); + setupEnvironment(props); + builder = GitHubBuilder.fromCredentials(); + + assertThat(builder.authorizationProvider, instanceOf(UserAuthorizationProvider.class)); + assertThat(builder.authorizationProvider.getEncodedAuthorization(), equalTo("token bogus oauth token string")); + assertThat(((UserAuthorizationProvider) builder.authorizationProvider).getLogin(), equalTo("bogus login")); + + props.put("jwt", "bogus jwt token string"); + setupEnvironment(props); + builder = GitHubBuilder.fromCredentials(); + + assertThat(builder.authorizationProvider, not(instanceOf(UserAuthorizationProvider.class))); + assertThat(builder.authorizationProvider.getEncodedAuthorization(), equalTo("Bearer bogus jwt token string")); + + props.put("password", "bogus weak password"); + setupEnvironment(props); + builder = GitHubBuilder.fromCredentials(); + + assertThat(builder.authorizationProvider, instanceOf(UserAuthorizationProvider.class)); + assertThat(builder.authorizationProvider.getEncodedAuthorization(), + equalTo("Basic Ym9ndXMgbG9naW46Ym9ndXMgd2VhayBwYXNzd29yZA==")); + assertThat(((UserAuthorizationProvider) builder.authorizationProvider).getLogin(), equalTo("bogus login")); + } + + @Test + public void testAnonymous() throws IOException { + // we disable this test for JDK 16+ as the current hacks in setupEnvironment() don't work with JDK 16+ + Assume.assumeThat(Double.valueOf(System.getProperty("java.specification.version")), lessThan(16.0)); + + Map props = new HashMap(); + + props.put("endpoint", mockGitHub.apiServer().baseUrl()); + setupEnvironment(props); + + // No values present except endpoint + GitHubBuilder builder = GitHubBuilder + .fromEnvironment("customLogin", "customPassword", "customOauth", "endpoint"); + + assertThat(builder.endpoint, equalTo(mockGitHub.apiServer().baseUrl())); + assertThat(builder.authorizationProvider, sameInstance(AuthorizationProvider.ANONYMOUS)); + } + @Test public void testGithubBuilderWithAppInstallationToken() throws Exception {