diff options
Diffstat (limited to 'auth')
-rw-r--r-- | auth/auth.go | 15 | ||||
-rw-r--r-- | auth/client.go | 30 | ||||
-rw-r--r-- | auth/token.go | 44 |
3 files changed, 79 insertions, 10 deletions
diff --git a/auth/auth.go b/auth/auth.go index 5a768ff..15ad854 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -26,6 +26,7 @@ import ( "errors" "fmt" "github.com/zalando/go-keyring" + "github.com/spf13/viper" ) var serviceName string = "macli" @@ -43,10 +44,16 @@ func init() { // asks for all the details func Login(tk, clientId string, storeClientId bool) { - /* check if an auth token already exists - * if there is an error with keyring, askClientId would handle it - * can safely ignore error here */ - existingToken, _ := keyring.Get(serviceName, userName) + // check if an auth token already exists + var existingToken string + if NoSysKeyring { + existingToken = viper.GetString("auth.token") + } else { + /* if there is an error with keyring, askClientId would handle it + * can safely ignore error here */ + existingToken, _ = keyring.Get(serviceName, userName) + } + if existingToken != "" { if !confirmInput("Already logged in. Log in again? [Y/n] ", true) { fmt.Println("Login process aborted") diff --git a/auth/client.go b/auth/client.go index 6ec75ca..5a3e501 100644 --- a/auth/client.go +++ b/auth/client.go @@ -22,15 +22,36 @@ import ( "os" "fmt" "github.com/zalando/go-keyring" + "github.com/spf13/viper" + "errors" ) var clientSuffix string = "-client-id" func getClientId() (string, error) { - return keyring.Get(serviceName + clientSuffix, userName) + var id string + var err error + + + if NoSysKeyring { + id = viper.GetString("auth.client_id") + if id == "" { + err = errors.New("secret not found in keyring") + } + } else { + id, err = keyring.Get(serviceName + clientSuffix, userName) + } + + return id, err } func setClientId(clientId string) { + if NoSysKeyring { + defer viper.WriteConfig() + viper.Set("auth.client_id", clientId) + return + } + err := keyring.Set(serviceName + clientSuffix, userName, clientId) if err != nil { fmt.Println("Error while writing Client ID to keychain", err) @@ -39,9 +60,14 @@ func setClientId(clientId string) { } func deleteClientId() { + if NoSysKeyring { + defer viper.WriteConfig() + viper.Set("auth.client_id", "") + } + err := keyring.Delete(serviceName + clientSuffix, userName) // if secret doesnt exist dont show error - if err != nil { + if err != nil && !NoSysKeyring { if err.Error() != "secret not found in keyring" { fmt.Println("Error while deleting Client ID", err.Error()) os.Exit(1) diff --git a/auth/token.go b/auth/token.go index fb1073f..5573231 100644 --- a/auth/token.go +++ b/auth/token.go @@ -22,10 +22,12 @@ import ( "os" "fmt" "github.com/zalando/go-keyring" + "github.com/spf13/viper" ) var refreshPrefix string = "-refresh-token" var expiresPrefix string = "-expires-in" +var NoSysKeyring bool func GetToken() string { secret, err := keyring.Get(serviceName, userName) @@ -39,17 +41,29 @@ func GetToken() string { } func setToken(secret string) { + if NoSysKeyring { + defer viper.WriteConfig() + viper.Set("auth.token", secret) + viper.Set("auth.no_system_keyring", true) + return + } + err := keyring.Set(serviceName, userName, secret) if err != nil { - fmt.Println("Error while writing access token to keychain", err) + fmt.Println("Error while writing access token to keychain", err.Error()) os.Exit(1) } } func deleteToken() { + if NoSysKeyring { + defer viper.WriteConfig() + viper.Set("auth.token", "") + } + err := keyring.Delete(serviceName, userName) // if secret doesnt exist dont show error - if err != nil { + if err != nil && !NoSysKeyring { if err.Error() != "secret not found in keyring" { fmt.Println("Error while deleting authentication token", err.Error()) os.Exit(1) @@ -59,6 +73,12 @@ func deleteToken() { // currently refreshtoken has no use func setRefreshToken(secret string) { + if NoSysKeyring { + defer viper.WriteConfig() + viper.Set("auth.refresh", secret) + return + } + err := keyring.Set(serviceName + refreshPrefix, userName, secret) if err != nil { fmt.Println("Error while writing access token to keychain", err) @@ -78,9 +98,14 @@ func getRefreshToken() string { } func deleteRefreshToken() { + if NoSysKeyring { + defer viper.WriteConfig() + viper.Set("auth.refresh", "") + } + err := keyring.Delete(serviceName + refreshPrefix, userName) // if secret doesnt exist dont show error - if err != nil { + if err != nil && !NoSysKeyring { if err.Error() != "secret not found in keyring" { fmt.Println("Error while deleting refresh token", err.Error()) os.Exit(1) @@ -89,6 +114,12 @@ func deleteRefreshToken() { } func setExpiresIn(secret string) { + if NoSysKeyring { + defer viper.WriteConfig() + viper.Set("auth.refresh", secret) + return + } + err := keyring.Set(serviceName + expiresPrefix, userName, secret) if err != nil { fmt.Println("Error while writing token expire time to keychain", err) @@ -108,9 +139,14 @@ func getExpiresIn() string { } func deleteExpiresIn() { + if NoSysKeyring { + defer viper.WriteConfig() + viper.Set("auth.refresh", "") + } + err := keyring.Delete(serviceName + expiresPrefix, userName) // if secret doesnt exist dont show error - if err != nil { + if err != nil && !NoSysKeyring { if err.Error() != "secret not found in keyring" { fmt.Println("Error while deleting token expires in data", err.Error()) os.Exit(1) |