92 lines
2.0 KiB
Go
92 lines
2.0 KiB
Go
package b2_client
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/joho/godotenv"
|
|
"gopkg.in/kothar/go-backblaze.v0"
|
|
)
|
|
|
|
// Client represents a B2 client
|
|
type Client struct {
|
|
b2 *backblaze.B2
|
|
}
|
|
|
|
// NewClientFromEnv creates a new B2 client using credentials from .env
|
|
func NewClientFromEnv() (*Client, error) {
|
|
// Load .env file
|
|
if err := godotenv.Load(); err != nil {
|
|
return nil, fmt.Errorf("error loading .env file: %w", err)
|
|
}
|
|
|
|
// Get credentials from environment
|
|
keyID := os.Getenv("B2_KEY_ID")
|
|
applicationKey := os.Getenv("B2_APPLICATION_KEY")
|
|
|
|
if keyID == "" || applicationKey == "" {
|
|
return nil, fmt.Errorf("B2_KEY_ID and B2_APPLICATION_KEY must be set in .env file")
|
|
}
|
|
|
|
// Create B2 client
|
|
b2, err := backblaze.NewB2(backblaze.Credentials{
|
|
AccountID: keyID,
|
|
ApplicationKey: applicationKey,
|
|
})
|
|
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error creating B2 client: %w", err)
|
|
}
|
|
|
|
return &Client{
|
|
b2: b2,
|
|
}, nil
|
|
}
|
|
|
|
// ListBuckets lists all buckets
|
|
func (c *Client) ListBuckets(ctx context.Context) ([]*backblaze.Bucket, error) {
|
|
// List all buckets
|
|
buckets, err := c.b2.ListBuckets()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error listing buckets: %w", err)
|
|
}
|
|
|
|
return buckets, nil
|
|
}
|
|
|
|
// GetBucket gets a bucket by name
|
|
func (c *Client) GetBucket(ctx context.Context, name string) (*backblaze.Bucket, error) {
|
|
// List all buckets
|
|
buckets, err := c.b2.ListBuckets()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error listing buckets: %w", err)
|
|
}
|
|
|
|
// Find bucket by name
|
|
for _, bucket := range buckets {
|
|
if bucket.Name == name {
|
|
return bucket, nil
|
|
}
|
|
}
|
|
|
|
return nil, fmt.Errorf("bucket not found: %s", name)
|
|
}
|
|
|
|
// CreateBucket creates a new bucket
|
|
func (c *Client) CreateBucket(ctx context.Context, name string, public bool) (*backblaze.Bucket, error) {
|
|
// Set bucket type
|
|
bucketType := backblaze.AllPrivate
|
|
if public {
|
|
bucketType = backblaze.AllPublic
|
|
}
|
|
|
|
// Create bucket
|
|
bucket, err := c.b2.CreateBucket(name, bucketType)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error creating bucket: %w", err)
|
|
}
|
|
|
|
return bucket, nil
|
|
}
|