Finalising service

This commit is contained in:
Luca Frosini 2022-04-05 12:54:46 +02:00
parent a958ddc834
commit 072bbacae3
3 changed files with 109 additions and 2 deletions

View File

@ -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<Exception> {
@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();
}
}

View File

@ -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));
}
}

View File

@ -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);
}
}
}