From 41a3cb67999a96f111658cc0165b3e24f05b0e5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Go=CC=88kc=CC=A7e=20Go=CC=88k=20Klingel?= Date: Fri, 17 May 2024 13:58:01 +0200 Subject: [PATCH 1/3] add profiles for auth settings --- internal/pkg/auth/storage.go | 59 ++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/internal/pkg/auth/storage.go b/internal/pkg/auth/storage.go index 9d08ca070..ab8475b9d 100644 --- a/internal/pkg/auth/storage.go +++ b/internal/pkg/auth/storage.go @@ -7,6 +7,8 @@ import ( "os" "path/filepath" + "github.com/stackitcloud/stackit-cli/internal/pkg/config" + "github.com/zalando/go-keyring" ) @@ -69,6 +71,15 @@ func SetAuthField(key authFieldKey, value string) error { } func setAuthFieldInKeyring(key authFieldKey, value string) error { + activeProfile, err := config.GetProfile() + if err != nil { + return fmt.Errorf("get profile: %w", err) + } + + if activeProfile != "" { + activeProfileKeyring := fmt.Sprintf("%s%s%s", keyringService, "/", activeProfile) + return keyring.Set(activeProfileKeyring, string(key), value) + } return keyring.Set(keyringService, string(key), value) } @@ -82,7 +93,18 @@ func setAuthFieldInEncodedTextFile(key authFieldKey, value string) error { if err != nil { return fmt.Errorf("get config dir: %w", err) } - textFileDir := filepath.Join(configDir, textFileFolderName) + + activeProfile, err := config.GetProfile() + if err != nil { + return fmt.Errorf("get profile: %w", err) + } + + profileTextFileFolderName := textFileFolderName + if activeProfile != "" { + profileTextFileFolderName = filepath.Join(activeProfile, textFileFolderName) + } + + textFileDir := filepath.Join(configDir, profileTextFileFolderName) textFilePath := filepath.Join(textFileDir, textFileName) contentEncoded, err := os.ReadFile(textFilePath) @@ -143,6 +165,15 @@ func GetAuthField(key authFieldKey) (string, error) { } func getAuthFieldFromKeyring(key authFieldKey) (string, error) { + activeProfile, err := config.GetProfile() + if err != nil { + return "", fmt.Errorf("get profile: %w", err) + } + + if activeProfile != "" { + activeProfileKeyring := fmt.Sprintf("%s%s%s", keyringService, "/", activeProfile) + return keyring.Get(activeProfileKeyring, string(key)) + } return keyring.Get(keyringService, string(key)) } @@ -156,7 +187,18 @@ func getAuthFieldFromEncodedTextFile(key authFieldKey) (string, error) { if err != nil { return "", fmt.Errorf("get config dir: %w", err) } - textFileDir := filepath.Join(configDir, textFileFolderName) + + activeProfile, err := config.GetProfile() + if err != nil { + return "", fmt.Errorf("get profile: %w", err) + } + + profileTextFileFolderName := textFileFolderName + if activeProfile != "" { + profileTextFileFolderName = filepath.Join(activeProfile, textFileFolderName) + } + + textFileDir := filepath.Join(configDir, profileTextFileFolderName) textFilePath := filepath.Join(textFileDir, textFileName) contentEncoded, err := os.ReadFile(textFilePath) @@ -187,7 +229,18 @@ func createEncodedTextFile() error { if err != nil { return fmt.Errorf("get config dir: %w", err) } - textFileDir := filepath.Join(configDir, textFileFolderName) + + activeProfile, err := config.GetProfile() + if err != nil { + return fmt.Errorf("get profile: %w", err) + } + + profileTextFileFolderName := textFileFolderName + if activeProfile != "" { + profileTextFileFolderName = filepath.Join(activeProfile, textFileFolderName) + } + + textFileDir := filepath.Join(configDir, profileTextFileFolderName) textFilePath := filepath.Join(textFileDir, textFileName) err = os.MkdirAll(textFileDir, os.ModePerm) From e8bd80698f5334ffbdcda41c99496b0776270067 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Go=CC=88kc=CC=A7e=20Go=CC=88k=20Klingel?= Date: Fri, 17 May 2024 13:58:07 +0200 Subject: [PATCH 2/3] adapt unit tests --- internal/pkg/auth/storage_test.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/internal/pkg/auth/storage_test.go b/internal/pkg/auth/storage_test.go index 1d3d4dab9..82101cc27 100644 --- a/internal/pkg/auth/storage_test.go +++ b/internal/pkg/auth/storage_test.go @@ -10,6 +10,8 @@ import ( "time" "github.com/zalando/go-keyring" + + "github.com/stackitcloud/stackit-cli/internal/pkg/config" ) func TestSetGetAuthField(t *testing.T) { @@ -336,6 +338,16 @@ func TestSetGetAuthFieldEncodedTextFile(t *testing.T) { } func deleteAuthFieldInKeyring(key authFieldKey) error { + activeProfile, err := config.GetProfile() + if err != nil { + return fmt.Errorf("get profile: %w", err) + } + + if activeProfile != "" { + activeProfileKeyring := fmt.Sprintf("%s%s%s", keyringService, "/", activeProfile) + return keyring.Delete(activeProfileKeyring, string(key)) + } + return keyring.Delete(keyringService, string(key)) } @@ -349,7 +361,18 @@ func deleteAuthFieldInEncodedTextFile(key authFieldKey) error { if err != nil { return fmt.Errorf("get config dir: %w", err) } - textFileDir := filepath.Join(configDir, textFileFolderName) + + activeProfile, err := config.GetProfile() + if err != nil { + return fmt.Errorf("get profile: %w", err) + } + + profileTextFileFolderName := textFileFolderName + if activeProfile != "" { + profileTextFileFolderName = filepath.Join(activeProfile, textFileFolderName) + } + + textFileDir := filepath.Join(configDir, profileTextFileFolderName) textFilePath := filepath.Join(textFileDir, textFileName) contentEncoded, err := os.ReadFile(textFilePath) From e6a4b43b1d467b01dfbac75f69702799f3e02263 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Palet?= Date: Mon, 20 May 2024 10:00:16 +0100 Subject: [PATCH 3/3] Use filepath.Join for keyring path too --- internal/pkg/auth/storage.go | 4 ++-- internal/pkg/auth/storage_test.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/pkg/auth/storage.go b/internal/pkg/auth/storage.go index ab8475b9d..de08f25d5 100644 --- a/internal/pkg/auth/storage.go +++ b/internal/pkg/auth/storage.go @@ -77,7 +77,7 @@ func setAuthFieldInKeyring(key authFieldKey, value string) error { } if activeProfile != "" { - activeProfileKeyring := fmt.Sprintf("%s%s%s", keyringService, "/", activeProfile) + activeProfileKeyring := filepath.Join(keyringService, activeProfile) return keyring.Set(activeProfileKeyring, string(key), value) } return keyring.Set(keyringService, string(key), value) @@ -171,7 +171,7 @@ func getAuthFieldFromKeyring(key authFieldKey) (string, error) { } if activeProfile != "" { - activeProfileKeyring := fmt.Sprintf("%s%s%s", keyringService, "/", activeProfile) + activeProfileKeyring := filepath.Join(keyringService, activeProfile) return keyring.Get(activeProfileKeyring, string(key)) } return keyring.Get(keyringService, string(key)) diff --git a/internal/pkg/auth/storage_test.go b/internal/pkg/auth/storage_test.go index 82101cc27..306b4deee 100644 --- a/internal/pkg/auth/storage_test.go +++ b/internal/pkg/auth/storage_test.go @@ -344,7 +344,7 @@ func deleteAuthFieldInKeyring(key authFieldKey) error { } if activeProfile != "" { - activeProfileKeyring := fmt.Sprintf("%s%s%s", keyringService, "/", activeProfile) + activeProfileKeyring := filepath.Join(keyringService, activeProfile) return keyring.Delete(activeProfileKeyring, string(key)) }