From 9d4ed060870b283ae43c952c9b5863ff299d78de Mon Sep 17 00:00:00 2001 From: Dan Laine Date: Sat, 2 May 2020 17:53:28 -0400 Subject: [PATCH] add getAddresses API method on avm --- vms/avm/service.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/vms/avm/service.go b/vms/avm/service.go index a96200d..93b7e66 100644 --- a/vms/avm/service.go +++ b/vms/avm/service.go @@ -448,6 +448,40 @@ func (service *Service) CreateAddress(r *http.Request, args *CreateAddressArgs, return nil } +// GetAddressesArgs ... +type GetAddressesArgs struct { + // User that we're listing the addresses of + Username string `json:"username"` + Password string `json:"password"` +} + +// GetAddressesResponse ... +type GetAddressesResponse struct { + // Each element is an address controlled by specified account + Addresses []string `json:"addresses"` +} + +// GetAddresses returns all of the addresses controlled by user [args.Username] +func (service *Service) GetAddresses(_ *http.Request, args *GetAddressesArgs, response *GetAddressesResponse) error { + db, err := service.vm.ctx.Keystore.GetDatabase(args.Username, args.Password) + if err != nil { + return fmt.Errorf("problem retrieving user: %w", err) + } + + user := userState{vm: service.vm} + addresses, err := user.Addresses(db) + if err != nil { + response.Addresses = nil + return nil + } + + for _, address := range addresses { + addressBytes := address.Key() + response.Addresses = append(response.Addresses, service.vm.Format(addressBytes[:])) + } + return nil +} + // ExportKeyArgs are arguments for ExportKey type ExportKeyArgs struct { Username string `json:"username"`