66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
package frostfs
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
|
|
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// FrostFS represents virtual connection to the FrostFS network.
|
|
// It is used to provide an interface to dependent packages
|
|
// which work with FrostFS.
|
|
type FrostFS struct {
|
|
pool *pool.Pool
|
|
log *zap.Logger
|
|
}
|
|
|
|
// NewFrostFS creates new FrostFS using provided pool.Pool.
|
|
func NewFrostFS(p *pool.Pool, log *zap.Logger) *FrostFS {
|
|
return &FrostFS{
|
|
pool: p,
|
|
log: log,
|
|
}
|
|
}
|
|
|
|
func (f *FrostFS) GetObject(ctx context.Context, addr oid.Address) (pool.ResGetObject, error) {
|
|
var prm pool.PrmObjectGet
|
|
prm.SetAddress(addr)
|
|
addBearer(ctx, &prm)
|
|
|
|
return f.pool.GetObject(ctx, prm)
|
|
}
|
|
|
|
func (f *FrostFS) DeleteObject(ctx context.Context, addr oid.Address) error {
|
|
var prm pool.PrmObjectDelete
|
|
prm.SetAddress(addr)
|
|
addBearer(ctx, &prm)
|
|
|
|
return f.pool.DeleteObject(ctx, prm)
|
|
}
|
|
|
|
func (f *FrostFS) NetworkInfo(ctx context.Context) (*netmap.NetworkInfo, error) {
|
|
networkInfo, err := f.pool.NetworkInfo(ctx)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("get network info via client: %w", err)
|
|
}
|
|
|
|
return &networkInfo, nil
|
|
}
|
|
|
|
type WithBearerParam interface {
|
|
UseBearer(token bearer.Token)
|
|
}
|
|
|
|
func addBearer(ctx context.Context, prm WithBearerParam) {
|
|
if bd, err := middleware.GetBoxData(ctx); err == nil {
|
|
if bd.Gate.BearerToken != nil {
|
|
prm.UseBearer(*bd.Gate.BearerToken)
|
|
}
|
|
}
|
|
}
|