summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2023-05-19 22:31:56 +0700
committerShulhan <ms@kilabit.info>2023-05-19 22:31:56 +0700
commita31b534b36eda669bab99819e4b45fa343ff38d9 (patch)
treeda14195f9625565adf362484c5740bded25ffe6f
parentdded88bf1546f30185e2fc30c11e4f1322abd213 (diff)
downloadgotp-a31b534b36eda669bab99819e4b45fa343ff38d9.tar.xz
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.
-rw-r--r--cli.go27
-rw-r--r--cli_test.go5
-rw-r--r--config.go7
3 files changed, 28 insertions, 11 deletions
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
diff --git a/cli_test.go b/cli_test.go
index 70a5e1d..81253b1 100644
--- a/cli_test.go
+++ b/cli_test.go
@@ -191,6 +191,11 @@ func TestCli_SetPrivateKey(t *testing.T) {
}
cli.cfg = cfg
+ cli.cfg.privateKey, err = loadPrivateKey(cli.cfg.PrivateKey, nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+
var (
gotLabels []string = cli.List()
label string
diff --git a/config.go b/config.go
index 29a63e3..024450c 100644
--- a/config.go
+++ b/config.go
@@ -77,13 +77,6 @@ func loadConfig(content []byte) (cfg *config, err error) {
return nil, fmt.Errorf(`%s: %w`, logp, err)
}
- if len(cfg.PrivateKey) > 0 {
- cfg.privateKey, err = loadPrivateKey(cfg.PrivateKey, nil)
- if err != nil {
- return nil, fmt.Errorf(`%s: %w`, logp, err)
- }
- }
-
return cfg, nil
}