mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-07-09 21:17:09 +08:00
54
vendor/github.com/moby/buildkit/session/secrets/secretsprovider/file.go
generated
vendored
Normal file
54
vendor/github.com/moby/buildkit/session/secrets/secretsprovider/file.go
generated
vendored
Normal file
@ -0,0 +1,54 @@
|
||||
package secretsprovider
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
||||
"github.com/moby/buildkit/session/secrets"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type FileSource struct {
|
||||
ID string
|
||||
FilePath string
|
||||
}
|
||||
|
||||
func NewFileStore(files []FileSource) (secrets.SecretStore, error) {
|
||||
m := map[string]FileSource{}
|
||||
for _, f := range files {
|
||||
if f.ID == "" {
|
||||
return nil, errors.Errorf("secret missing ID")
|
||||
}
|
||||
if f.FilePath == "" {
|
||||
f.FilePath = f.ID
|
||||
}
|
||||
fi, err := os.Stat(f.FilePath)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to stat %s", f.FilePath)
|
||||
}
|
||||
if fi.Size() > MaxSecretSize {
|
||||
return nil, errors.Errorf("secret %s too big. max size 500KB", f.ID)
|
||||
}
|
||||
m[f.ID] = f
|
||||
}
|
||||
return &fileStore{
|
||||
m: m,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type fileStore struct {
|
||||
m map[string]FileSource
|
||||
}
|
||||
|
||||
func (fs *fileStore) GetSecret(ctx context.Context, id string) ([]byte, error) {
|
||||
v, ok := fs.m[id]
|
||||
if !ok {
|
||||
return nil, errors.WithStack(secrets.ErrNotFound)
|
||||
}
|
||||
dt, err := ioutil.ReadFile(v.FilePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dt, nil
|
||||
}
|
60
vendor/github.com/moby/buildkit/session/secrets/secretsprovider/secretsprovider.go
generated
vendored
Normal file
60
vendor/github.com/moby/buildkit/session/secrets/secretsprovider/secretsprovider.go
generated
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
package secretsprovider
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/moby/buildkit/session"
|
||||
"github.com/moby/buildkit/session/secrets"
|
||||
"github.com/pkg/errors"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
// MaxSecretSize is the maximum byte length allowed for a secret
|
||||
const MaxSecretSize = 500 * 1024 // 500KB
|
||||
|
||||
func NewSecretProvider(store secrets.SecretStore) session.Attachable {
|
||||
return &secretProvider{
|
||||
store: store,
|
||||
}
|
||||
}
|
||||
|
||||
type secretProvider struct {
|
||||
store secrets.SecretStore
|
||||
}
|
||||
|
||||
func (sp *secretProvider) Register(server *grpc.Server) {
|
||||
secrets.RegisterSecretsServer(server, sp)
|
||||
}
|
||||
|
||||
func (sp *secretProvider) GetSecret(ctx context.Context, req *secrets.GetSecretRequest) (*secrets.GetSecretResponse, error) {
|
||||
dt, err := sp.store.GetSecret(ctx, req.ID)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == secrets.ErrNotFound {
|
||||
return nil, status.Errorf(codes.NotFound, err.Error())
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
if l := len(dt); l > MaxSecretSize {
|
||||
return nil, errors.Errorf("invalid secret size %d", l)
|
||||
}
|
||||
|
||||
return &secrets.GetSecretResponse{
|
||||
Data: dt,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func FromMap(m map[string][]byte) session.Attachable {
|
||||
return NewSecretProvider(mapStore(m))
|
||||
}
|
||||
|
||||
type mapStore map[string][]byte
|
||||
|
||||
func (m mapStore) GetSecret(ctx context.Context, id string) ([]byte, error) {
|
||||
v, ok := m[id]
|
||||
if !ok {
|
||||
return nil, errors.WithStack(secrets.ErrNotFound)
|
||||
}
|
||||
return v, nil
|
||||
}
|
Reference in New Issue
Block a user