[#218] adm: Refactor helper in part of reading alphabet wallets

Signed-off-by: Anton Nikiforov <an.nikiforov@yadro.com>
This commit is contained in:
Anton Nikiforov 2024-06-26 14:30:31 +03:00 committed by Evgenii Stratonikov
parent 72ab373b71
commit 36eab4059c

View file

@ -40,45 +40,48 @@ func openAlphabetWallets(v *viper.Viper, walletDir string) ([]*wallet.Wallet, er
return nil, fmt.Errorf("can't read alphabet wallets dir: %w", err) return nil, fmt.Errorf("can't read alphabet wallets dir: %w", err)
} }
var size int var wallets []*wallet.Wallet
loop: var letter string
for i := 0; i < len(walletFiles); i++ { for i := 0; i < constants.MaxAlphabetNodes; i++ {
name := innerring.GlagoliticLetter(i).String() + ".json" letter = innerring.GlagoliticLetter(i).String()
for j := range walletFiles { p := filepath.Join(walletDir, letter+".json")
if walletFiles[j].Name() == name { var w *wallet.Wallet
size++ w, err = wallet.NewWalletFromFile(p)
continue loop if err != nil {
} if errors.Is(err, os.ErrNotExist) {
err = nil
} else {
err = fmt.Errorf("can't open wallet: %w", err)
} }
break break
} }
if size == 0 {
return nil, errors.New("alphabet wallets dir is empty (run `generate-alphabet` command first)")
}
wallets := make([]*wallet.Wallet, size) var password string
for i := 0; i < size; i++ { password, err = config.GetPassword(v, letter)
letter := innerring.GlagoliticLetter(i).String()
p := filepath.Join(walletDir, letter+".json")
w, err := wallet.NewWalletFromFile(p)
if err != nil { if err != nil {
return nil, fmt.Errorf("can't open wallet: %w", err) err = fmt.Errorf("can't fetch password: %w", err)
} break
password, err := config.GetPassword(v, letter)
if err != nil {
return nil, fmt.Errorf("can't fetch password: %w", err)
} }
for i := range w.Accounts { for i := range w.Accounts {
if err := w.Accounts[i].Decrypt(password, keys.NEP2ScryptParams()); err != nil { if err = w.Accounts[i].Decrypt(password, keys.NEP2ScryptParams()); err != nil {
return nil, fmt.Errorf("can't unlock wallet: %w", err) err = fmt.Errorf("can't unlock wallet: %w", err)
break
} }
} }
wallets[i] = w wallets = append(wallets, w)
}
if err != nil {
return nil, fmt.Errorf("can't read wallet for letter '%s': %w", letter, err)
}
if len(wallets) == 0 {
err = errors.New("there are no alphabet wallets in dir (run `generate-alphabet` command first)")
if len(walletFiles) > 0 {
err = fmt.Errorf("use glagolitic names for wallets(run `print-alphabet`): %w", err)
}
return nil, err
} }
return wallets, nil return wallets, nil
} }