add forceVirtualHostedStyle for stores which only support virtual hosted style

This commit is contained in:
boxjan
2022-09-01 23:26:39 +08:00
committed by Benj Fassbind
parent b3d9055059
commit 268c39ea8c
7 changed files with 36 additions and 21 deletions
+1 -1
View File
@@ -393,7 +393,7 @@ func (context *AptlyContext) GetPublishedStorage(name string) aptly.PublishedSto
params.AccessKeyID, params.SecretAccessKey, params.SessionToken, params.AccessKeyID, params.SecretAccessKey, params.SessionToken,
params.Region, params.Endpoint, params.Bucket, params.ACL, params.Prefix, params.StorageClass, params.Region, params.Endpoint, params.Bucket, params.ACL, params.Prefix, params.StorageClass,
params.EncryptionMethod, params.PlusWorkaround, params.DisableMultiDel, params.EncryptionMethod, params.PlusWorkaround, params.DisableMultiDel,
params.ForceSigV2, params.Debug) params.ForceSigV2, params.ForceVirtualHostedStyle, params.Debug)
if err != nil { if err != nil {
Fatal(err) Fatal(err)
} }
+5
View File
@@ -84,6 +84,7 @@ Configuration file is stored in JSON format (default values shown below):
"plusWorkaround": false, "plusWorkaround": false,
"disableMultiDel": false, "disableMultiDel": false,
"forceSigV2": false, "forceSigV2": false,
"forceVirtualHostedStyle": false,
"debug": false "debug": false
} }
}, },
@@ -265,6 +266,10 @@ bucket name
(optional) disable Signature V4 support, useful with non\-AWS S3\-compatible object stores which do not support SigV4, shouldn\(cqt be enabled for AWS (optional) disable Signature V4 support, useful with non\-AWS S3\-compatible object stores which do not support SigV4, shouldn\(cqt be enabled for AWS
. .
.TP .TP
\fBforceVirtualHostedStyle\fR
(optional) disable path style visit, useful with non\-AWS S3\-compatible object stores which only support virtual hosted style
.
.TP
\fBdebug\fR \fBdebug\fR
(optional) enables detailed request/response dump for each S3 operation (optional) enables detailed request/response dump for each S3 operation
. .
+4
View File
@@ -76,6 +76,7 @@ Configuration file is stored in JSON format (default values shown below):
"plusWorkaround": false, "plusWorkaround": false,
"disableMultiDel": false, "disableMultiDel": false,
"forceSigV2": false, "forceSigV2": false,
"forceVirtualHostedStyle": true,
"debug": false "debug": false
} }
}, },
@@ -251,6 +252,9 @@ and associated settings:
* `forceSigV2`: * `forceSigV2`:
(optional) disable Signature V4 support, useful with non-AWS S3-compatible object stores (optional) disable Signature V4 support, useful with non-AWS S3-compatible object stores
which do not support SigV4, shouldn't be enabled for AWS which do not support SigV4, shouldn't be enabled for AWS
* `forceVirtualHostedStyle`:
(optional) disable path style visit, useful with non-AWS S3-compatible object stores
which only support virtual hosted style
* `debug`: * `debug`:
(optional) enables detailed request/response dump for each S3 operation (optional) enables detailed request/response dump for each S3 operation
+7 -3
View File
@@ -79,15 +79,19 @@ func NewPublishedStorageRaw(
// NewPublishedStorage creates new instance of PublishedStorage with specified S3 access // NewPublishedStorage creates new instance of PublishedStorage with specified S3 access
// keys, region and bucket name // keys, region and bucket name
func NewPublishedStorage(accessKey, secretKey, sessionToken, region, endpoint, bucket, defaultACL, prefix, func NewPublishedStorage(
storageClass, encryptionMethod string, plusWorkaround, disableMultiDel, forceSigV2, debug bool) (*PublishedStorage, error) { accessKey, secretKey, sessionToken, region, endpoint, bucket, defaultACL, prefix, storageClass, encryptionMethod string,
plusWorkaround, disableMultiDel, forceSigV2, forceVirtualHostedStyle, debug bool) (*PublishedStorage, error) {
config := &aws.Config{ config := &aws.Config{
Region: aws.String(region), Region: aws.String(region),
} }
if endpoint != "" { if endpoint != "" {
config = config.WithEndpoint(endpoint).WithS3ForcePathStyle(true) config = config.WithEndpoint(endpoint)
if !forceVirtualHostedStyle {
config = config.WithS3ForcePathStyle(true)
}
} }
if accessKey != "" { if accessKey != "" {
+3 -3
View File
@@ -29,11 +29,11 @@ func (s *PublishedStorageSuite) SetUpTest(c *C) {
c.Assert(err, IsNil) c.Assert(err, IsNil)
c.Assert(s.srv, NotNil) c.Assert(s.srv, NotNil)
s.storage, err = NewPublishedStorage("aa", "bb", "", "test-1", s.srv.URL(), "test", "", "", "", "", false, true, false, false) s.storage, err = NewPublishedStorage("aa", "bb", "", "test-1", s.srv.URL(), "test", "", "", "", "", false, true, false, false, false)
c.Assert(err, IsNil) c.Assert(err, IsNil)
s.prefixedStorage, err = NewPublishedStorage("aa", "bb", "", "test-1", s.srv.URL(), "test", "", "lala", "", "", false, true, false, false) s.prefixedStorage, err = NewPublishedStorage("aa", "bb", "", "test-1", s.srv.URL(), "test", "", "lala", "", "", false, true, false, false, false)
c.Assert(err, IsNil) c.Assert(err, IsNil)
s.noSuchBucketStorage, err = NewPublishedStorage("aa", "bb", "", "test-1", s.srv.URL(), "no-bucket", "", "", "", "", false, true, false, false) s.noSuchBucketStorage, err = NewPublishedStorage("aa", "bb", "", "test-1", s.srv.URL(), "no-bucket", "", "", "", "", false, true, false, false, false)
c.Assert(err, IsNil) c.Assert(err, IsNil)
_, err = s.storage.s3.CreateBucket(&s3.CreateBucketInput{Bucket: aws.String("test")}) _, err = s.storage.s3.CreateBucket(&s3.CreateBucketInput{Bucket: aws.String("test")})
+15 -14
View File
@@ -46,20 +46,21 @@ type FileSystemPublishRoot struct {
// S3PublishRoot describes single S3 publishing entry point // S3PublishRoot describes single S3 publishing entry point
type S3PublishRoot struct { type S3PublishRoot struct {
Region string `json:"region"` Region string `json:"region"`
Bucket string `json:"bucket"` Bucket string `json:"bucket"`
Endpoint string `json:"endpoint"` Endpoint string `json:"endpoint"`
AccessKeyID string `json:"awsAccessKeyID"` AccessKeyID string `json:"awsAccessKeyID"`
SecretAccessKey string `json:"awsSecretAccessKey"` SecretAccessKey string `json:"awsSecretAccessKey"`
SessionToken string `json:"awsSessionToken"` SessionToken string `json:"awsSessionToken"`
Prefix string `json:"prefix"` Prefix string `json:"prefix"`
ACL string `json:"acl"` ACL string `json:"acl"`
StorageClass string `json:"storageClass"` StorageClass string `json:"storageClass"`
EncryptionMethod string `json:"encryptionMethod"` EncryptionMethod string `json:"encryptionMethod"`
PlusWorkaround bool `json:"plusWorkaround"` PlusWorkaround bool `json:"plusWorkaround"`
DisableMultiDel bool `json:"disableMultiDel"` DisableMultiDel bool `json:"disableMultiDel"`
ForceSigV2 bool `json:"forceSigV2"` ForceSigV2 bool `json:"forceSigV2"`
Debug bool `json:"debug"` ForceVirtualHostedStyle bool `json:"forceVirtualHostedStyle"`
Debug bool `json:"debug"`
} }
// SwiftPublishRoot describes single OpenStack Swift publishing entry point // SwiftPublishRoot describes single OpenStack Swift publishing entry point
+1
View File
@@ -102,6 +102,7 @@ func (s *ConfigSuite) TestSaveConfig(c *C) {
" \"plusWorkaround\": false,\n"+ " \"plusWorkaround\": false,\n"+
" \"disableMultiDel\": false,\n"+ " \"disableMultiDel\": false,\n"+
" \"forceSigV2\": false,\n"+ " \"forceSigV2\": false,\n"+
" \"forceVirtualHostedStyle\": false,\n"+
" \"debug\": false\n"+ " \"debug\": false\n"+
" }\n"+ " }\n"+
" },\n"+ " },\n"+