Brian Picciano
68f417b5ba
This required switching all garage admin API calls to the new v1 versions, and redoing how the global bucket key is created so it is created via the "create key" API call.
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package garage
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/hex"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/minio/minio-go/v7"
|
|
"github.com/minio/minio-go/v7/pkg/credentials"
|
|
)
|
|
|
|
func randStr(l int) string {
|
|
b := make([]byte, l)
|
|
if _, err := rand.Read(b); err != nil {
|
|
panic(err)
|
|
}
|
|
return hex.EncodeToString(b)
|
|
}
|
|
|
|
// IsKeyNotFound returns true if the given error is the result of a key not
|
|
// being found in a bucket.
|
|
func IsKeyNotFound(err error) bool {
|
|
var mErr minio.ErrorResponse
|
|
return errors.As(err, &mErr) && mErr.Code == "NoSuchKey"
|
|
}
|
|
|
|
// S3APIClient is a client used to interact with garage's S3 API.
|
|
type S3APIClient = *minio.Client
|
|
|
|
// S3APICredentials describe data fields necessary for authenticating with a
|
|
// garage S3 API endpoint.
|
|
type S3APICredentials struct {
|
|
ID string
|
|
Secret string
|
|
}
|
|
|
|
// NewS3APIClient returns a minio client configured to use the given garage S3 API
|
|
// endpoint.
|
|
func NewS3APIClient(addr string, creds S3APICredentials) S3APIClient {
|
|
|
|
client, err := minio.New(addr, &minio.Options{
|
|
Creds: credentials.NewStaticV4(creds.ID, creds.Secret, ""),
|
|
Region: Region,
|
|
})
|
|
|
|
if err != nil {
|
|
panic(fmt.Sprintf("initializing minio client at addr %q and with creds %+v", addr, creds))
|
|
}
|
|
|
|
return client
|
|
}
|