=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/fileresource/FileResourceContentStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/fileresource/FileResourceContentStore.java 2015-09-21 14:33:06 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/fileresource/FileResourceContentStore.java 2015-10-06 22:00:49 +0000 @@ -30,6 +30,8 @@ import com.google.common.io.ByteSource; +import java.net.URI; + /** * @author Halvdan Hoem Grelland */ @@ -57,4 +59,11 @@ * @param key the key. */ void deleteFileResourceContent( String key ); + + /** + * Create a signed GET request which gives access to the content. + * @param key the key. + * @return a URI containing the signed GET request or null if signed requests are not supported. + */ + URI getSignedGetContentUri( String key ); } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/fileresource/FileResourceService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/fileresource/FileResourceService.java 2015-10-02 22:42:59 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/fileresource/FileResourceService.java 2015-10-06 22:00:49 +0000 @@ -30,6 +30,7 @@ import com.google.common.io.ByteSource; +import java.net.URI; import java.util.List; /** @@ -50,4 +51,6 @@ boolean fileResourceExists( String uid ); void updateFileResource( FileResource fileResource ); + + URI getSignedGetFileResourceContentUri( String uid ); } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/fileresource/DefaultFileResourceService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/fileresource/DefaultFileResourceService.java 2015-10-02 22:42:59 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/fileresource/DefaultFileResourceService.java 2015-10-06 22:00:49 +0000 @@ -36,6 +36,7 @@ import com.google.common.io.ByteSource; +import java.net.URI; import java.util.List; /** @@ -144,6 +145,19 @@ fileResourceStore.update( fileResource ); } + @Override + public URI getSignedGetFileResourceContentUri( String uid ) + { + FileResource fileResource = getFileResource( uid ); + + if ( fileResource == null ) + { + return null; + } + + return fileResourceContentStore.getSignedGetContentUri( getRelativeStorageKey( fileResource ) ); + } + // --------------------------------------------------------------------- // Supportive methods // --------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/fileresource/JCloudsFileResourceContentStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/fileresource/JCloudsFileResourceContentStore.java 2015-10-01 09:45:57 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/fileresource/JCloudsFileResourceContentStore.java 2015-10-06 22:00:49 +0000 @@ -37,15 +37,21 @@ import org.hisp.dhis.external.location.LocationManager; import org.hisp.dhis.hibernate.HibernateConfigurationProvider; import org.jclouds.ContextBuilder; +import org.jclouds.blobstore.BlobRequestSigner; import org.jclouds.blobstore.BlobStore; import org.jclouds.blobstore.BlobStoreContext; +import org.jclouds.blobstore.LocalBlobRequestSigner; import org.jclouds.blobstore.domain.Blob; +import org.jclouds.blobstore.internal.RequestSigningUnsupported; import org.jclouds.domain.Credentials; import org.jclouds.domain.Location; import org.jclouds.filesystem.reference.FilesystemConstants; +import org.jclouds.http.HttpRequest; +import org.joda.time.Minutes; import java.io.IOException; import java.io.InputStream; +import java.net.URI; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -65,6 +71,8 @@ private static final Pattern CONTAINER_NAME_PATTERN = Pattern.compile( "^((?!-)[a-zA-Z0-9-]{1,63}(?