-allow login with case insensitive emails (#6712)
This commit is contained in:
parent
01e5d8d839
commit
a5ec0add23
|
|
@ -33,6 +33,7 @@ public class CustomFormLoginServiceImpl implements ReactiveUserDetailsService {
|
|||
@Override
|
||||
public Mono<UserDetails> findByUsername(String username) {
|
||||
return repository.findByEmail(username)
|
||||
.switchIfEmpty(repository.findByCaseInsensitiveEmail(username))
|
||||
.switchIfEmpty(Mono.error(new UsernameNotFoundException("Unable to find username: " + username)))
|
||||
.onErrorMap(error -> {
|
||||
log.error("Can't find user {}", username);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
package com.appsmith.server.authentication.handlers;
|
||||
|
||||
import com.appsmith.server.domains.User;
|
||||
import com.appsmith.server.repositories.UserRepository;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
|
||||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.test.StepVerifier;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
public class CustomFormLoginServiceImplUnitTest {
|
||||
@MockBean
|
||||
private UserRepository repository;
|
||||
|
||||
private ReactiveUserDetailsService reactiveUserDetailsService;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
reactiveUserDetailsService = new CustomFormLoginServiceImpl(repository);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void findByUsername_WhenUserNameNotFound_ThrowsException() {
|
||||
String sampleEmail = "sample-email@example.com";
|
||||
Mockito.when(repository.findByEmail(sampleEmail)).thenReturn(Mono.empty());
|
||||
Mockito.when(repository.findByCaseInsensitiveEmail(sampleEmail)).thenReturn(Mono.empty());
|
||||
|
||||
StepVerifier.create(reactiveUserDetailsService.findByUsername(sampleEmail))
|
||||
.expectError(UsernameNotFoundException.class)
|
||||
.verify();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void findByUsername_WhenUserNameExistsWithOtherCase_ReturnsUser() {
|
||||
String sampleEmail2 = "sampleEmail@example.com";
|
||||
User user = new User();
|
||||
user.setPassword("1234");
|
||||
user.setEmail(sampleEmail2.toLowerCase());
|
||||
|
||||
Mockito.when(repository.findByEmail(sampleEmail2)).thenReturn(Mono.empty());
|
||||
Mockito.when(repository.findByCaseInsensitiveEmail(sampleEmail2)).thenReturn(Mono.just(user));
|
||||
|
||||
StepVerifier.create(reactiveUserDetailsService.findByUsername(sampleEmail2))
|
||||
.assertNext(userDetails -> {
|
||||
assertThat(userDetails.getUsername()).isEqualTo(sampleEmail2.toLowerCase());
|
||||
assertThat(userDetails.getPassword()).isEqualTo("1234");
|
||||
})
|
||||
.verifyComplete();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user