An invited user on signup should be set to enabled and should not lead to duplicate key exception. (#36)
This commit is contained in:
parent
bbbdbd50b5
commit
4a05ba6ac5
|
|
@ -59,6 +59,13 @@ public class CustomOAuth2UserServiceImpl extends DefaultReactiveOAuth2UserServic
|
|||
newUser.setIsEnabled(true);
|
||||
|
||||
return userService.create(newUser);
|
||||
}));
|
||||
}))
|
||||
.flatMap(user -> {
|
||||
if (!user.getIsEnabled()) {
|
||||
user.setIsEnabled(true);
|
||||
return repository.save(user);
|
||||
}
|
||||
return Mono.just(user);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,6 +66,13 @@ public class CustomOidcUserServiceImpl extends OidcReactiveOAuth2UserService
|
|||
newUser.setIsEnabled(true);
|
||||
|
||||
return userService.create(newUser);
|
||||
}));
|
||||
}))
|
||||
.flatMap(user -> {
|
||||
if (!user.getIsEnabled()) {
|
||||
user.setIsEnabled(true);
|
||||
return repository.save(user);
|
||||
}
|
||||
return Mono.just(user);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -480,8 +480,26 @@ public class UserServiceImpl extends BaseService<UserRepository, User, String> i
|
|||
}
|
||||
final String finalOriginHeader = originHeader;
|
||||
|
||||
return userCreate(user)
|
||||
// If the user doesn't exist, create the user. If the user exists, return a duplicate key exception
|
||||
return repository.findByEmail(user.getUsername())
|
||||
.flatMap(savedUser -> {
|
||||
if (!savedUser.getIsEnabled()) {
|
||||
// First enable the user
|
||||
savedUser.setIsEnabled(true);
|
||||
// In case of form login, store the password
|
||||
if (LoginSource.FORM.equals(user.getSource())) {
|
||||
if (user.getPassword() == null || user.getPassword().isBlank()) {
|
||||
return Mono.error(new AppsmithException(AppsmithError.INVALID_CREDENTIALS));
|
||||
}
|
||||
savedUser.setPassword(this.passwordEncoder.encode(user.getPassword()));
|
||||
}
|
||||
return repository.save(savedUser);
|
||||
}
|
||||
return Mono.error(new AppsmithException(AppsmithError.DUPLICATE_KEY));
|
||||
})
|
||||
.switchIfEmpty(userCreate(user))
|
||||
.flatMap(savedUser -> sendWelcomeEmail(savedUser, finalOriginHeader));
|
||||
|
||||
}
|
||||
|
||||
public Mono<User> sendWelcomeEmail(User user, String originHeader) {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.appsmith.server.configurations.WithMockAppsmithUser;
|
|||
import com.appsmith.server.constants.FieldName;
|
||||
import com.appsmith.server.domains.Application;
|
||||
import com.appsmith.server.domains.InviteUser;
|
||||
import com.appsmith.server.domains.LoginSource;
|
||||
import com.appsmith.server.domains.Organization;
|
||||
import com.appsmith.server.domains.User;
|
||||
import com.appsmith.server.exceptions.AppsmithError;
|
||||
|
|
@ -110,10 +111,10 @@ public class UserServiceTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
@WithMockUser(username = "anonymousUser", roles = {"ANONYMOUS"})
|
||||
@WithMockAppsmithUser
|
||||
public void createNewUserFormSignupNullPassword() {
|
||||
User newUser = new User();
|
||||
newUser.setEmail("new-user-email@email.com");
|
||||
newUser.setEmail("new-user-email-with-null-password@email.com");
|
||||
|
||||
Mono<User> userMono = userService.create(newUser);
|
||||
|
||||
|
|
@ -246,6 +247,7 @@ public class UserServiceTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
@WithMockAppsmithUser
|
||||
public void confirmInviteTokenFlow() {
|
||||
User newUser = new User();
|
||||
newUser.setEmail("newEmail@newEmail.com");
|
||||
|
|
@ -267,5 +269,55 @@ public class UserServiceTest {
|
|||
.verifyComplete();
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithMockAppsmithUser
|
||||
public void signUpViaFormLoginIfAlreadyInvited() {
|
||||
User newUser = new User();
|
||||
newUser.setEmail("alreadyInvited@alreadyInvited.com");
|
||||
newUser.setIsEnabled(false);
|
||||
|
||||
userRepository.save(newUser).block();
|
||||
|
||||
User signupUser = new User();
|
||||
signupUser.setEmail(newUser.getEmail());
|
||||
signupUser.setPassword("password");
|
||||
signupUser.setSource(LoginSource.FORM);
|
||||
|
||||
Mono<User> userMono = userService.create(signupUser);
|
||||
|
||||
StepVerifier.create(userMono)
|
||||
.assertNext(user -> {
|
||||
assertThat(user.getEmail().equals(newUser.getEmail()));
|
||||
assertThat(user.getSource().equals(LoginSource.FORM));
|
||||
assertThat(user.getIsEnabled()).isTrue();
|
||||
})
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithMockAppsmithUser
|
||||
public void signUpViaGoogleIfAlreadyInvited() {
|
||||
User newUser = new User();
|
||||
newUser.setEmail("alreadyInvited@google-gmail.com");
|
||||
newUser.setIsEnabled(false);
|
||||
|
||||
userRepository.save(newUser).block();
|
||||
|
||||
User signupUser = new User();
|
||||
signupUser.setEmail(newUser.getEmail());
|
||||
signupUser.setPassword("password");
|
||||
signupUser.setSource(LoginSource.GOOGLE);
|
||||
|
||||
Mono<User> userMono = userService.create(signupUser);
|
||||
|
||||
StepVerifier.create(userMono)
|
||||
.assertNext(user -> {
|
||||
assertThat(user.getEmail().equals(newUser.getEmail()));
|
||||
assertThat(user.getSource().equals(LoginSource.GOOGLE));
|
||||
assertThat(user.getIsEnabled()).isTrue();
|
||||
})
|
||||
.verifyComplete();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user