Skip to content

Commit cb664e2

Browse files
Copilotstanleykc
andcommitted
Fix: Return 401 instead of 500 for empty credentials (issue #40)
Co-authored-by: stanleykc <3931811+stanleykc@users.noreply.github.com>
1 parent d8ee917 commit cb664e2

2 files changed

Lines changed: 26 additions & 1 deletion

File tree

UnityAuth/src/main/java/io/unityfoundation/auth/UnityAuthenticationProvider.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,13 @@ private User findUser(AuthenticationRequest<?, ?> authRequest) {
5959
@Override
6060
public @NonNull Publisher<AuthenticationResponse> authenticate(
6161
@NonNull AuthenticationRequest<Object, Object> authenticationRequest) {
62-
return Mono.fromCallable(() -> findUser(authenticationRequest))
62+
if (authenticationRequest.getIdentity() == null ||
63+
authenticationRequest.getIdentity().toString().isEmpty() ||
64+
authenticationRequest.getSecret() == null ||
65+
authenticationRequest.getSecret().toString().isEmpty()) {
66+
return Mono.just(AuthenticationResponse.failure(CREDENTIALS_DO_NOT_MATCH.toString()));
67+
}
68+
return Mono.fromCallable(() -> findUser(authenticationRequest))
6369
.subscribeOn(Schedulers.boundedElastic())
6470
.flatMap(user -> {
6571
AuthenticationFailed authenticationFailed = validate(user, authenticationRequest);

UnityAuth/src/test/java/io/unityfoundation/UnityIamTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.micronaut.http.HttpResponse;
99
import io.micronaut.http.HttpStatus;
1010
import io.micronaut.http.client.HttpClient;
11+
import io.micronaut.http.client.exceptions.HttpClientResponseException;
1112
import io.micronaut.http.client.annotation.Client;
1213
import io.micronaut.security.authentication.UsernamePasswordCredentials;
1314
import io.micronaut.security.token.render.BearerAccessRefreshToken;
@@ -311,4 +312,22 @@ private String login(String username) {
311312
BearerAccessRefreshToken bearer = rsp.body();
312313
return bearer.getAccessToken();
313314
}
315+
316+
@Test
317+
void login_failsWithEmptyPassword() {
318+
UsernamePasswordCredentials creds = new UsernamePasswordCredentials("person1@test.io", "");
319+
HttpRequest<?> request = HttpRequest.POST("/api/login", creds);
320+
HttpClientResponseException exception = assertThrows(HttpClientResponseException.class, () ->
321+
client.toBlocking().exchange(request, BearerAccessRefreshToken.class));
322+
assertEquals(HttpStatus.UNAUTHORIZED, exception.getStatus());
323+
}
324+
325+
@Test
326+
void login_failsWithEmptyUsername() {
327+
UsernamePasswordCredentials creds = new UsernamePasswordCredentials("", "test");
328+
HttpRequest<?> request = HttpRequest.POST("/api/login", creds);
329+
HttpClientResponseException exception = assertThrows(HttpClientResponseException.class, () ->
330+
client.toBlocking().exchange(request, BearerAccessRefreshToken.class));
331+
assertEquals(HttpStatus.UNAUTHORIZED, exception.getStatus());
332+
}
314333
}

0 commit comments

Comments
 (0)