From 08462b863e61dfc4614f93f9e7f04f5ade32f283 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Wed, 16 Dec 2020 17:55:08 +0100 Subject: [PATCH] Temp files --- CHANGELOG.md | 4 ++ pom.xml | 33 ++++++++--- .../common/model/project/StoredFile.java | 4 ++ .../geoportal/common/rest/ProjectsI.java | 18 ++++++ .../geoportal/common/rest/TempFile.java | 15 +++++ .../geoportal/common/utils/ContextUtils.java | 41 ++++++++++++++ .../geoportal/common/utils/StorageUtils.java | 55 +++++++++++++++++++ 7 files changed, 161 insertions(+), 9 deletions(-) create mode 100644 src/main/java/org/gcube/application/geoportal/common/model/project/StoredFile.java create mode 100644 src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java create mode 100644 src/main/java/org/gcube/application/geoportal/common/rest/TempFile.java create mode 100644 src/main/java/org/gcube/application/geoportal/common/utils/ContextUtils.java create mode 100644 src/main/java/org/gcube/application/geoportal/common/utils/StorageUtils.java diff --git a/CHANGELOG.md b/CHANGELOG.md index e17371e..4e258f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm # Changelog for org.gcube.application.geoportal-common +# [v1.0.4-SNAPSHOT] - 2020-12-9 +Projects Rest Interface +TempFile support + # [v1.0.3] - 2020-12-4 Project model update diff --git a/pom.xml b/pom.xml index 653d58d..70ea309 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.gcube.application geoportal-common - 1.0.3 + 1.0.4-SNAPSHOT Geoportal Common @@ -51,9 +51,12 @@ 1.14.8 - - - + + + org.gcube.common + authorization-client + + @@ -62,22 +65,34 @@ test 4.11 - - + + org.glassfish.jersey.media jersey-media-json-jackson - - + + com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.8.8 - + + + + org.gcube.contentmanagement + storage-manager-core + [2.0.0, 3.0.0) + + + org.gcube.contentmanagement + storage-manager-wrapper + [2.0.0, 3.0.0) + + ch.qos.logback diff --git a/src/main/java/org/gcube/application/geoportal/common/model/project/StoredFile.java b/src/main/java/org/gcube/application/geoportal/common/model/project/StoredFile.java new file mode 100644 index 0000000..1309362 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/model/project/StoredFile.java @@ -0,0 +1,4 @@ +package org.gcube.application.geoportal.common.model.project; + + + diff --git a/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java b/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java new file mode 100644 index 0000000..773a6be --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java @@ -0,0 +1,18 @@ +package org.gcube.application.geoportal.common.rest; + +import java.rmi.RemoteException; + +import org.gcube.application.geoportal.common.model.project.Project; + +public interface ProjectsI { + + + public Iterable getAll() throws RemoteException; + public Iterable getByProfile(String profileId) throws RemoteException; + public Project getById(String profileId,String id) throws RemoteException; + public Iterable getByFilter(String filter)throws RemoteException; + public Iterable getByFilter(String filter, String profileId)throws RemoteException; + public Project registrNew(String profileId, String jsonDocument)throws RemoteException; + public Project update(String profileId, String projectId,String jsonDocument) throws RemoteException; + public void deleteById(String profileId, String projectId)throws RemoteException; +} diff --git a/src/main/java/org/gcube/application/geoportal/common/rest/TempFile.java b/src/main/java/org/gcube/application/geoportal/common/rest/TempFile.java new file mode 100644 index 0000000..3477b5c --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/rest/TempFile.java @@ -0,0 +1,15 @@ +package org.gcube.application.geoportal.common.rest; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TempFile { + + private String id; + private String filename; + +} diff --git a/src/main/java/org/gcube/application/geoportal/common/utils/ContextUtils.java b/src/main/java/org/gcube/application/geoportal/common/utils/ContextUtils.java new file mode 100644 index 0000000..9984053 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/utils/ContextUtils.java @@ -0,0 +1,41 @@ +package org.gcube.application.geoportal.common.utils; + +import static org.gcube.common.authorization.client.Constants.authorizationService; + +import org.gcube.common.authorization.library.AuthorizationEntry; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.scope.api.ScopeProvider; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class ContextUtils { + + + public static String getCurrentScope(){ + try{ + String token=SecurityTokenProvider.instance.get(); + log.debug("Token is : "+token); + if(token==null) throw new Exception("Security Token is null"); + AuthorizationEntry entry = authorizationService().get(token); + return entry.getContext(); + }catch(Exception e ){ + log.debug("Unable to resolve token, checking scope provider..",e); + return ScopeProvider.instance.get(); + } + } + + + public static String getCurrentCaller(){ + try{ + String token=SecurityTokenProvider.instance.get(); + log.debug("Token is : "+token); + if(token==null) throw new Exception("Security Token is null"); + AuthorizationEntry entry = authorizationService().get(token); + return entry.getClientInfo().getId(); + }catch(Exception e ){ + log.debug("Unable to resolve token, checking scope provider..",e); + return "Unidentified data-transfer user"; + } + } +} diff --git a/src/main/java/org/gcube/application/geoportal/common/utils/StorageUtils.java b/src/main/java/org/gcube/application/geoportal/common/utils/StorageUtils.java new file mode 100644 index 0000000..84ecb52 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/utils/StorageUtils.java @@ -0,0 +1,55 @@ +package org.gcube.application.geoportal.common.utils; + +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.UUID; + +import org.gcube.application.geoportal.common.rest.InterfaceConstants; +import org.gcube.application.geoportal.common.rest.TempFile; +import org.gcube.contentmanagement.blobstorage.service.IClient; +import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException; +import org.gcube.contentmanager.storageclient.wrapper.AccessType; +import org.gcube.contentmanager.storageclient.wrapper.MemoryType; +import org.gcube.contentmanager.storageclient.wrapper.StorageClient; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class StorageUtils { + + public static final IClient getClient(){ + return new StorageClient(InterfaceConstants.SERVICE_CLASS, InterfaceConstants.SERVICE_NAME, ContextUtils.getCurrentCaller(), AccessType.SHARED, MemoryType.VOLATILE).getClient(); + } + + private IClient client; + public StorageUtils() { + client=getClient(); + } + + //return Id + public TempFile putOntoStorage(InputStream source,String filename) throws RemoteBackendException, FileNotFoundException{ + log.debug("Uploading source "+filename); + String id=client.put(true).LFile(source).RFile(getUniqueString()); + return new TempFile(id,filename); + } + + public static final boolean checkStorageId(String id){ + return getClient().getHttpUrl().RFile(id)!=null; + } + + public static final String getUrlById(String id){ + IClient client=getClient(); + log.debug("Id is "+id); + return client.getHttpUrl().RFile(id); + } + + public static final void removeById(String id){ + IClient client=getClient(); + client.remove().RFile(id); + } + + + public static final String getUniqueString(){ + return UUID.randomUUID().toString(); + } +}