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);
|
newUser.setIsEnabled(true);
|
||||||
|
|
||||||
return userService.create(newUser);
|
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);
|
newUser.setIsEnabled(true);
|
||||||
|
|
||||||
return userService.create(newUser);
|
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;
|
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));
|
.flatMap(savedUser -> sendWelcomeEmail(savedUser, finalOriginHeader));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Mono<User> sendWelcomeEmail(User user, String originHeader) {
|
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.constants.FieldName;
|
||||||
import com.appsmith.server.domains.Application;
|
import com.appsmith.server.domains.Application;
|
||||||
import com.appsmith.server.domains.InviteUser;
|
import com.appsmith.server.domains.InviteUser;
|
||||||
|
import com.appsmith.server.domains.LoginSource;
|
||||||
import com.appsmith.server.domains.Organization;
|
import com.appsmith.server.domains.Organization;
|
||||||
import com.appsmith.server.domains.User;
|
import com.appsmith.server.domains.User;
|
||||||
import com.appsmith.server.exceptions.AppsmithError;
|
import com.appsmith.server.exceptions.AppsmithError;
|
||||||
|
|
@ -110,10 +111,10 @@ public class UserServiceTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@WithMockUser(username = "anonymousUser", roles = {"ANONYMOUS"})
|
@WithMockAppsmithUser
|
||||||
public void createNewUserFormSignupNullPassword() {
|
public void createNewUserFormSignupNullPassword() {
|
||||||
User newUser = new User();
|
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);
|
Mono<User> userMono = userService.create(newUser);
|
||||||
|
|
||||||
|
|
@ -246,6 +247,7 @@ public class UserServiceTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@WithMockAppsmithUser
|
||||||
public void confirmInviteTokenFlow() {
|
public void confirmInviteTokenFlow() {
|
||||||
User newUser = new User();
|
User newUser = new User();
|
||||||
newUser.setEmail("newEmail@newEmail.com");
|
newUser.setEmail("newEmail@newEmail.com");
|
||||||
|
|
@ -267,5 +269,55 @@ public class UserServiceTest {
|
||||||
.verifyComplete();
|
.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