From 48ff7c5c79209c332ce1570d69f331edac665fec Mon Sep 17 00:00:00 2001 From: StephenButtolph Date: Tue, 8 Sep 2020 10:37:28 -0400 Subject: cleaned up keystore apis --- plugin/evm/service.go | 62 ++++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/plugin/evm/service.go b/plugin/evm/service.go index 29ef35d..ade03e7 100644 --- a/plugin/evm/service.go +++ b/plugin/evm/service.go @@ -146,19 +146,25 @@ type ExportKeyReply struct { // ExportKey returns a private key from the provided user func (service *AvaAPI) ExportKey(r *http.Request, args *ExportKeyArgs, reply *ExportKeyReply) error { service.vm.ctx.Log.Info("Platform: ExportKey called") + + address, err := service.vm.ParseEthAddress(args.Address) + if err != nil { + return fmt.Errorf("couldn't parse %s to address: %s", args.Address, err) + } + db, err := service.vm.ctx.Keystore.GetDatabase(args.Username, args.Password) if err != nil { return fmt.Errorf("problem retrieving user '%s': %w", args.Username, err) } + defer db.Close() + user := user{db: db} - if address, err := service.vm.ParseEthAddress(args.Address); err != nil { - return fmt.Errorf("couldn't parse %s to address: %s", args.Address, err) - } else if sk, err := user.getKey(address); err != nil { + sk, err := user.getKey(address) + if err != nil { return fmt.Errorf("problem retrieving private key: %w", err) - } else { - reply.PrivateKey = constants.SecretKeyPrefix + formatting.CB58{Bytes: sk.Bytes()}.String() - return nil } + reply.PrivateKey = constants.SecretKeyPrefix + formatting.CB58{Bytes: sk.Bytes()}.String() + return nil } // ImportKeyArgs are arguments for ImportKey @@ -170,43 +176,40 @@ type ImportKeyArgs struct { // ImportKey adds a private key to the provided user func (service *AvaAPI) ImportKey(r *http.Request, args *ImportKeyArgs, reply *api.JsonAddress) error { service.vm.ctx.Log.Info("Platform: ImportKey called for user '%s'", args.Username) - if service.vm.ctx.Keystore == nil { - return fmt.Errorf("oh no") - } - fmt.Sprintf("good") - db, err := service.vm.ctx.Keystore.GetDatabase(args.Username, args.Password) - if err != nil { - return fmt.Errorf("problem retrieving data: %w", err) - } - - user := user{db: db} - - factory := crypto.FactorySECP256K1R{} if !strings.HasPrefix(args.PrivateKey, constants.SecretKeyPrefix) { return fmt.Errorf("private key missing %s prefix", constants.SecretKeyPrefix) } + trimmedPrivateKey := strings.TrimPrefix(args.PrivateKey, constants.SecretKeyPrefix) formattedPrivateKey := formatting.CB58{} if err := formattedPrivateKey.FromString(trimmedPrivateKey); err != nil { return fmt.Errorf("problem parsing private key: %w", err) } + factory := crypto.FactorySECP256K1R{} skIntf, err := factory.ToPrivateKey(formattedPrivateKey.Bytes) if err != nil { return fmt.Errorf("problem parsing private key: %w", err) } sk := skIntf.(*crypto.PrivateKeySECP256K1R) - if err := user.putAddress(sk); err != nil { - return fmt.Errorf("problem saving key %w", err) - } - // TODO: return eth address here reply.Address, err = service.vm.FormatEthAddress(GetEthAddress(sk)) if err != nil { return fmt.Errorf("problem formatting address: %w", err) } + + db, err := service.vm.ctx.Keystore.GetDatabase(args.Username, args.Password) + if err != nil { + return fmt.Errorf("problem retrieving data: %w", err) + } + defer db.Close() + + user := user{db: db} + if err := user.putAddress(sk); err != nil { + return fmt.Errorf("problem saving key %w", err) + } return nil } @@ -231,18 +234,19 @@ func (service *AvaAPI) ImportAVAX(_ *http.Request, args *ImportAVAXArgs, respons return fmt.Errorf("problem parsing chainID %q: %w", args.SourceChain, err) } + to, err := service.vm.ParseEthAddress(args.To) + if err != nil { // Parse address + return fmt.Errorf("couldn't parse argument 'to' to an address: %w", err) + } + // Get the user's info db, err := service.vm.ctx.Keystore.GetDatabase(args.Username, args.Password) if err != nil { return fmt.Errorf("couldn't get user '%s': %w", args.Username, err) } - user := user{db: db} - - to, err := service.vm.ParseEthAddress(args.To) - if err != nil { // Parse address - return fmt.Errorf("couldn't parse argument 'to' to an address: %w", err) - } + defer db.Close() + user := user{db: db} privKeys, err := user.getKeys() if err != nil { // Get keys return fmt.Errorf("couldn't get keys controlled by the user: %w", err) @@ -288,6 +292,8 @@ func (service *AvaAPI) ExportAVAX(_ *http.Request, args *ExportAVAXArgs, respons if err != nil { return fmt.Errorf("problem retrieving user '%s': %w", args.Username, err) } + defer db.Close() + user := user{db: db} privKeys, err := user.getKeys() if err != nil { -- cgit v1.2.3