mirror of
https://github.com/github/codeql.git
synced 2025-12-18 18:10:39 +01:00
132 lines
6.2 KiB
Java
132 lines
6.2 KiB
Java
import software.amazon.awssdk.transfer.s3.S3TransferManager;
|
|
import software.amazon.awssdk.transfer.s3.model.UploadFileRequest;
|
|
import software.amazon.awssdk.transfer.s3.model.FileUpload;
|
|
import software.amazon.awssdk.transfer.s3.model.FileDownload;
|
|
import software.amazon.awssdk.transfer.s3.model.DirectoryUpload;
|
|
import software.amazon.awssdk.transfer.s3.model.CompletedDirectoryUpload;
|
|
import software.amazon.awssdk.transfer.s3.model.DirectoryDownload;
|
|
import software.amazon.awssdk.transfer.s3.model.CompletedDirectoryDownload;
|
|
import software.amazon.awssdk.transfer.s3.model.DownloadDirectoryRequest;
|
|
import software.amazon.awssdk.transfer.s3.model.DownloadFileRequest;
|
|
import software.amazon.awssdk.transfer.s3.model.ResumableFileUpload;
|
|
import software.amazon.awssdk.transfer.s3.model.UploadDirectoryRequest;
|
|
import software.amazon.awssdk.transfer.s3.model.ResumableFileDownload;
|
|
import software.amazon.awssdk.transfer.s3.model.CompletedFileUpload;
|
|
import software.amazon.awssdk.transfer.s3.model.CompletedFileDownload;
|
|
import software.amazon.awssdk.transfer.s3.progress.LoggingTransferListener;
|
|
|
|
import java.net.URI;
|
|
import java.nio.file.Paths;
|
|
|
|
public class AmazonS3 {
|
|
S3TransferManager transferManager = S3TransferManager.create();
|
|
String bucketName = "bucketTest";
|
|
String key = "keyTest";
|
|
|
|
public String uploadFile(URI filePathURI) {
|
|
UploadFileRequest uploadFileRequest =
|
|
UploadFileRequest.builder()
|
|
.putObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
|
|
.addTransferListener(LoggingTransferListener.create())
|
|
.source(Paths.get(filePathURI)) // $ hasTaintFlow="get(...)"
|
|
.build();
|
|
|
|
FileUpload fileUpload = this.transferManager.uploadFile(uploadFileRequest);
|
|
|
|
CompletedFileUpload uploadResult = fileUpload.completionFuture().join();
|
|
return uploadResult.response().eTag();
|
|
}
|
|
|
|
public String uploadFileResumable(URI filePathURI) {
|
|
UploadFileRequest uploadFileRequest =
|
|
UploadFileRequest.builder()
|
|
.putObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
|
|
.addTransferListener(LoggingTransferListener.create())
|
|
.source(Paths.get(filePathURI)) // $ hasTaintFlow="get(...)"
|
|
.build();
|
|
|
|
// Initiate the transfer
|
|
FileUpload upload = this.transferManager.uploadFile(uploadFileRequest);
|
|
// Pause the upload
|
|
ResumableFileUpload resumableFileUpload = upload.pause();
|
|
// Optionally, persist the resumableFileUpload
|
|
resumableFileUpload.serializeToFile(Paths.get(filePathURI)); // $ hasTaintFlow="get(...)"
|
|
// Retrieve the resumableFileUpload from the file
|
|
ResumableFileUpload persistedResumableFileUpload =
|
|
ResumableFileUpload.fromFile(Paths.get(filePathURI)); // $ hasTaintFlow="get(...)"
|
|
// Resume the upload
|
|
FileUpload resumedUpload = this.transferManager.resumeUploadFile(persistedResumableFileUpload);
|
|
// Wait for the transfer to complete
|
|
resumedUpload.completionFuture().join();
|
|
FileUpload fileUpload = this.transferManager.uploadFile(uploadFileRequest);
|
|
CompletedFileUpload uploadResult = fileUpload.completionFuture().join();
|
|
return uploadResult.response().eTag();
|
|
}
|
|
|
|
public String downloadFileResumable(URI downloadedFileWithPath) {
|
|
DownloadFileRequest downloadFileRequest =
|
|
DownloadFileRequest.builder()
|
|
.getObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
|
|
.addTransferListener(LoggingTransferListener.create())
|
|
.destination(Paths.get(downloadedFileWithPath)) // $ hasTaintFlow="get(...)"
|
|
.build();
|
|
|
|
// Initiate the transfer
|
|
FileDownload download = this.transferManager.downloadFile(downloadFileRequest);
|
|
// Pause the download
|
|
ResumableFileDownload resumableFileDownload = download.pause();
|
|
// Optionally, persist the resumableFileDownload
|
|
resumableFileDownload.serializeToFile(Paths.get(downloadedFileWithPath)); // $ hasTaintFlow="get(...)"
|
|
// Retrieve the resumableFileDownload from the file
|
|
ResumableFileDownload persistedResumableFileDownload =
|
|
ResumableFileDownload.fromFile(Paths.get(downloadedFileWithPath)); // $ hasTaintFlow="get(...)"
|
|
// Resume the download
|
|
FileDownload resumedDownload =
|
|
this.transferManager.resumeDownloadFile(persistedResumableFileDownload);
|
|
// Wait for the transfer to complete
|
|
resumedDownload.completionFuture().join();
|
|
FileDownload filedownload = this.transferManager.downloadFile(downloadFileRequest);
|
|
CompletedFileDownload downloadResult = filedownload.completionFuture().join();
|
|
return downloadResult.response().eTag();
|
|
}
|
|
|
|
public Integer uploadDirectory(URI sourceDirectory) {
|
|
DirectoryUpload directoryUpload =
|
|
this.transferManager.uploadDirectory(
|
|
UploadDirectoryRequest.builder()
|
|
.source(Paths.get(sourceDirectory)) // $ hasTaintFlow="get(...)"
|
|
.bucket(this.bucketName)
|
|
.build());
|
|
|
|
CompletedDirectoryUpload completedDirectoryUpload = directoryUpload.completionFuture().join();
|
|
return completedDirectoryUpload.failedTransfers().size();
|
|
}
|
|
|
|
public Long downloadFile(String downloadedFileWithPath) {
|
|
DownloadFileRequest downloadFileRequest =
|
|
DownloadFileRequest.builder()
|
|
.getObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
|
|
.addTransferListener(LoggingTransferListener.create())
|
|
.destination(Paths.get(downloadedFileWithPath)) // $ hasTaintFlow="get(...)"
|
|
.build();
|
|
|
|
FileDownload downloadFile = this.transferManager.downloadFile(downloadFileRequest);
|
|
|
|
CompletedFileDownload downloadResult = downloadFile.completionFuture().join();
|
|
return downloadResult.response().contentLength();
|
|
}
|
|
|
|
public Integer downloadObjectsToDirectory(URI destinationPathURI) {
|
|
DirectoryDownload directoryDownload =
|
|
this.transferManager.downloadDirectory(
|
|
DownloadDirectoryRequest.builder()
|
|
.destination(Paths.get(destinationPathURI)) // $ hasTaintFlow="get(...)"
|
|
.bucket(this.bucketName)
|
|
.build());
|
|
CompletedDirectoryDownload completedDirectoryDownload =
|
|
directoryDownload.completionFuture().join();
|
|
|
|
return completedDirectoryDownload.failedTransfers().size();
|
|
}
|
|
}
|