From b3130f6da056cdb4c8085c7acd9aff4cc6e013ee Mon Sep 17 00:00:00 2001 From: Ramana Reddy Date: Mon, 19 Feb 2024 20:02:33 +0530 Subject: [PATCH 1/3] Fix auth err when username is empty --- auth/pdcp/auth.go | 11 +++++++++-- auth/pdcp/creds.go | 6 ++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/auth/pdcp/auth.go b/auth/pdcp/auth.go index 0e75cead..3e7bb119 100644 --- a/auth/pdcp/auth.go +++ b/auth/pdcp/auth.go @@ -23,13 +23,20 @@ var ( // when validate is true any existing credentials are validated // Note: this is meant to be used in cli only (interactive mode) func CheckNValidateCredentials(toolName string) { + userStrFn := func(creds *PDCPCredentials) string { + user := fmt.Sprintf("@%v", creds.Username) + if creds.Username == "" { + user = creds.Email + } + return user + } h := &PDCPCredHandler{} creds, err := h.GetCreds() if err == nil { // validate by fetching user profile gotCreds, err := h.ValidateAPIKey(creds.APIKey, creds.Server, toolName) if err == nil { - gologger.Info().Msgf("You are logged in as (@%v)", gotCreds.Username) + gologger.Info().Msgf("You are logged in as (%v)", userStrFn(gotCreds)) os.Exit(0) } gologger.Error().Msgf("Invalid API key found in file, please recheck or recreate your API key and retry.") @@ -56,7 +63,7 @@ func CheckNValidateCredentials(toolName string) { // validate by fetching user profile validatedCreds, err := h.ValidateAPIKey(apiKey, apiServer, toolName) if err == nil { - gologger.Info().Msgf("Successfully logged in as (@%v)", validatedCreds.Username) + gologger.Info().Msgf("Successfully logged in as (%v)", userStrFn(validatedCreds)) if saveErr := h.SaveCreds(validatedCreds); saveErr != nil { gologger.Warning().Msgf("Could not save credentials to file: %s\n", saveErr) } diff --git a/auth/pdcp/creds.go b/auth/pdcp/creds.go index f6f3c038..94a80ff1 100644 --- a/auth/pdcp/creds.go +++ b/auth/pdcp/creds.go @@ -31,12 +31,14 @@ const ( type PDCPCredentials struct { Username string `yaml:"username"` + Email string `yaml:"email"` APIKey string `yaml:"api-key"` Server string `yaml:"server"` } type PDCPUserProfileResponse struct { UserName string `json:"name"` + Email string `json:"email"` // there are more fields but we don't need them /// below fields are added later on and not part of the response } @@ -128,10 +130,10 @@ func (p *PDCPCredHandler) ValidateAPIKey(key string, host string, toolName strin if err != nil { return nil, err } - if profile.UserName == "" { + if profile.Email == "" { return nil, fmt.Errorf("invalid response from server got %v", string(bin)) } - return &PDCPCredentials{Username: profile.UserName, APIKey: key, Server: host}, nil + return &PDCPCredentials{Username: profile.UserName, Email: profile.Email, APIKey: key, Server: host}, nil } func init() { From d8c2b531cfd60d0ccbb71213bc78f28636376b5d Mon Sep 17 00:00:00 2001 From: Ramana Reddy Date: Mon, 19 Feb 2024 20:41:43 +0530 Subject: [PATCH 2/3] Misc update --- auth/pdcp/creds_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/auth/pdcp/creds_test.go b/auth/pdcp/creds_test.go index bf800515..cc38a7c6 100644 --- a/auth/pdcp/creds_test.go +++ b/auth/pdcp/creds_test.go @@ -11,6 +11,7 @@ import ( var exampleCred = ` - username: test + email: test@projectdiscovery.io api-key: testpassword server: https://scanme.sh ` From 7ad29d358163918308ba80d30ba7c6407d3a33b6 Mon Sep 17 00:00:00 2001 From: Tarun Koyalwar Date: Wed, 21 Feb 2024 01:00:05 +0530 Subject: [PATCH 3/3] use global private function instead of anon --- auth/pdcp/auth.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/auth/pdcp/auth.go b/auth/pdcp/auth.go index 3e7bb119..05fb7c9c 100644 --- a/auth/pdcp/auth.go +++ b/auth/pdcp/auth.go @@ -23,20 +23,13 @@ var ( // when validate is true any existing credentials are validated // Note: this is meant to be used in cli only (interactive mode) func CheckNValidateCredentials(toolName string) { - userStrFn := func(creds *PDCPCredentials) string { - user := fmt.Sprintf("@%v", creds.Username) - if creds.Username == "" { - user = creds.Email - } - return user - } h := &PDCPCredHandler{} creds, err := h.GetCreds() if err == nil { // validate by fetching user profile gotCreds, err := h.ValidateAPIKey(creds.APIKey, creds.Server, toolName) if err == nil { - gologger.Info().Msgf("You are logged in as (%v)", userStrFn(gotCreds)) + gologger.Info().Msgf("You are logged in as (%v)", userIdentifier(gotCreds)) os.Exit(0) } gologger.Error().Msgf("Invalid API key found in file, please recheck or recreate your API key and retry.") @@ -63,7 +56,7 @@ func CheckNValidateCredentials(toolName string) { // validate by fetching user profile validatedCreds, err := h.ValidateAPIKey(apiKey, apiServer, toolName) if err == nil { - gologger.Info().Msgf("Successfully logged in as (%v)", userStrFn(validatedCreds)) + gologger.Info().Msgf("Successfully logged in as (%v)", userIdentifier(validatedCreds)) if saveErr := h.SaveCreds(validatedCreds); saveErr != nil { gologger.Warning().Msgf("Could not save credentials to file: %s\n", saveErr) } @@ -80,3 +73,13 @@ func maskKey(key string) string { } return fmt.Sprintf("%v%v", key[:3], strings.Repeat("*", len(key)-3)) } + +// userIdentifier returns user identifier in format @username +// if username is empty, it returns email +func userIdentifier(creds *PDCPCredentials) string { + user := fmt.Sprintf("@%v", creds.Username) + if creds.Username == "" { + user = creds.Email + } + return user +}