From 906c27ebba86e4ef622edb9e5708fabd9af1001b Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Wed, 20 Nov 2019 11:42:32 +0100 Subject: [PATCH] create scmadmin also if only _anonymous user exists --- .../sonia/scm/lifecycle/SetupContextListener.java | 10 +++++++--- .../scm/lifecycle/SetupContextListenerTest.java | 14 +++++++++++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/SetupContextListener.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/SetupContextListener.java index 512a4fc534..07e7d0409b 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/SetupContextListener.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/SetupContextListener.java @@ -61,7 +61,7 @@ public class SetupContextListener implements ServletContextListener { @Override public void run() { - if (isFirstStart()) { + if (shouldCreateAdminAccount()) { createAdminAccount(); } if (anonymousUserRequiredButNotExists()) { @@ -73,8 +73,12 @@ public class SetupContextListener implements ServletContextListener { return scmConfiguration.isAnonymousAccessEnabled() && !userManager.contains(SCMContext.USER_ANONYMOUS); } - private boolean isFirstStart() { - return userManager.getAll().isEmpty(); + private boolean shouldCreateAdminAccount() { + return userManager.getAll().isEmpty() || onlyAnonymousUserExists(); + } + + private boolean onlyAnonymousUserExists() { + return userManager.getAll().size() == 1 && userManager.contains(SCMContext.USER_ANONYMOUS); } private void createAdminAccount() { diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/SetupContextListenerTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/SetupContextListenerTest.java index 27ddd42cc1..efacbd3594 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/SetupContextListenerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/SetupContextListenerTest.java @@ -70,7 +70,19 @@ class SetupContextListenerTest { } @Test - void shouldCreateAdminAccountAndAssignPermissions() { + void shouldCreateAdminAccountIfNoUserExistsAndAssignPermissions() { + when(passwordService.encryptPassword("scmadmin")).thenReturn("secret"); + + setupContextListener.contextInitialized(null); + + verifyAdminCreated(); + verifyAdminPermissionsAssigned(); + } + + @Test + void shouldCreateAdminAccountIfOnlyAnonymousUserExistsAndAssignPermissions() { + when(userManager.getAll()).thenReturn(Lists.newArrayList(SCMContext.ANONYMOUS)); + when(userManager.contains(SCMContext.USER_ANONYMOUS)).thenReturn(true); when(passwordService.encryptPassword("scmadmin")).thenReturn("secret"); setupContextListener.contextInitialized(null);