From 072bbacae30c05b0c8747ead5b6e2cb9e05abeb0 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 5 Apr 2022 12:54:46 +0200 Subject: [PATCH] Finalising service --- .../AuthorizationBridgeExceptionMapper.java | 38 ++++++++++++++++++ .../common/authorization/rest/BaseREST.java | 33 +++++++++++++++ .../gcube/common/authorization/rest/Goat.java | 40 ++++++++++++++++++- 3 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/gcube/common/authorization/rest/AuthorizationBridgeExceptionMapper.java create mode 100644 src/main/java/org/gcube/common/authorization/rest/BaseREST.java diff --git a/src/main/java/org/gcube/common/authorization/rest/AuthorizationBridgeExceptionMapper.java b/src/main/java/org/gcube/common/authorization/rest/AuthorizationBridgeExceptionMapper.java new file mode 100644 index 0000000..3ff2c61 --- /dev/null +++ b/src/main/java/org/gcube/common/authorization/rest/AuthorizationBridgeExceptionMapper.java @@ -0,0 +1,38 @@ +package org.gcube.common.authorization.rest; + +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +@Provider +public class AuthorizationBridgeExceptionMapper implements ExceptionMapper { + + @Override + public Response toResponse(Exception exception) { + + Status status = Status.INTERNAL_SERVER_ERROR; + String exceptionMessage = exception.getMessage(); + try { + if(exception.getCause() != null) { + exceptionMessage = exception.getCause().getMessage(); + } + } catch(Exception e) { + exceptionMessage = exception.getMessage(); + } + MediaType mediaType = MediaType.TEXT_PLAIN_TYPE; + + if(WebApplicationException.class.isAssignableFrom(exception.getClass())) { + Response gotResponse = ((WebApplicationException) exception).getResponse(); + status = Status.fromStatusCode(gotResponse.getStatusInfo().getStatusCode()); + } + + return Response.status(status).entity(exceptionMessage).type(mediaType).build(); + } + +} diff --git a/src/main/java/org/gcube/common/authorization/rest/BaseREST.java b/src/main/java/org/gcube/common/authorization/rest/BaseREST.java new file mode 100644 index 0000000..ab09895 --- /dev/null +++ b/src/main/java/org/gcube/common/authorization/rest/BaseREST.java @@ -0,0 +1,33 @@ +package org.gcube.common.authorization.rest; + +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response.ResponseBuilder; +import javax.ws.rs.core.UriInfo; + +import org.gcube.common.authorization.library.provider.CalledMethodProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public class BaseREST { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Context + protected UriInfo uriInfo; + + protected static final String LOCATION_HEADER = "Location"; + + protected void setCalledMethod(String method) { + CalledMethodProvider.instance.set(method); + logger.info("{}", uriInfo.getAbsolutePath()); + } + + protected ResponseBuilder addLocation(ResponseBuilder responseBuilder, String id) { + return responseBuilder.header(LOCATION_HEADER, + String.format("%s/%s", uriInfo.getAbsolutePath().toString(), id)); + } + +} diff --git a/src/main/java/org/gcube/common/authorization/rest/Goat.java b/src/main/java/org/gcube/common/authorization/rest/Goat.java index 365e1c8..5fc3a4a 100644 --- a/src/main/java/org/gcube/common/authorization/rest/Goat.java +++ b/src/main/java/org/gcube/common/authorization/rest/Goat.java @@ -1,9 +1,45 @@ package org.gcube.common.authorization.rest; +import static org.gcube.common.authorization.client.Constants.authorizationService; + +import java.util.ArrayList; + +import javax.ws.rs.GET; +import javax.ws.rs.InternalServerErrorException; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; + +import org.gcube.common.authorization.library.provider.AuthorizationProvider; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.authorization.library.provider.UserInfo; +import org.gcube.common.scope.api.ScopeProvider; + /** * @author Luca Frosini (ISTI - CNR) */ +@Path("goat") +public class Goat extends BaseREST { -public class Goat { - + @GET + @Produces(MediaType.TEXT_PLAIN) + public String getOldToken() { + setCalledMethod("GET /goat"); + try { + String oldToken = SecurityTokenProvider.instance.get(); + if(oldToken==null) { + String context = ScopeProvider.instance.get(); + String username = AuthorizationProvider.instance.get().getClient().getId(); + UserInfo userInfo = new UserInfo(username, new ArrayList<>()); + oldToken = authorizationService().generateUserToken(userInfo, context); + } + return oldToken; + } catch(WebApplicationException e) { + throw e; + } catch(Exception e) { + throw new InternalServerErrorException(e); + } + } + }