Allow signup for admins, even if publicly disabled (#2520)

* Allow signup for admins, even if publicly disabled

* Use Set for admin email addresses

* Set two admin emails in test
This commit is contained in:
Shrikant Sharat Kandula 2021-01-12 14:13:44 +05:30 committed by GitHub
parent 94cae231c1
commit 23cffc208f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 49 additions and 2 deletions

View File

@ -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<String> adminEmails = Collections.emptySet();
@Value("${oauth2.allowed-domains}")
private String allowedDomainList;

View File

@ -520,7 +520,7 @@ public class UserServiceImpl extends BaseService<UserRepository, User, String> 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)
)

View File

@ -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:}

View File

@ -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<User> 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<User> 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")