diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/CommonConfig.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/CommonConfig.java index 08f23d81f2..0b7d5a10b2 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/CommonConfig.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/CommonConfig.java @@ -17,6 +17,7 @@ import javax.validation.Validator; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Set; @Getter @Setter @@ -28,6 +29,9 @@ public class CommonConfig { @Value("${signup.disabled}") private boolean isSignupDisabled; + @Value("${admin.emails}") + private Set adminEmails = Collections.emptySet(); + @Value("${oauth2.allowed-domains}") private String allowedDomainList; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/UserServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/UserServiceImpl.java index 236dc11e01..262f557282 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/UserServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/UserServiceImpl.java @@ -520,7 +520,7 @@ public class UserServiceImpl extends BaseService i return Mono.error(new AppsmithException(AppsmithError.USER_ALREADY_EXISTS_SIGNUP, user.getUsername())); }) .switchIfEmpty( - commonConfig.isSignupDisabled() + commonConfig.isSignupDisabled() && !commonConfig.getAdminEmails().contains(user.getEmail()) ? Mono.error(new AppsmithException(AppsmithError.SIGNUP_DISABLED)) : userCreate(user) ) diff --git a/app/server/appsmith-server/src/main/resources/application.properties b/app/server/appsmith-server/src/main/resources/application.properties index 4844a5f66f..a5bab3621c 100644 --- a/app/server/appsmith-server/src/main/resources/application.properties +++ b/app/server/appsmith-server/src/main/resources/application.properties @@ -58,6 +58,7 @@ spring.mail.username=${APPSMITH_MAIL_USERNAME:} spring.mail.password=${APPSMITH_MAIL_PASSWORD:} spring.mail.properties.mail.smtp.auth=${APPSMITH_MAIL_SMTP_AUTH:} spring.mail.properties.mail.smtp.starttls.enable=${APPSMITH_MAIL_SMTP_TLS_ENABLED:} +admin.emails = ${APPSMITH_ADMIN_EMAILS:} # Marketplace Properties marketplace.base-url = ${APPSMITH_MARKETPLACE_URL:} diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/UserServiceWithDisabledSignupTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/UserServiceWithDisabledSignupTest.java index 87dc97cbb3..64e2d1d4ae 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/UserServiceWithDisabledSignupTest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/UserServiceWithDisabledSignupTest.java @@ -35,7 +35,7 @@ import static org.assertj.core.api.Assertions.assertThat; @Slf4j @RunWith(SpringRunner.class) -@SpringBootTest(properties = { "signup.disabled = true" }) +@SpringBootTest(properties = { "signup.disabled = true", "admin.emails = dummy_admin@appsmith.com,dummy2@appsmith.com" }) @DirtiesContext public class UserServiceWithDisabledSignupTest { @@ -88,6 +88,48 @@ public class UserServiceWithDisabledSignupTest { .verify(); } + @Test + @WithMockAppsmithUser + public void createNewAdminValidWhenDisabled() { + User newUser = new User(); + newUser.setEmail("dummy_admin@appsmith.com"); + newUser.setPassword("admin-password"); + + Mono userMono = userService.create(newUser); + + StepVerifier.create(userMono) + .assertNext(user -> { + assertThat(user).isNotNull(); + assertThat(user.getId()).isNotNull(); + assertThat(user.getEmail()).isEqualTo("dummy_admin@appsmith.com"); + assertThat(user.getName()).isEqualTo("dummy_admin@appsmith.com"); + assertThat(user.getPolicies()).isNotEmpty(); + assertThat(user.getOrganizationIds()).isNullOrEmpty(); + }) + .verifyComplete(); + } + + @Test + @WithMockAppsmithUser + public void createNewAdminValidWhenDisabled2() { + User newUser = new User(); + newUser.setEmail("dummy2@appsmith.com"); + newUser.setPassword("admin-password"); + + Mono userMono = userService.create(newUser); + + StepVerifier.create(userMono) + .assertNext(user -> { + assertThat(user).isNotNull(); + assertThat(user.getId()).isNotNull(); + assertThat(user.getEmail()).isEqualTo("dummy2@appsmith.com"); + assertThat(user.getName()).isEqualTo("dummy2@appsmith.com"); + assertThat(user.getPolicies()).isNotEmpty(); + assertThat(user.getOrganizationIds()).isNullOrEmpty(); + }) + .verifyComplete(); + } + @Test @DirtiesContext @WithUserDetails(value = "api_user")