restore welcome page on 401

This commit is contained in:
Athou
2024-08-16 14:02:49 +02:00
parent 1bfa3ebb8e
commit 5c69daec08
2 changed files with 32 additions and 9 deletions

View File

@@ -4,30 +4,46 @@ import org.jboss.resteasy.reactive.RestResponse;
import org.jboss.resteasy.reactive.RestResponse.Status; import org.jboss.resteasy.reactive.RestResponse.Status;
import org.jboss.resteasy.reactive.server.ServerExceptionMapper; import org.jboss.resteasy.reactive.server.ServerExceptionMapper;
import io.quarkus.runtime.annotations.RegisterForReflection;
import io.quarkus.security.AuthenticationFailedException; import io.quarkus.security.AuthenticationFailedException;
import io.quarkus.security.UnauthorizedException;
import jakarta.annotation.Priority; import jakarta.annotation.Priority;
import jakarta.validation.ValidationException; import jakarta.validation.ValidationException;
import jakarta.ws.rs.ext.Provider; import jakarta.ws.rs.ext.Provider;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Provider @Provider
@Priority(1) @Priority(1)
public class ExceptionMappers { public class ExceptionMappers {
// display a message when the user fails to authenticate private final CommaFeedConfiguration config;
@ServerExceptionMapper(UnauthorizedException.class)
public RestResponse<UnauthorizedResponse> unauthorized(UnauthorizedException e) {
return RestResponse.status(RestResponse.Status.UNAUTHORIZED,
new UnauthorizedResponse(e.getMessage(), config.users().allowRegistrations()));
}
@ServerExceptionMapper(AuthenticationFailedException.class) @ServerExceptionMapper(AuthenticationFailedException.class)
public RestResponse<AuthenticationExceptionInfo> authenticationFailed(AuthenticationFailedException e) { public RestResponse<AuthenticationFailed> authenticationFailed(AuthenticationFailedException e) {
return RestResponse.status(RestResponse.Status.UNAUTHORIZED, new AuthenticationExceptionInfo(e.getMessage())); return RestResponse.status(RestResponse.Status.UNAUTHORIZED, new AuthenticationFailed(e.getMessage()));
} }
// display a message for validation errors
@ServerExceptionMapper(ValidationException.class) @ServerExceptionMapper(ValidationException.class)
public RestResponse<ValidationExceptionInfo> validationException(ValidationException e) { public RestResponse<ValidationFailed> validationFailed(ValidationException e) {
return RestResponse.status(Status.BAD_REQUEST, new ValidationExceptionInfo(e.getMessage())); return RestResponse.status(Status.BAD_REQUEST, new ValidationFailed(e.getMessage()));
} }
public record AuthenticationExceptionInfo(String message) { @RegisterForReflection
public record UnauthorizedResponse(String message, boolean allowRegistrations) {
} }
public record ValidationExceptionInfo(String message) { @RegisterForReflection
public record AuthenticationFailed(String message) {
}
@RegisterForReflection
public record ValidationFailed(String message) {
} }
} }

View File

@@ -8,6 +8,7 @@ import org.apache.hc.core5.http.HttpStatus;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import com.commafeed.ExceptionMappers.UnauthorizedResponse;
import com.commafeed.frontend.model.Entries; import com.commafeed.frontend.model.Entries;
import com.commafeed.frontend.model.UserModel; import com.commafeed.frontend.model.UserModel;
import com.commafeed.frontend.model.request.MarkRequest; import com.commafeed.frontend.model.request.MarkRequest;
@@ -24,7 +25,13 @@ class SecurityIT extends BaseIT {
@Test @Test
void notLoggedIn() { void notLoggedIn() {
RestAssured.given().get("rest/user/profile").then().statusCode(HttpStatus.SC_UNAUTHORIZED); UnauthorizedResponse info = RestAssured.given()
.get("rest/user/profile")
.then()
.statusCode(HttpStatus.SC_UNAUTHORIZED)
.extract()
.as(UnauthorizedResponse.class);
Assertions.assertTrue(info.allowRegistrations());
} }
@Test @Test