Merge pull request #37 from fkautz/pr_out_simplifying_bucket_name_convention_and_making_convention_public

master
Frederick F. Kautz IV 10 years ago
commit db32cb3e75
  1. 38
      pkg/storage/inmemory/inmemory.go
  2. 15
      pkg/storage/storage.go

@ -64,7 +64,7 @@ func (storage *Storage) StoreObject(bucket string, key string, data io.Reader) e
}
func (storage *Storage) StoreBucket(bucketName string) error {
if !isValidBucket(bucketName) {
if !mstorage.IsValidBucket(bucketName) {
return mstorage.BucketNameInvalid{Bucket: bucketName}
}
@ -115,42 +115,6 @@ func start(ctrlChannel <-chan string, errorChannel chan<- error) {
close(errorChannel)
}
func isValidBucket(bucket string) bool {
l := len(bucket)
if l < 3 || l > 63 {
return false
}
valid := false
prev := byte('.')
for i := 0; i < len(bucket); i++ {
c := bucket[i]
switch {
default:
return false
case 'a' <= c && c <= 'z':
valid = true
case '0' <= c && c <= '9':
// Is allowed, but bucketname can't be just numbers.
// Therefore, don't set valid to true
case c == '-':
if prev == '.' {
return false
}
case c == '.':
if prev == '.' || prev == '-' {
return false
}
}
prev = c
}
if prev == '-' || prev == '.' {
return false
}
return valid
}
func (storage *Storage) GetObjectMetadata(bucket, key string) mstorage.ObjectMetadata {
objectKey := bucket + ":" + key

@ -18,6 +18,7 @@ package storage
import (
"io"
"regexp"
)
type Storage interface {
@ -43,3 +44,17 @@ type ObjectMetadata struct {
Size int
ETag string
}
func IsValidBucket(bucket string) bool {
if len(bucket) < 3 || len(bucket) > 63 {
return false
}
if bucket[0] == '.' || bucket[len(bucket)-1] == '.' {
return false
}
if match, _ := regexp.MatchString("\\.\\.", bucket); match == true {
return false
}
match, _ := regexp.MatchString("^[a-zA-Z][a-zA-Z0-9\\.\\-]+[a-zA-Z0-9]$", bucket)
return match
}

Loading…
Cancel
Save