1
0
mirror of https://github.com/gilbertchen/duplicacy synced 2025-12-06 00:03:38 +00:00

Add support for AWS STS Tokens in S3 Backend

This commit is contained in:
Philipp Bandow
2021-05-27 23:03:52 +02:00
parent e43e848d47
commit e0e4cbf7e2
2 changed files with 13 additions and 3 deletions

View File

@@ -33,8 +33,13 @@ type S3Storage struct {
func CreateS3Storage(regionName string, endpoint string, bucketName string, storageDir string,
accessKey string, secretKey string, threads int,
isSSLSupported bool, isMinioCompatible bool) (storage *S3Storage, err error) {
return CreateS3StorageWithToken(regionName, endpoint, bucketName, storageDir, accessKey, secretKey, "", threads, isSSLSupported, isMinioCompatible)
}
token := ""
// CreatesS3StorageWithToken create an amazon s3 storage object using an optional security token.
func CreateS3StorageWithToken(regionName string, endpoint string, bucketName string, storageDir string,
accessKey string, secretKey string, token string, threads int,
isSSLSupported bool, isMinioCompatible bool) (storage *S3Storage, err error) {
auth := credentials.NewStaticCredentials(accessKey, secretKey, token)

View File

@@ -455,7 +455,7 @@ func CreateStorage(preference Preference, resetPassword bool, threads int) (stor
SavePassword(preference, "ssh_password", password)
}
return sftpStorage
} else if matched[1] == "s3" || matched[1] == "s3c" || matched[1] == "minio" || matched[1] == "minios" {
} else if matched[1] == "s3" || matched[1] == "s3c" || matched[1] == "minio" || matched[1] == "minios" || matched[1] == "s3-token" {
// urlRegex := regexp.MustCompile(`^(\w+)://([\w\-]+@)?([^/]+)(/(.+))?`)
@@ -492,7 +492,12 @@ func CreateStorage(preference Preference, resetPassword bool, threads int) (stor
} else {
isMinioCompatible := (matched[1] == "minio" || matched[1] == "minios")
isSSLSupported := (matched[1] == "s3" || matched[1] == "minios")
storage, err = CreateS3Storage(region, endpoint, bucket, storageDir, accessKey, secretKey, threads, isSSLSupported, isMinioCompatible)
if matched[1] == "s3-token" {
token := GetPassword(preference, "s3_token", "Enter S3 Token (Optional):", true, resetPassword)
storage, err = CreateS3StorageWithToken(region, endpoint, bucket, storageDir, accessKey, secretKey, token, threads, isSSLSupported, isMinioCompatible)
} else {
storage, err = CreateS3Storage(region, endpoint, bucket, storageDir, accessKey, secretKey, threads, isSSLSupported, isMinioCompatible)
}
if err != nil {
LOG_ERROR("STORAGE_CREATE", "Failed to load the S3 storage at %s: %v", storageURL, err)
return nil