From a31b534b36eda669bab99819e4b45fa343ff38d9 Mon Sep 17 00:00:00 2001 From: Shulhan Date: Fri, 19 May 2023 22:31:56 +0700 Subject: all: load private key only when needed In case the configuration use private key with passphrase, the bash completion will hang due to the command ask for passphrase. This changes fix this issue by loading private key only when doing add, generate, import, or remote-private-key. --- cli.go | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'cli.go') diff --git a/cli.go b/cli.go index d858faa..446f757 100644 --- a/cli.go +++ b/cli.go @@ -134,9 +134,12 @@ func (cli *Cli) Add(issuer *Issuer) (err error) { return nil } - var ( - logp = `Add` - ) + var logp = `Add` + + cli.cfg.privateKey, err = loadPrivateKey(cli.cfg.PrivateKey, nil) + if err != nil { + return fmt.Errorf(`%s: %w`, logp, err) + } err = cli.add(issuer) if err != nil { @@ -163,6 +166,11 @@ func (cli *Cli) Generate(label string, n int) (listOtp []string, err error) { proto totp.Protocol ) + cli.cfg.privateKey, err = loadPrivateKey(cli.cfg.PrivateKey, nil) + if err != nil { + return nil, fmt.Errorf(`%s: %w`, logp, err) + } + issuer, err = cli.cfg.get(label) if err != nil { return nil, fmt.Errorf(`%s: %w`, logp, err) @@ -201,6 +209,11 @@ func (cli *Cli) Import(providerName, file string) (n int, err error) { issuer *Issuer ) + cli.cfg.privateKey, err = loadPrivateKey(cli.cfg.PrivateKey, nil) + if err != nil { + return 0, fmt.Errorf(`%s: %w`, logp, err) + } + providerName = strings.ToLower(providerName) switch providerName { case providerNameAegis: @@ -278,8 +291,14 @@ func (cli *Cli) RemovePrivateKey() (err error) { return nil } + var logp = `RemovePrivateKey` + + cli.cfg.privateKey, err = loadPrivateKey(cli.cfg.PrivateKey, nil) + if err != nil { + return fmt.Errorf(`%s: %w`, logp, err) + } + var ( - logp = `RemovePrivateKey` oldPrivateKey = cli.cfg.privateKey oldIssuers = cli.cfg.Issuers -- cgit v1.3