Remove creating instance on PersistentPreRun

This commit is contained in:
Maidul Islam
2022-12-25 14:47:46 -05:00
parent 859f4226ae
commit 3b6b9d41d1
3 changed files with 27 additions and 20 deletions
+2 -4
View File
@@ -31,8 +31,6 @@ func init() {
rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
rootCmd.PersistentFlags().BoolVarP(&debugLogging, "debug", "d", false, "Enable verbose logging") rootCmd.PersistentFlags().BoolVarP(&debugLogging, "debug", "d", false, "Enable verbose logging")
rootCmd.PersistentFlags().StringVar(&util.INFISICAL_URL, "domain", "https://app.infisical.com/api", "Point the CLI to your own backend") rootCmd.PersistentFlags().StringVar(&util.INFISICAL_URL, "domain", "https://app.infisical.com/api", "Point the CLI to your own backend")
// rootCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) {
rootCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { // }
util.InitKeyRingInstance()
}
} }
+18 -6
View File
@@ -19,7 +19,13 @@ func StoreUserCredsInKeyRing(userCred *models.UserCredentials) error {
return fmt.Errorf("StoreUserCredsInKeyRing: something went wrong when marshalling user creds [err=%s]", err) return fmt.Errorf("StoreUserCredsInKeyRing: something went wrong when marshalling user creds [err=%s]", err)
} }
err = keyringInstance.Set(keyring.Item{ // Get keyring
configuredKeyring, err := GetKeyRing()
if err != nil {
return fmt.Errorf("StoreUserCredsInKeyRing: unable to get keyring instance with [err=%s]", err)
}
err = configuredKeyring.Set(keyring.Item{
Key: userCred.Email, Key: userCred.Email,
Data: []byte(string(userCredMarshalled)), Data: []byte(string(userCredMarshalled)),
}) })
@@ -32,20 +38,26 @@ func StoreUserCredsInKeyRing(userCred *models.UserCredentials) error {
} }
func GetUserCredsFromKeyRing(userEmail string) (credentials models.UserCredentials, err error) { func GetUserCredsFromKeyRing(userEmail string) (credentials models.UserCredentials, err error) {
credentialsValue, err := keyringInstance.Get(userEmail) // Get keyring
configuredKeyring, err := GetKeyRing()
if err != nil { if err != nil {
return models.UserCredentials{}, fmt.Errorf("Unable to get key from Keyring. could not find login credentials in your Keyring. This is common if you have switched vault backend recently. If so, please login in again and retry:", err) return models.UserCredentials{}, fmt.Errorf("GetUserCredsFromKeyRing: unable to get keyring instance with [err=%s]", err)
}
credentialsValue, err := configuredKeyring.Get(userEmail)
if err != nil {
return models.UserCredentials{}, fmt.Errorf("GetUserCredsFromKeyRing: unable to get key from Keyring. could not find login credentials in your Keyring. This is common if you have switched vault backend recently. If so, please login in again and retry [err=%s]", err)
} }
var userCredentials models.UserCredentials var userCredentials models.UserCredentials
err = json.Unmarshal([]byte(credentialsValue.Data), &userCredentials) err = json.Unmarshal([]byte(credentialsValue.Data), &userCredentials)
if err != nil { if err != nil {
return models.UserCredentials{}, fmt.Errorf("Something went wrong when unmarshalling user creds:", err) return models.UserCredentials{}, fmt.Errorf("getUserCredsFromKeyRing: Something went wrong when unmarshalling user creds [err=%s]", err)
} }
if err != nil { if err != nil {
return models.UserCredentials{}, fmt.Errorf("Unable to store user credentials", err) return models.UserCredentials{}, fmt.Errorf("GetUserCredsFromKeyRing: Unable to store user credentials [err=%s]", err)
} }
return userCredentials, err return userCredentials, err
@@ -82,7 +94,7 @@ func IsUserLoggedIn() (hasUserLoggedIn bool, theUsersEmail string, err error) {
if response.StatusCode() > 299 { if response.StatusCode() > 299 {
log.Infoln("Login expired, please login again.") log.Infoln("Login expired, please login again.")
return false, "", fmt.Errorf("Login expired, please login again.") return false, "", fmt.Errorf("GetUserCredsFromKeyRing: Login expired, please login again.")
} }
return true, configFile.LoggedInUserEmail, nil return true, configFile.LoggedInUserEmail, nil
+7 -10
View File
@@ -5,14 +5,9 @@ import (
"os" "os"
"github.com/99designs/keyring" "github.com/99designs/keyring"
log "github.com/sirupsen/logrus"
"golang.org/x/term" "golang.org/x/term"
) )
// Keyring instance
var keyringInstance keyring.Keyring
var keyringInstanceConfig keyring.Config
func GetCurrentVaultBackend() (keyring.BackendType, error) { func GetCurrentVaultBackend() (keyring.BackendType, error) {
configFile, err := GetConfigFile() configFile, err := GetConfigFile()
if err != nil { if err != nil {
@@ -28,13 +23,13 @@ func GetCurrentVaultBackend() (keyring.BackendType, error) {
return configFile.VaultBackendType, nil return configFile.VaultBackendType, nil
} }
func InitKeyRingInstance() { func GetKeyRing() (keyring.Keyring, error) {
currentVaultBackend, err := GetCurrentVaultBackend() currentVaultBackend, err := GetCurrentVaultBackend()
if err != nil { if err != nil {
log.Infof("InitKeyRingInstance: unable to get the current vault backend, [err=%s]", err) return nil, fmt.Errorf("GetKeyRing: unable to get the current vault backend, [err=%s]", err)
} }
keyringInstanceConfig = keyring.Config{ keyringInstanceConfig := keyring.Config{
FilePasswordFunc: fileKeyringPassphrasePrompt, FilePasswordFunc: fileKeyringPassphrasePrompt,
ServiceName: SERVICE_NAME, ServiceName: SERVICE_NAME,
LibSecretCollectionName: SERVICE_NAME, LibSecretCollectionName: SERVICE_NAME,
@@ -51,10 +46,12 @@ func InitKeyRingInstance() {
keyringInstanceConfig.AllowedBackends = []keyring.BackendType{keyring.BackendType(currentVaultBackend)} keyringInstanceConfig.AllowedBackends = []keyring.BackendType{keyring.BackendType(currentVaultBackend)}
} }
keyringInstance, err = keyring.Open(keyringInstanceConfig) keyringInstance, err := keyring.Open(keyringInstanceConfig)
if err != nil { if err != nil {
log.Errorf("InitKeyRingInstance: Unable to create instance of Keyring because of [err=%s]", err) return nil, fmt.Errorf("GetKeyRing: Unable to create instance of Keyring because of [err=%s]", err)
} }
return keyringInstance, nil
} }
func fileKeyringPassphrasePrompt(prompt string) (string, error) { func fileKeyringPassphrasePrompt(prompt string) (string, error) {