Skip to content

Commit a5ec0ad

Browse files
authored
-allow login with case insensitive emails (#6712)
1 parent 01e5d8d commit a5ec0ad

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

app/server/appsmith-server/src/main/java/com/appsmith/server/authentication/handlers/CustomFormLoginServiceImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public CustomFormLoginServiceImpl(UserRepository repository) {
3333
@Override
3434
public Mono<UserDetails> findByUsername(String username) {
3535
return repository.findByEmail(username)
36+
.switchIfEmpty(repository.findByCaseInsensitiveEmail(username))
3637
.switchIfEmpty(Mono.error(new UsernameNotFoundException("Unable to find username: " + username)))
3738
.onErrorMap(error -> {
3839
log.error("Can't find user {}", username);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.appsmith.server.authentication.handlers;
2+
3+
import com.appsmith.server.domains.User;
4+
import com.appsmith.server.repositories.UserRepository;
5+
import org.junit.Before;
6+
import org.junit.Test;
7+
import org.junit.runner.RunWith;
8+
import org.mockito.Mockito;
9+
import org.springframework.boot.test.mock.mockito.MockBean;
10+
import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
11+
import org.springframework.security.core.userdetails.UsernameNotFoundException;
12+
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
13+
import reactor.core.publisher.Mono;
14+
import reactor.test.StepVerifier;
15+
import static org.assertj.core.api.Assertions.assertThat;
16+
17+
@RunWith(SpringJUnit4ClassRunner.class)
18+
public class CustomFormLoginServiceImplUnitTest {
19+
@MockBean
20+
private UserRepository repository;
21+
22+
private ReactiveUserDetailsService reactiveUserDetailsService;
23+
24+
@Before
25+
public void setUp() {
26+
reactiveUserDetailsService = new CustomFormLoginServiceImpl(repository);
27+
}
28+
29+
@Test
30+
public void findByUsername_WhenUserNameNotFound_ThrowsException() {
31+
String sampleEmail = "sample-email@example.com";
32+
Mockito.when(repository.findByEmail(sampleEmail)).thenReturn(Mono.empty());
33+
Mockito.when(repository.findByCaseInsensitiveEmail(sampleEmail)).thenReturn(Mono.empty());
34+
35+
StepVerifier.create(reactiveUserDetailsService.findByUsername(sampleEmail))
36+
.expectError(UsernameNotFoundException.class)
37+
.verify();
38+
}
39+
40+
@Test
41+
public void findByUsername_WhenUserNameExistsWithOtherCase_ReturnsUser() {
42+
String sampleEmail2 = "sampleEmail@example.com";
43+
User user = new User();
44+
user.setPassword("1234");
45+
user.setEmail(sampleEmail2.toLowerCase());
46+
47+
Mockito.when(repository.findByEmail(sampleEmail2)).thenReturn(Mono.empty());
48+
Mockito.when(repository.findByCaseInsensitiveEmail(sampleEmail2)).thenReturn(Mono.just(user));
49+
50+
StepVerifier.create(reactiveUserDetailsService.findByUsername(sampleEmail2))
51+
.assertNext(userDetails -> {
52+
assertThat(userDetails.getUsername()).isEqualTo(sampleEmail2.toLowerCase());
53+
assertThat(userDetails.getPassword()).isEqualTo("1234");
54+
})
55+
.verifyComplete();
56+
}
57+
}

0 commit comments

Comments
 (0)