From df52c56e83df548edc537d34d6732df1518eedbd Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Thu, 23 Feb 2023 14:14:41 -0500 Subject: [PATCH] patch login bug in cli --- cli/packages/cmd/login.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/cli/packages/cmd/login.go b/cli/packages/cmd/login.go index 1fa09eec0..092bcdfa1 100644 --- a/cli/packages/cmd/login.go +++ b/cli/packages/cmd/login.go @@ -120,6 +120,7 @@ var loginCmd = &cobra.Command{ var decryptedPrivateKey []byte if loginTwoResponse.EncryptionVersion == 1 { + log.Debug("Login version 1") encryptedPrivateKey, _ := base64.StdEncoding.DecodeString(loginTwoResponse.EncryptedPrivateKey) tag, err := base64.StdEncoding.DecodeString(loginTwoResponse.Tag) if err != nil { @@ -134,11 +135,15 @@ var loginCmd = &cobra.Command{ paddedPassword := fmt.Sprintf("%032s", password) key := []byte(paddedPassword) - decryptedPrivateKey, err := crypto.DecryptSymmetric(key, encryptedPrivateKey, tag, IV) - if err != nil || len(decryptedPrivateKey) == 0 { + computedDecryptedPrivateKey, err := crypto.DecryptSymmetric(key, encryptedPrivateKey, tag, IV) + if err != nil || len(computedDecryptedPrivateKey) == 0 { util.HandleError(err) } + + decryptedPrivateKey = computedDecryptedPrivateKey + } else if loginTwoResponse.EncryptionVersion == 2 { + log.Debug("Login version 2") protectedKey, err := base64.StdEncoding.DecodeString(loginTwoResponse.ProtectedKey) if err != nil { util.HandleError(err) @@ -191,14 +196,21 @@ var loginCmd = &cobra.Command{ util.HandleError(err) } - decryptedPrivateKey, err = crypto.DecryptSymmetric(decryptedProtectedKeyInHex, encryptedPrivateKey, nonProtectedTag, nonProtectedIv) + computedDecryptedPrivateKey, err := crypto.DecryptSymmetric(decryptedProtectedKeyInHex, encryptedPrivateKey, nonProtectedTag, nonProtectedIv) if err != nil { util.HandleError(err) } + + decryptedPrivateKey = computedDecryptedPrivateKey } else { util.PrintErrorMessageAndExit("Insufficient details to decrypt private key") } + if string(decryptedPrivateKey) == "" || email == "" || loginTwoResponse.Token == "" { + log.Debugf("[decryptedPrivateKey=%s] [email=%s] [loginTwoResponse.Token=%s]", string(decryptedPrivateKey), email, loginTwoResponse.Token) + util.PrintErrorMessageAndExit("We were unable to fetch required details to complete your login. Run with -d to see more info") + } + userCredentialsToBeStored := &models.UserCredentials{ Email: email, PrivateKey: string(decryptedPrivateKey),