1package s3 2 3import ( 4 "fmt" 5 "strings" 6 7 awss3 "github.com/aws/aws-sdk-go/service/s3" 8 "github.com/genevieve/leftovers/common" 9) 10 11type bucketsClient interface { 12 ListBuckets(*awss3.ListBucketsInput) (*awss3.ListBucketsOutput, error) 13 DeleteBucket(*awss3.DeleteBucketInput) (*awss3.DeleteBucketOutput, error) 14 15 ListObjectVersions(*awss3.ListObjectVersionsInput) (*awss3.ListObjectVersionsOutput, error) 16 DeleteObjects(*awss3.DeleteObjectsInput) (*awss3.DeleteObjectsOutput, error) 17} 18 19type Buckets struct { 20 client bucketsClient 21 logger logger 22 manager bucketManager 23} 24 25func NewBuckets(client bucketsClient, logger logger, manager bucketManager) Buckets { 26 return Buckets{ 27 client: client, 28 logger: logger, 29 manager: manager, 30 } 31} 32 33func (b Buckets) List(filter string) ([]common.Deletable, error) { 34 buckets, err := b.client.ListBuckets(&awss3.ListBucketsInput{}) 35 if err != nil { 36 return nil, fmt.Errorf("Listing S3 Buckets: %s", err) 37 } 38 39 var resources []common.Deletable 40 for _, bucket := range buckets.Buckets { 41 r := NewBucket(b.client, bucket.Name) 42 43 if !strings.Contains(r.Name(), filter) { 44 continue 45 } 46 47 if !b.manager.IsInRegion(r.Name()) { 48 continue 49 } 50 51 proceed := b.logger.PromptWithDetails(r.Type(), r.Name()) 52 if !proceed { 53 continue 54 } 55 56 resources = append(resources, r) 57 } 58 59 return resources, nil 60} 61 62func (b Buckets) Type() string { 63 return "s3-bucket" 64} 65