feature/implement-external-login-api #30

Merged
kasun merged 32 commits from feature/implement-external-login-api into main 2026-04-09 21:21:58 +02:00
5 changed files with 17 additions and 3 deletions
Showing only changes of commit ef4ee70aac - Show all commits
@@ -8,6 +8,7 @@ import org.springframework.stereotype.Service;
import com.vaessl.app.dto.ConnectionRequest; import com.vaessl.app.dto.ConnectionRequest;
import com.vaessl.app.dto.ConnectionResponse; import com.vaessl.app.dto.ConnectionResponse;
import com.vaessl.app.exception.WrongServiceTypeException;
@Service @Service
public class ConnectionService { public class ConnectionService {
@@ -26,6 +27,10 @@ public class ConnectionService {
ConnectionProvider provider = providerRegistry.get(request.serviceType()); ConnectionProvider provider = providerRegistry.get(request.serviceType());
if (provider == null) {
throw new WrongServiceTypeException();
}
provider.checkCredentials(request); provider.checkCredentials(request);
ConnectionResponse response = provider.authenticate(request); ConnectionResponse response = provider.authenticate(request);
@@ -8,7 +8,7 @@ public enum ErrorMessage {
BAD_REQUEST_EMPTY_FIELDS(HttpStatus.BAD_REQUEST, "Fields must not be empty."), UNAUTHORIZED_WRONG_LOGIN( BAD_REQUEST_EMPTY_FIELDS(HttpStatus.BAD_REQUEST, "Fields must not be empty."), UNAUTHORIZED_WRONG_LOGIN(
HttpStatus.UNAUTHORIZED, "Invalid username or password."), SERVICE_UNAVAILABLE_UNREACHABLE_URL( HttpStatus.UNAUTHORIZED, "Invalid username or password."), SERVICE_UNAVAILABLE_UNREACHABLE_URL(
HttpStatus.SERVICE_UNAVAILABLE, "The target URL is unreachable."), SERVER_ERROR_GENERAL( HttpStatus.SERVICE_UNAVAILABLE, "The target URL is unreachable."), SERVER_ERROR_GENERAL(
"The external app returned a server error: "), WRONG_SERVICE_TYPE(HttpStatus.BAD_REQUEST, "The external app returned a server error: "), WRONG_SERVICE_TYPE(HttpStatus.NOT_FOUND,
"No such service type."); "No such service type.");
private final HttpStatus status; private final HttpStatus status;
@@ -48,6 +48,11 @@ public class GlobalExceptionHandler {
SERVER_ERROR_GENERAL.getMessage() + e.getStatusText()); SERVER_ERROR_GENERAL.getMessage() + e.getStatusText());
} }
@ExceptionHandler(WrongServiceTypeException.class)
public ProblemDetail handleWrongServiceType(WrongServiceTypeException e) {
return ProblemDetail.forStatusAndDetail(WRONG_SERVICE_TYPE.getStatus(), WRONG_SERVICE_TYPE.getMessage());
}
@ExceptionHandler(EmptyCredentialsException.class) @ExceptionHandler(EmptyCredentialsException.class)
public ProblemDetail handleEmptyCredentials(EmptyCredentialsException e) { public ProblemDetail handleEmptyCredentials(EmptyCredentialsException e) {
return ProblemDetail.forStatusAndDetail(BAD_REQUEST_EMPTY_FIELDS.getStatus(), return ProblemDetail.forStatusAndDetail(BAD_REQUEST_EMPTY_FIELDS.getStatus(),
@@ -0,0 +1,4 @@
package com.vaessl.app.exception;
public class WrongServiceTypeException extends RuntimeException {
}
@@ -145,7 +145,7 @@ class HomeboxIntegrationTest {
* Test the custom ProviderNotFound exception. * Test the custom ProviderNotFound exception.
*/ */
@Test @Test
void shouldReturnProviderNotFound() { void shouldReturnWrongServiceTypeException() {
ConnectionRequest wrongServiceTypeReq = new ConnectionRequest( ConnectionRequest wrongServiceTypeReq = new ConnectionRequest(
MOCK_URL, MOCK_URL,
"wrong-service-type", "wrong-service-type",
@@ -155,7 +155,7 @@ class HomeboxIntegrationTest {
ResponseEntity<String> response = restTemplate.postForEntity(LOGIN.getValue(), wrongServiceTypeReq, ResponseEntity<String> response = restTemplate.postForEntity(LOGIN.getValue(), wrongServiceTypeReq,
String.class); String.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.BAD_REQUEST); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
assertThat(response.getBody()).contains(WRONG_SERVICE_TYPE.getMessage()); assertThat(response.getBody()).contains(WRONG_SERVICE_TYPE.getMessage());
} }