Fix setting empty OTP secret; minor refactors

This commit is contained in:
Mitchell Simon 2019-09-07 01:44:43 -04:00
parent 2096d6ada8
commit e136b40b70
6 changed files with 33 additions and 30 deletions

View File

@ -6,7 +6,6 @@ import (
"encoding/gob"
"fmt"
"os"
"sync"
"go.etcd.io/bbolt"
@ -38,24 +37,19 @@ func (db BoltDB) GetAllMetadata(ctx context.Context, sourceHost string, errch ch
return nil
}
var wg sync.WaitGroup
c := bkt.hostPrimaryIndex.Cursor()
if sourceHost == "" {
for key, value := c.First(); key != nil; key, value = c.Next() {
wg.Add(1)
unmarshalAndSendCred(value, mdch, errch, &wg)
unmarshalAndSendCred(value, mdch, errch)
}
} else {
hostBytes := []byte(sourceHost)
for key, value := c.Seek(hostBytes); bytes.HasPrefix(key, hostBytes); key, value = c.Next() {
wg.Add(1)
unmarshalAndSendCred(value, mdch, errch, &wg)
unmarshalAndSendCred(value, mdch, errch)
}
}
wg.Wait()
return nil
})
if err != nil {
@ -67,9 +61,7 @@ func (db BoltDB) GetAllMetadata(ctx context.Context, sourceHost string, errch ch
return mdch
}
func unmarshalAndSendCred(value []byte, mdch chan<- types.Metadata, errch chan<- error, wg *sync.WaitGroup) {
defer wg.Done()
func unmarshalAndSendCred(value []byte, mdch chan<- types.Metadata, errch chan<- error) {
var cred types.Credential
err := gobUnmarshal(value, &cred)

View File

@ -111,20 +111,23 @@ password.`,
check(survey.AskOne(prompt, &otp, nil))
if otp {
var copyOTP bool
var secret string
prompt = &survey.Password{Message: "OTP secret:"}
check(survey.AskOne(prompt, &secret, nil))
if secret != "" {
ciphersecret, err := crypto.CBCEncrypt(keypass, []byte(secret))
check(err)
ci.OTPSecret = base64.StdEncoding.EncodeToString(ciphersecret)
var copyotp bool
prompt = &survey.Confirm{Message: "Copy new OTP to clipboard?", Default: true}
check(survey.AskOne(prompt, &copyotp, nil))
check(survey.AskOne(prompt, &copyOTP, nil))
}
if copyotp {
if copyOTP {
otp, err := totp.GenerateCode(secret, time.Now())
check(err)
@ -132,9 +135,9 @@ password.`,
fmt.Println("Wrote one time password to clipboard.")
prompt = &survey.Confirm{Message: "Anotha one?", Default: true}
check(survey.AskOne(prompt, &copyotp, nil))
check(survey.AskOne(prompt, &copyOTP, nil))
if copyotp {
if copyOTP {
otp, err := totp.GenerateCode(secret, time.Now().Add(time.Second*30))
check(err)

View File

@ -145,20 +145,25 @@ password.`,
check(survey.AskOne(prompt, &otp, nil))
if otp {
var copyOTP bool
var secret string
ci.OTPSecret = ""
prompt = &survey.Password{Message: "OTP secret:"}
check(survey.AskOne(prompt, &secret, nil))
if secret != "" {
ciphersecret, err := crypto.CBCEncrypt(keypass, []byte(secret))
check(err)
ci.OTPSecret = base64.StdEncoding.EncodeToString(ciphersecret)
var copyotp bool
prompt = &survey.Confirm{Message: "Copy new OTP to clipboard?", Default: true}
check(survey.AskOne(prompt, &copyotp, nil))
check(survey.AskOne(prompt, &copyOTP, nil))
}
if copyotp {
if copyOTP {
otp, err := totp.GenerateCode(secret, time.Now())
check(err)
@ -166,9 +171,9 @@ password.`,
fmt.Println("Wrote one time password to clipboard.")
prompt = &survey.Confirm{Message: "Anotha one?", Default: true}
check(survey.AskOne(prompt, &copyotp, nil))
check(survey.AskOne(prompt, &copyOTP, nil))
if copyotp {
if copyOTP {
otp, err := totp.GenerateCode(secret, time.Now().Add(time.Second*30))
check(err)

View File

@ -12,5 +12,5 @@ const (
)
func GeneratePBKDF2Key(password, salt []byte) []byte {
return pbkdf2.Key([]byte(password), []byte(salt), PBKDF2Rounds, KeyLength, sha256.New)
return pbkdf2.Key(password, salt, PBKDF2Rounds, KeyLength, sha256.New)
}

View File

@ -6,6 +6,7 @@ require (
github.com/atotto/clipboard v0.1.2
github.com/c-bata/go-prompt v0.2.3
github.com/google/uuid v1.1.1
github.com/mattn/go-tty v0.0.0-20190424173100-523744f04859 // indirect
github.com/mitchell/selfpass/services v0.0.0-00010101000000-000000000000
github.com/mitchellh/go-homedir v1.1.0
github.com/ncw/rclone v1.48.0

View File

@ -135,6 +135,8 @@ github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-tty v0.0.0-20190424173100-523744f04859 h1:smQbSzmT3EHl4EUwtFwFGmGIpiYgIiiPeVv1uguIQEE=
github.com/mattn/go-tty v0.0.0-20190424173100-523744f04859/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed h1:3dQJqqDouawQgl3gBE1PNHKFkJYGEuFb1DbSlaxdosE=
github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg=