From 28cae181d24a77a8dd423f08c13cc8a80705556c Mon Sep 17 00:00:00 2001 From: Aurelien Poscia Date: Wed, 26 Apr 2023 10:09:06 +0200 Subject: [PATCH] SONAR-19084 Add API endpoints github_provisioning/{enable/disable/status} --- .../main/java/org/sonar/auth/github/GitHubSettings.java | 8 ++++++-- .../java/org/sonar/auth/github/GitHubSettingsTest.java | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/server/sonar-auth-github/src/main/java/org/sonar/auth/github/GitHubSettings.java b/server/sonar-auth-github/src/main/java/org/sonar/auth/github/GitHubSettings.java index b7a1eec45d8..477ba26b84c 100644 --- a/server/sonar-auth-github/src/main/java/org/sonar/auth/github/GitHubSettings.java +++ b/server/sonar-auth-github/src/main/java/org/sonar/auth/github/GitHubSettings.java @@ -33,6 +33,7 @@ import static java.lang.String.valueOf; import static org.sonar.api.PropertyType.BOOLEAN; import static org.sonar.api.PropertyType.PASSWORD; import static org.sonar.api.PropertyType.STRING; +import static org.sonar.api.utils.Preconditions.checkState; public class GitHubSettings { @@ -47,7 +48,7 @@ public class GitHubSettings { public static final String WEB_URL = "sonar.auth.github.webUrl"; public static final String ORGANIZATIONS = "sonar.auth.github.organizations"; @VisibleForTesting - static final String PROVISIONING = "provisioning.github"; //TODO + static final String PROVISIONING = "provisioning.github.enabled"; private static final String CATEGORY = "authentication"; private static final String SUBCATEGORY = "github"; @@ -78,7 +79,7 @@ public class GitHubSettings { return configuration.get(PRIVATE_KEY).orElse(""); } - boolean isEnabled() { + public boolean isEnabled() { return configuration.getBoolean(ENABLED).orElse(false) && !clientId().isEmpty() && !clientSecret().isEmpty(); } @@ -113,6 +114,9 @@ public class GitHubSettings { } public void setProvisioning(boolean enableProvisioning) { + if (enableProvisioning) { + checkState(isEnabled(), "GitHub authentication must be enabled to enable GitHub provisioning."); + } internalProperties.write(PROVISIONING, String.valueOf(enableProvisioning)); } diff --git a/server/sonar-auth-github/src/test/java/org/sonar/auth/github/GitHubSettingsTest.java b/server/sonar-auth-github/src/test/java/org/sonar/auth/github/GitHubSettingsTest.java index 870a2a90973..3f28bad4305 100644 --- a/server/sonar-auth-github/src/test/java/org/sonar/auth/github/GitHubSettingsTest.java +++ b/server/sonar-auth-github/src/test/java/org/sonar/auth/github/GitHubSettingsTest.java @@ -28,6 +28,7 @@ import org.sonar.api.utils.System2; import org.sonar.server.property.InternalProperties; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -94,8 +95,16 @@ public class GitHubSettingsTest { assertThat(underTest.isProvisioningEnabled()).isTrue(); } + @Test + public void setProvisioning_whenGitHubAuthDisabled_shouldThrow() { + assertThatIllegalStateException() + .isThrownBy(() -> underTest.setProvisioning(true)) + .withMessage("GitHub authentication must be enabled to enable GitHub provisioning."); + } + @Test public void setProvisioning_whenPassedTrue_delegatesToInternalPropertiesWrite() { + enableGithubAuthentication(); underTest.setProvisioning(true); verify(internalProperties).write(GitHubSettings.PROVISIONING, Boolean.TRUE.toString()); } -- 2.39.5