diff --git a/scm-webapp/src/main/java/sonia/scm/boot/SetupContextListener.java b/scm-webapp/src/main/java/sonia/scm/boot/SetupContextListener.java index 427e9f5dd7..59002c2d08 100644 --- a/scm-webapp/src/main/java/sonia/scm/boot/SetupContextListener.java +++ b/scm-webapp/src/main/java/sonia/scm/boot/SetupContextListener.java @@ -2,6 +2,8 @@ package sonia.scm.boot; import com.google.common.annotations.VisibleForTesting; import org.apache.shiro.authc.credential.PasswordService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import sonia.scm.plugin.Extension; import sonia.scm.security.PermissionAssigner; import sonia.scm.security.PermissionDescriptor; @@ -18,6 +20,8 @@ import java.util.Collections; @Extension public class SetupContextListener implements ServletContextListener { + private static final Logger LOG = LoggerFactory.getLogger(SetupContextListener.class); + private final AdministrationContext administrationContext; @Inject @@ -27,7 +31,11 @@ public class SetupContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { - administrationContext.runAsAdmin(SetupAction.class); + if (Boolean.getBoolean("sonia.scm.skipAdminCreation")) { + LOG.info("found skipAdminCreation flag; skipping creation of scmadmin"); + } else { + administrationContext.runAsAdmin(SetupAction.class); + } } @Override diff --git a/scm-webapp/src/test/java/sonia/scm/boot/SetupContextListenerTest.java b/scm-webapp/src/test/java/sonia/scm/boot/SetupContextListenerTest.java index 421dca5cb7..8912589480 100644 --- a/scm-webapp/src/test/java/sonia/scm/boot/SetupContextListenerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/boot/SetupContextListenerTest.java @@ -9,6 +9,8 @@ import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.mockito.junit.jupiter.MockitoSettings; +import org.mockito.quality.Strictness; import sonia.scm.security.PermissionAssigner; import sonia.scm.security.PermissionDescriptor; import sonia.scm.user.User; @@ -62,6 +64,21 @@ class SetupContextListenerTest { verifyAdminPermissionsAssigned(); } + @Test + @MockitoSettings(strictness = Strictness.LENIENT) + void shouldSkipAdminAccountCreationIfPropertyIsSet() { + System.setProperty("sonia.scm.skipAdminCreation", "true"); + + try { + setupContextListener.contextInitialized(null); + + verify(userManager, never()).create(any()); + verify(permissionAssigner, never()).setPermissionsForUser(anyString(), any(Collection.class)); + } finally { + System.setProperty("sonia.scm.skipAdminCreation", ""); + } + } + @Test void shouldDoNothingOnSecondStart() { List users = Lists.newArrayList(UserTestData.createTrillian());