package org.gcube.contentmanagement.blobstorage.transport.plugin; import java.io.FileNotFoundException; import java.io.IOException; import java.net.UnknownHostException; import java.util.List; import java.util.Map; import java.util.Objects; import org.gcube.contentmanagement.blobstorage.resource.MemoryType; import org.gcube.contentmanagement.blobstorage.resource.MyFile; import org.gcube.contentmanagement.blobstorage.resource.StorageObject; import org.gcube.contentmanagement.blobstorage.service.operation.Copy; import org.gcube.contentmanagement.blobstorage.service.operation.CopyDir; import org.gcube.contentmanagement.blobstorage.service.operation.Download; import org.gcube.contentmanagement.blobstorage.service.operation.DuplicateFile; import org.gcube.contentmanagement.blobstorage.service.operation.Link; import org.gcube.contentmanagement.blobstorage.service.operation.Lock; import org.gcube.contentmanagement.blobstorage.service.operation.Move; import org.gcube.contentmanagement.blobstorage.service.operation.MoveDir; import org.gcube.contentmanagement.blobstorage.service.operation.Unlock; import org.gcube.contentmanagement.blobstorage.service.operation.Upload; import org.gcube.contentmanagement.blobstorage.transport.TransportManager; import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException; import java.net.URI; import software.amazon.awssdk.auth.credentials.AwsSessionCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CreateBucketConfiguration; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.model.DeleteObjectRequest; import software.amazon.awssdk.services.s3.model.ListBucketsRequest; import software.amazon.awssdk.services.s3.model.ListBucketsResponse; import software.amazon.awssdk.services.s3.model.ListObjectsV2Request; import software.amazon.awssdk.services.s3.model.ListObjectsV2Response; import software.amazon.awssdk.services.s3.model.PutObjectRequest; import software.amazon.awssdk.services.s3.model.PutObjectResponse; import software.amazon.awssdk.services.s3.model.S3Object; import com.mongodb.MongoException; public class S3PluginManager extends TransportManager { Region region = Region.US_EAST_1; final String END_POINT = "https://s3.wasabisys.com"; S3Client s3; // THE FOLLOWING FIELD SHOULD BE RETRIEVED FROM SERVICEENDPOINT static final String ACCESS_KEY="UXMKEBMZBDROS5K9HREG"; static final String SECRET_ACCESS_KEY="0Mqu8gmzcZ09wuqqKZwNmuS5bYC549MlZhvfgv6W"; static final String bucket="gcube-home-test-access"; @Override public String getName() { return "S3PluginManager"; } public S3PluginManager(String[] server, String user, String pass, MemoryType memoryType, String[] dbNames, String writeConcern, String readConcern) { initBackend(server,user,pass, memoryType,dbNames, writeConcern, readConcern); } @Override public void initBackend(String[] server, String user, String pass, MemoryType memoryType, String[] dbNames, String writeConcern, String readConcern) { AwsSessionCredentials awsCreds = AwsSessionCredentials.create(ACCESS_KEY, SECRET_ACCESS_KEY, ""); s3 = S3Client.builder().credentialsProvider( StaticCredentialsProvider.create(awsCreds)) .endpointOverride(URI.create(END_POINT)).region(region).build(); } @Override public Object get(Download download) throws FileNotFoundException, IOException { return BucketOperator.getInstance(s3).getObject(bucket, download.getRemotePath(), download.getLocalPath()); } @Override public String put(Upload upload) throws FileNotFoundException, IOException { return BucketOperator.getInstance(s3).getObject(bucket, upload.getRemotePath(), upload.getLocalPath()).toString(); } @Override public Map getValues(MyFile resource, String bucket, Class type) { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public void removeRemoteFile(String bucket, MyFile resource) throws UnknownHostException { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public void removeDir(String remoteDir, MyFile myFile) throws UnknownHostException { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public long getSize(String bucket) { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public String lock(Lock lock) throws Exception { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public String unlock(Unlock unlock) throws FileNotFoundException, UnknownHostException, MongoException, Exception { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public long getTTL(String pathServer) throws UnknownHostException { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public long renewTTL(MyFile resource) throws UnknownHostException, IllegalAccessException { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public String link(Link link) throws UnknownHostException { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public String copy(Copy copy) throws UnknownHostException { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public String move(Move move) throws UnknownHostException { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public List copyDir(CopyDir copy) throws UnknownHostException { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public List moveDir(MoveDir move) throws UnknownHostException { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public String getFileProperty(String remotePath, String property) { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public long getFolderTotalItems(String folderPath) { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public long getFolderTotalVolume(String folderPath) { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public String getUserTotalVolume(String user) { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public String getUserTotalItems(String user) { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public boolean isValidId(String id) { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public String getId(String remoteIdentifier, boolean forceCreation) { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public String getField(String remoteIdentifier, String fieldName) throws UnknownHostException { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public void close() { s3.close(); } @Override public void setFileProperty(String remotePath, String propertyField, String propertyValue) { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public String getRemotePath(String bucket) throws UnknownHostException { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public boolean exist(String bucket) { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } @Override public String duplicateFile(DuplicateFile duplicate) { throw new RemoteBackendException("method not implemented yet on s3 plugin"); } }