Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
"github.com/data-preservation-programs/singularity/service"
"github.com/data-preservation-programs/singularity/service/contentprovider"
"github.com/data-preservation-programs/singularity/util"
"github.com/data-preservation-programs/singularity/util/keystore"
"github.com/filecoin-project/lassie/pkg/lassie"
logging "github.com/ipfs/go-log/v2"
"github.com/labstack/echo/v4"
Expand All @@ -47,6 +48,7 @@ type Server struct {
listener net.Listener
lotusClient jsonrpc.RPCClient
dealMaker replication.DealMaker
keyStore keystore.KeyStore
closer io.Closer
host host.Host
retriever *retriever.Retriever
Expand Down Expand Up @@ -135,6 +137,10 @@ func InitServer(ctx context.Context, params APIParams) (*Server, error) {
endpointfinder.WithErrorLruSize(128),
endpointfinder.WithErrorLruTimeout(time.Minute*5),
)
ks, err := keystore.NewLocalKeyStore(wallet.GetKeystoreDir())
if err != nil {
return nil, errors.Wrap(err, "failed to init keystore")
}
return &Server{
db: db,
host: h,
Expand All @@ -146,6 +152,7 @@ func InitServer(ctx context.Context, params APIParams) (*Server, error) {
time.Hour,
time.Minute*5,
),
keyStore: ks,
retriever: retriever.NewRetriever(lassie, endpointFinder),
closer: closer,
adminHandler: &admin.DefaultHandler{},
Expand Down Expand Up @@ -219,6 +226,10 @@ func (s *Server) toEchoHandler(handlerFunc any) echo.HandlerFunc {
inputParams = append(inputParams, reflect.ValueOf(s.dealMaker))
continue
}
if paramType.String() == "keystore.KeyStore" {
inputParams = append(inputParams, reflect.ValueOf(s.keyStore))
continue
}
if paramType.Kind() == reflect.String || isIntKind(paramType.Kind()) || isUIntKind(paramType.Kind()) {
if j >= len(c.ParamValues()) {
logger.Error("Invalid handler function signature.")
Expand Down Expand Up @@ -347,7 +358,7 @@ func (s *Server) setupRoutes(e *echo.Echo) {
e.DELETE("/api/preparation/:id/piece/:piece_cid", s.toEchoHandler(s.dataprepHandler.DeletePieceHandler))

// Wallet
e.POST("/api/wallet", s.toEchoHandler(s.walletHandler.ImportHandler))
e.POST("/api/wallet", s.toEchoHandler(s.walletHandler.ImportKeystoreHandler))
e.GET("/api/wallet", s.toEchoHandler(s.walletHandler.ListHandler))
e.DELETE("/api/wallet/:address", s.toEchoHandler(s.walletHandler.RemoveHandler))

Expand Down
16 changes: 10 additions & 6 deletions api/api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
"github.com/data-preservation-programs/singularity/replication"
"github.com/data-preservation-programs/singularity/service"
"github.com/data-preservation-programs/singularity/util"
"github.com/data-preservation-programs/singularity/util/keystore"
"github.com/data-preservation-programs/singularity/util/testutil"
"github.com/gotidy/ptr"
"github.com/ipfs/go-log/v2"
Expand All @@ -50,8 +51,8 @@ type MockDealMaker struct {
mock.Mock
}

func (m *MockDealMaker) MakeDeal(ctx context.Context, walletObj model.Wallet, car model.Car, dealConfig replication.DealConfig) (*model.Deal, error) {
args := m.Called(ctx, walletObj, car, dealConfig)
func (m *MockDealMaker) MakeDeal(ctx context.Context, actorObj model.Actor, car model.Car, dealConfig replication.DealConfig, signer replication.ProposalSigner) (*model.Deal, error) {
args := m.Called(ctx, actorObj, car, dealConfig)
return args.Get(0).(*model.Deal), args.Error(1)
}

Expand Down Expand Up @@ -97,7 +98,7 @@ func setupMockDeal() deal.Handler {
m := new(deal.MockDeal)
m.On("ListHandler", mock.Anything, mock.Anything, mock.Anything).
Return([]model.Deal{{}}, nil)
m.On("SendManualHandler", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
m.On("SendManualHandler", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(&model.Deal{}, nil)
return m
}
Expand Down Expand Up @@ -186,13 +187,13 @@ func setupMockWallet() wallet.Handler {
Return(&model.Preparation{}, nil)
m.On("DetachHandler", mock.Anything, mock.Anything, "id", "wallet").
Return(&model.Preparation{}, nil)
m.On("ImportHandler", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
m.On("ImportKeystoreHandler", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(&model.Wallet{}, nil)
m.On("ListHandler", mock.Anything, mock.Anything).
Return([]model.Wallet{{}}, nil)
m.On("ListAttachedHandler", mock.Anything, mock.Anything, "id").
Return([]model.Wallet{{}}, nil)
m.On("RemoveHandler", mock.Anything, mock.Anything, "wallet").
m.On("RemoveHandler", mock.Anything, mock.Anything, mock.Anything, "wallet").
Return(nil)
return m
}
Expand All @@ -215,11 +216,14 @@ func TestAllAPIs(t *testing.T) {
require.NoError(t, err)

testutil.One(t, func(ctx context.Context, t *testing.T, db *gorm.DB) {
ks, err := keystore.NewLocalKeyStore(t.TempDir())
require.NoError(t, err)
s := Server{
db: db,
listener: listener,
lotusClient: util.NewLotusClient("", ""),
dealMaker: mockDealMaker,
keyStore: ks,
closer: io.NopCloser(nil),
host: h,
adminHandler: mockAdmin,
Expand Down Expand Up @@ -303,7 +307,7 @@ func TestAllAPIs(t *testing.T) {
t.Run("wallet", func(t *testing.T) {
t.Run("ImportWallet", func(t *testing.T) {
resp, err := client.Wallet.ImportWallet(&wallet2.ImportWalletParams{
Request: &models.WalletImportRequest{},
Request: &models.WalletImportKeystoreRequest{},
Context: ctx,
})
require.NoError(t, err)
Expand Down
6 changes: 3 additions & 3 deletions client/swagger/http/wallet/import_wallet_parameters.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 14 additions & 5 deletions client/swagger/models/model_wallet.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

53 changes: 53 additions & 0 deletions client/swagger/models/wallet_import_keystore_request.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

50 changes: 0 additions & 50 deletions client/swagger/models/wallet_import_request.go

This file was deleted.

4 changes: 1 addition & 3 deletions cmd/dataprep_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,7 @@ var testPreparation = model.Preparation{
MaxSize: 100,
PieceSize: 200,
Wallets: []model.Wallet{{
ID: "client_id",
Address: "client_address",
PrivateKey: "private_key",
Address: "client_address", KeyPath: "/tmp/key", KeyStore: "local",
}},
SourceStorages: []model.Storage{{
ID: 1,
Expand Down
18 changes: 11 additions & 7 deletions cmd/deal/send-manual.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ import (
"github.com/data-preservation-programs/singularity/cmd/cliutil"
"github.com/data-preservation-programs/singularity/database"
"github.com/data-preservation-programs/singularity/handler/deal"
"github.com/data-preservation-programs/singularity/handler/wallet"
"github.com/data-preservation-programs/singularity/replication"
"github.com/data-preservation-programs/singularity/service/epochutil"
"github.com/data-preservation-programs/singularity/util"
"github.com/data-preservation-programs/singularity/util/keystore"
"github.com/urfave/cli/v2"
)

Expand Down Expand Up @@ -176,13 +178,15 @@ Notes:
return errors.Wrap(err, "failed to init host")
}
defer h.Close()
dealMaker := replication.NewDealMaker(
util.NewLotusClient(c.String("lotus-api"), c.String("lotus-token")),
h,
10*timeout,
timeout,
)
dealModel, err := deal.Default.SendManualHandler(ctx, db, dealMaker, proposal)

ks, err := keystore.NewLocalKeyStore(wallet.GetKeystoreDir())
if err != nil {
return errors.Wrap(err, "failed to init keystore")
}

lotusClient := util.NewLotusClient(c.String("lotus-api"), c.String("lotus-token"))
dealMaker := replication.NewDealMaker(lotusClient, h, 10*timeout, timeout)
dealModel, err := deal.Default.SendManualHandler(ctx, db, ks, lotusClient, dealMaker, proposal)
if err != nil {
return errors.WithStack(err)
}
Expand Down
6 changes: 3 additions & 3 deletions cmd/deal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ func swapDealHandler(mockHandler deal.Handler) func() {

func TestSendDealHandler(t *testing.T) {
testutil.One(t, func(ctx context.Context, t *testing.T, db *gorm.DB) {
err := db.Create(&model.Wallet{ID: "client_id"}).Error
err := db.Create(&model.Actor{ID: "client_id"}).Error
require.NoError(t, err)
runner := NewRunner()
defer runner.Save(t)
mockHandler := new(deal.MockDeal)
defer swapDealHandler(mockHandler)()
mockHandler.On("SendManualHandler", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(&model.Deal{
mockHandler.On("SendManualHandler", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(&model.Deal{
State: "proposed",
Provider: "f01",
ProposalID: "proposal_id",
Expand All @@ -46,7 +46,7 @@ func TestSendDealHandler(t *testing.T) {
}, nil).Once()
_, _, err = runner.Run(ctx, "singularity deal send-manual --client client --provider provider --piece-cid piece_cid --piece-size 1024 --save")
require.NoError(t, err)
mockHandler.On("SendManualHandler", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(&model.Deal{
mockHandler.On("SendManualHandler", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(&model.Deal{
State: "proposed",
Provider: "f01",
ProposalID: "proposal_id",
Expand Down
16 changes: 10 additions & 6 deletions cmd/wallet/import.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ import (
"github.com/data-preservation-programs/singularity/cmd/cliutil"
"github.com/data-preservation-programs/singularity/database"
"github.com/data-preservation-programs/singularity/handler/wallet"
"github.com/data-preservation-programs/singularity/util"
"github.com/data-preservation-programs/singularity/util/keystore"
"github.com/urfave/cli/v2"
)

var ImportCmd = &cli.Command{
Name: "import",
Usage: "Import a wallet from exported private key",
Usage: "Import a wallet from a private key file into the keystore",
ArgsUsage: "[path, or stdin if omitted]",
Action: func(c *cli.Context) error {
db, closer, err := database.OpenFromCLI(c)
Expand All @@ -41,12 +41,16 @@ var ImportCmd = &cli.Command{
}
}

lotusClient := util.NewLotusClient(c.String("lotus-api"), c.String("lotus-token"))
w, err := wallet.Default.ImportHandler(
ks, err := keystore.NewLocalKeyStore(wallet.GetKeystoreDir())
if err != nil {
return errors.Wrap(err, "failed to init keystore")
}

w, err := wallet.Default.ImportKeystoreHandler(
c.Context,
db,
lotusClient,
wallet.ImportRequest{
ks,
wallet.ImportKeystoreRequest{
PrivateKey: privateKey,
})
if err != nil {
Expand Down
Loading