package impl import ( "context" "net/http" "golang.org/x/xerrors" "github.com/filecoin-project/go-jsonrpc" "github.com/filecoin-project/go-jsonrpc/auth" "github.com/filecoin-project/specs-actors/actors/abi" storage2 "github.com/filecoin-project/specs-storage/storage" "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/api/client" "github.com/filecoin-project/sector-storage" ) type remoteWorker struct { api.WorkerAPI closer jsonrpc.ClientCloser } func (r *remoteWorker) NewSector(ctx context.Context, sector abi.SectorID) error { return xerrors.New("unsupported") } func (r *remoteWorker) AddPiece(ctx context.Context, sector abi.SectorID, pieceSizes []abi.UnpaddedPieceSize, newPieceSize abi.UnpaddedPieceSize, pieceData storage2.Data) (abi.PieceInfo, error) { return abi.PieceInfo{}, xerrors.New("unsupported") } func connectRemoteWorker(ctx context.Context, fa api.Common, url string) (*remoteWorker, error) { token, err := fa.AuthNew(ctx, []auth.Permission{"admin"}) if err != nil { return nil, xerrors.Errorf("creating auth token for remote connection: %w", err) } headers := http.Header{} headers.Add("Authorization", "Bearer "+string(token)) wapi, closer, err := client.NewWorkerRPC(url, headers) if err != nil { return nil, xerrors.Errorf("creating jsonrpc client: %w", err) } return &remoteWorker{wapi, closer}, nil } func (r *remoteWorker) Close() error { r.closer() return nil } var _ sectorstorage.Worker = &remoteWorker{}