package org.gcube.portal.social.networking.ws.methods.v1; import static org.gcube.common.authorization.client.Constants.authorizationService; import java.util.ArrayList; import java.util.List; import javax.ws.rs.FormParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.portal.databook.shared.ApplicationProfile; import org.gcube.portal.social.networking.ws.utils.ErrorMessages; import org.gcube.portal.social.networking.ws.utils.SocialUtils; import org.slf4j.LoggerFactory; /** * REST interface for the social networking library (tokens). * @author Costantino Perciante at ISTI-CNR */ @Path("/tokens") @Deprecated public class Tokens { private final static String DEFAULT_ROLE = "OrganizationMember"; // Logger private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Tokens.class); @POST @Path("generateApplicationToken/") @Produces(MediaType.TEXT_PLAIN) /** * Allows the owner of the token token to generate a new token for the couple (appId, vre) * where vre is the same associated to the original user token. * @param appId * @param token * @return */ public Response generateApplicationToken(@FormParam("appid") String appId){ logger.info("Incoming request for app token generation. Appid id is " + appId); //user scope String userScope = ScopeProvider.instance.get(); // check if an application profile exists for this appId/scope (the discovery of the service will be made on the root) ApplicationProfile appProfile = SocialUtils.getProfileFromInfrastrucure(appId, userScope); if(appProfile == null){ logger.error("There is no application profile for this application id and scope!"); return Response.status(Status.FORBIDDEN).entity(ErrorMessages.NO_APP_PROFILE_FOUND).build(); } logger.info("Generating token for the application with id " + appId); List roles = new ArrayList<>(); roles.add(DEFAULT_ROLE); String appToken = null; try { // each token is related to an identifier and the context appToken = authorizationService().generateExternalServiceToken(appId); } catch (Exception e) { logger.error("Unable to generate token for app " + appId + " and scope " + userScope); return Response.status(Status.BAD_REQUEST).entity(ErrorMessages.TOKEN_GENERATION_APP_FAILED).build(); } return Response.status(Status.CREATED).entity(appToken).build(); } }