chrislu
2 years ago
4 changed files with 80 additions and 57 deletions
-
40weed/s3api/s3bucket/s3api_bucket.go
-
37weed/s3api/s3bucket/s3api_bucket_test.go
-
41weed/shell/command_s3_bucket_create.go
-
19weed/shell/command_s3_bucket_create_test.go
@ -0,0 +1,40 @@ |
|||
package s3bucket |
|||
|
|||
import ( |
|||
"fmt" |
|||
"net" |
|||
"strings" |
|||
"unicode" |
|||
) |
|||
|
|||
// https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html
|
|||
func VerifyS3BucketName(name string) (err error) { |
|||
if len(name) < 3 || len(name) > 63 { |
|||
return fmt.Errorf("bucket name must between [3, 63] characters") |
|||
} |
|||
for idx, ch := range name { |
|||
if !(unicode.IsLower(ch) || ch == '.' || ch == '-' || unicode.IsNumber(ch)) { |
|||
return fmt.Errorf("bucket name can only contain lower case characters, numbers, dots, and hyphens") |
|||
} |
|||
if idx > 0 && (ch == '.' && name[idx-1] == '.') { |
|||
return fmt.Errorf("bucket names must not contain two adjacent periods") |
|||
} |
|||
//TODO buckets with s3 transfer accleration cannot have . in name
|
|||
} |
|||
if name[0] == '.' || name[0] == '-' { |
|||
return fmt.Errorf("name must start with number or lower case character") |
|||
} |
|||
if name[len(name)-1] == '.' || name[len(name)-1] == '-' { |
|||
return fmt.Errorf("name must end with number or lower case character") |
|||
} |
|||
if strings.HasPrefix(name, "xn--") { |
|||
return fmt.Errorf("prefix xn-- is a reserved and not allowed in bucket prefix") |
|||
} |
|||
if strings.HasSuffix(name, "-s3alias") { |
|||
return fmt.Errorf("suffix -s3alias is a reserved and not allowed in bucket suffix") |
|||
} |
|||
if net.ParseIP(name) != nil { |
|||
return fmt.Errorf("bucket name cannot be ip addresses") |
|||
} |
|||
return nil |
|||
} |
@ -0,0 +1,37 @@ |
|||
package s3bucket |
|||
|
|||
import ( |
|||
"github.com/stretchr/testify/assert" |
|||
"testing" |
|||
) |
|||
|
|||
func Test_verifyBucketName(t *testing.T) { |
|||
invalidS3BucketNames := []string{ |
|||
"A9325325b", |
|||
"123.12.153.10", |
|||
"abc214..2", |
|||
"d", |
|||
".ewfs3253543", |
|||
"grehtrry-", |
|||
"----------", |
|||
"x@fdsgr032", |
|||
} |
|||
for _, invalidName := range invalidS3BucketNames { |
|||
err := VerifyS3BucketName(invalidName) |
|||
assert.NotNil(t, err) |
|||
} |
|||
validS3BucketName := []string{ |
|||
"a9325325b", |
|||
"999.12.153.10", |
|||
"abc214.2", |
|||
"3d3d3d", |
|||
"ewfs3253543", |
|||
"grehtrry-a", |
|||
"0----------0", |
|||
"xafdsgr032", |
|||
} |
|||
for _, invalidName := range validS3BucketName { |
|||
err := VerifyS3BucketName(invalidName) |
|||
assert.Nil(t, err) |
|||
} |
|||
} |
@ -1,19 +0,0 @@ |
|||
package shell |
|||
|
|||
import ( |
|||
"github.com/stretchr/testify/assert" |
|||
"testing" |
|||
) |
|||
|
|||
func Test_verifyBucketName(t *testing.T) { |
|||
invalidS3BucketNames := []string{"A9325325b", "123.12.153.10", "abc214..2", "d", ".ewfs3253543", "grehtrry-", "----------", "x@fdsgr032"} |
|||
for _, invalidName := range invalidS3BucketNames { |
|||
err := verifyS3BucketName(invalidName) |
|||
assert.NotNil(t, err) |
|||
} |
|||
validS3BucketName := []string{"a9325325b", "999.12.153.10", "abc214.2", "3d3d3d", "ewfs3253543", "grehtrry-a", "0----------0", "xafdsgr032"} |
|||
for _, invalidName := range validS3BucketName { |
|||
err := verifyS3BucketName(invalidName) |
|||
assert.Nil(t, err) |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue