From 9a7a437153eddd59e3f0d1cd211fcfc9a5668307 Mon Sep 17 00:00:00 2001 From: Dusan Jakub Date: Mon, 18 Sep 2023 19:14:32 +0200 Subject: [PATCH] DAG authorization pending - now correctly in JSON --- .../ysoft/geecon/error/ExceptionMappers.java | 29 ++++++++++++++----- .../com/ysoft/geecon/DeviceAuthGrantTest.java | 2 +- .../helpers/DeviceAuthorizationGrantFlow.java | 13 +++++---- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/ysoft/geecon/error/ExceptionMappers.java b/src/main/java/com/ysoft/geecon/error/ExceptionMappers.java index 91e6b68..fa5290f 100644 --- a/src/main/java/com/ysoft/geecon/error/ExceptionMappers.java +++ b/src/main/java/com/ysoft/geecon/error/ExceptionMappers.java @@ -2,24 +2,37 @@ package com.ysoft.geecon.error; import io.quarkus.qute.CheckedTemplate; import io.quarkus.qute.TemplateInstance; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; import jakarta.ws.rs.Produces; +import jakarta.ws.rs.container.ResourceInfo; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import org.jboss.resteasy.reactive.server.ServerExceptionMapper; +import java.util.Arrays; + +@ApplicationScoped class ExceptionMappers { - @ServerExceptionMapper - @Produces(MediaType.APPLICATION_JSON) - public Response mapJson(OAuthException exception) { - return Response.status(Response.Status.BAD_REQUEST).entity(exception.getResponse()).build(); - } + @Inject + ResourceInfo resourceInfo; @ServerExceptionMapper - @Produces(MediaType.APPLICATION_JSON) - public Response mapHtml(OAuthException exception) { - return Response.status(Response.Status.BAD_REQUEST).entity(Templates.error(exception.getResponse())).build(); + public Response exception(OAuthException exception) { + Object entity = producesJson() ? exception.getResponse() : Templates.error(exception.getResponse()); + return Response.status(Response.Status.BAD_REQUEST).entity(entity).build(); } + private boolean producesJson() { + Produces annotation = resourceInfo.getResourceMethod().getAnnotation(Produces.class); + if (annotation == null) { + return false; + } + String[] produces = annotation.value(); + return Arrays.asList(produces).contains(MediaType.APPLICATION_JSON); + } + + @CheckedTemplate public static class Templates { public static native TemplateInstance error(OAuthException.ErrorResponse response); diff --git a/src/test/java/com/ysoft/geecon/DeviceAuthGrantTest.java b/src/test/java/com/ysoft/geecon/DeviceAuthGrantTest.java index 38b8094..99fb0c8 100644 --- a/src/test/java/com/ysoft/geecon/DeviceAuthGrantTest.java +++ b/src/test/java/com/ysoft/geecon/DeviceAuthGrantTest.java @@ -71,6 +71,6 @@ public class DeviceAuthGrantTest { public void deviceAuthGrant_authorizationPending() throws IOException { DeviceAuthorizationGrantFlow flow = new DeviceAuthorizationGrantFlow(deviceUri, CLIENT); flow.start(); - System.err.println(flow.exchangeDeviceCodeError()); + flow.exchangeDeviceCodeError(); } } \ No newline at end of file diff --git a/src/test/java/com/ysoft/geecon/helpers/DeviceAuthorizationGrantFlow.java b/src/test/java/com/ysoft/geecon/helpers/DeviceAuthorizationGrantFlow.java index abcf22b..d5143f1 100644 --- a/src/test/java/com/ysoft/geecon/helpers/DeviceAuthorizationGrantFlow.java +++ b/src/test/java/com/ysoft/geecon/helpers/DeviceAuthorizationGrantFlow.java @@ -3,6 +3,7 @@ package com.ysoft.geecon.helpers; import com.ysoft.geecon.dto.AccessTokenResponse; import com.ysoft.geecon.dto.DeviceResponse; import com.ysoft.geecon.dto.OAuthClient; +import com.ysoft.geecon.error.OAuthException; import java.io.IOException; @@ -55,7 +56,7 @@ public class DeviceAuthorizationGrantFlow { .extract().as(AccessTokenResponse.class); } - public String exchangeDeviceCodeError() { + public OAuthException.ErrorResponse exchangeDeviceCodeError() { return given() .formParam("grant_type", "urn:ietf:params:oauth:grant-type:device_code") .formParam("client_id", client.clientId()) @@ -63,10 +64,10 @@ public class DeviceAuthorizationGrantFlow { .when() .post("/auth/token") .then() - .statusCode(400).extract().asString(); -// .contentType(JSON) -// .body("error", is(notNullValue())) -// .body("error_detail", is(notNullValue())) -// .extract().as(OAuthException.ErrorResponse.class); + .statusCode(400) + .contentType(JSON) + .body("error", is(notNullValue())) + .body("error_description", is(notNullValue())) + .extract().as(OAuthException.ErrorResponse.class); } }