Skip to content

Commit 518e7ed

Browse files
auth fix
1 parent 4f02678 commit 518e7ed

File tree

1 file changed

+52
-31
lines changed

1 file changed

+52
-31
lines changed

plugin.go

Lines changed: 52 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -971,50 +971,55 @@ func GetProjectStatus(sonarHost string, analysisId string, projectSlug string) (
971971
return buf, nil
972972
}
973973

974+
func addBearerToken(req *http.Request, token string) {
975+
req.Header.Add("Authorization", "Bearer "+token)
976+
}
977+
978+
func addBasicAuth(req *http.Request, token string) {
979+
req.SetBasicAuth(token, "")
980+
}
981+
974982
func GetLatestTaskID(sonarHost string, projectSlug string) (string, error) {
975983
fmt.Printf("\nStarting Task ID Discovery\n")
976984
url := fmt.Sprintf("%s/api/project_analyses/search?project=%s&ps=1", sonarHost, projectSlug)
977985
fmt.Printf("URL: %s\n", url)
978986

979-
req, err := http.NewRequest("GET", url, nil)
987+
taskRequest, err := http.NewRequest("GET", url, nil)
980988
if err != nil {
981989
fmt.Printf("\nError to create request in Task discovery: %s\n", err.Error())
982990
return "", err
983991
}
984992

985993
sonarToken := os.Getenv("PLUGIN_SONAR_TOKEN")
986-
req.SetBasicAuth(sonarToken, "")
987-
resp, err := netClient.Do(req)
994+
// First, try with Bearer token
995+
addBearerToken(taskRequest, sonarToken)
996+
taskResponse, err := netClient.Do(taskRequest)
988997
if err != nil {
989-
fmt.Printf("\nRequest Error in Task discovery: %s\n", err.Error())
990-
return "", err
998+
logrus.WithFields(logrus.Fields{
999+
"error": err,
1000+
}).Fatal("Failed get sonar job status")
9911001
}
992-
defer resp.Body.Close()
9931002

994-
if resp.StatusCode == http.StatusForbidden {
995-
fmt.Printf("\nError in Task discovery: %s\n", "Check your token permission - probably it does not have 'Browse' permission on the project")
996-
fmt.Printf("Retrying with encoded token...\n")
997-
998-
encodedToken := base64.StdEncoding.EncodeToString([]byte(sonarToken))
999-
req.Header.Add("Authorization", basicAuth+encodedToken)
1000-
fmt.Printf("Token encoded: %s\n", encodedToken)
1001-
req.SetBasicAuth(encodedToken, "")
1002-
resp, err = netClient.Do(req)
1003+
// If Forbidden, try with Basic Auth
1004+
if taskResponse.StatusCode == http.StatusForbidden {
1005+
fmt.Printf("\nRetrying with Basic Auth...\n")
1006+
addBasicAuth(taskRequest, sonarToken)
1007+
taskResponse, err = netClient.Do(taskRequest)
10031008
if err != nil {
1004-
fmt.Printf("\nRequest Error in Task discovery after retry: %s\n", err.Error())
1005-
return "", err
1009+
logrus.WithFields(logrus.Fields{
1010+
"error": err,
1011+
}).Fatal("Failed get sonar job status")
10061012
}
1007-
defer resp.Body.Close()
10081013
}
10091014

1010-
if resp.StatusCode != http.StatusOK {
1011-
if resp.StatusCode == http.StatusUnauthorized {
1015+
if taskResponse.StatusCode != http.StatusOK {
1016+
if taskResponse.StatusCode == http.StatusUnauthorized {
10121017
fmt.Printf("\nError in Task discovery: %s\n", "Invalid Credentials - your token is not valid")
10131018
}
1014-
return "", fmt.Errorf("HTTP request error. Status code: %d", resp.StatusCode)
1019+
return "", fmt.Errorf("HTTP request error. Status code: %d", taskResponse.StatusCode)
10151020
}
10161021

1017-
body, err := ioutil.ReadAll(resp.Body)
1022+
body, err := io.ReadAll(taskResponse.Body)
10181023
if err != nil {
10191024
fmt.Printf("\nError reading response body in Task discovery: %s\n", err.Error())
10201025
return "", err
@@ -1052,27 +1057,43 @@ func getSonarJobStatus(report *SonarReport) *TaskResponse {
10521057
if err != nil {
10531058
logrus.WithFields(logrus.Fields{
10541059
"error": err,
1055-
}).Fatal("Failed get sonar job status")
1060+
}).Fatal("Failed to create request for Sonar job status")
10561061
}
1057-
taskRequest.Header.Add("Authorization", basicAuth+os.Getenv("PLUGIN_SONAR_TOKEN"))
1062+
1063+
sonarToken := os.Getenv("PLUGIN_SONAR_TOKEN")
1064+
taskRequest.Header.Add("Authorization", "Basic "+base64.StdEncoding.EncodeToString([]byte(sonarToken+":")))
1065+
10581066
taskResponse, err := netClient.Do(taskRequest)
10591067
if err != nil {
10601068
logrus.WithFields(logrus.Fields{
10611069
"error": err,
1062-
}).Fatal("Failed get sonar job status")
1070+
}).Fatal("Failed to get Sonar job status")
10631071
}
1064-
buf, err := io.ReadAll(taskResponse.Body)
10651072

1066-
fmt.Printf("\n")
1067-
fmt.Printf("==> Job Status Response:\n")
1068-
fmt.Println(string(buf))
1069-
fmt.Printf("\n")
1073+
if taskResponse.StatusCode == http.StatusForbidden {
1074+
fmt.Println("Basic Auth failed. Retrying with Bearer token...")
1075+
taskRequest.Header.Set("Authorization", "Bearer "+sonarToken)
1076+
taskResponse, err = netClient.Do(taskRequest)
1077+
if err != nil {
1078+
logrus.WithFields(logrus.Fields{
1079+
"error": err,
1080+
}).Fatal("Failed to get Sonar job status with Bearer token")
1081+
}
1082+
}
1083+
1084+
buf, err := io.ReadAll(taskResponse.Body)
10701085
if err != nil {
10711086
logrus.WithFields(logrus.Fields{
10721087
"error": err,
1073-
}).Fatal("Failed to read sonar job status response body")
1088+
}).Fatal("Failed to read Sonar job status response body")
10741089
}
1090+
1091+
fmt.Printf("\n==> Job Status Response:\n")
1092+
fmt.Println(string(buf))
1093+
fmt.Printf("\n")
1094+
10751095
task := TaskResponse{}
1096+
10761097
fmt.Println(lineBreak2)
10771098
fmt.Println("| Report Result: |")
10781099
fmt.Println(lineBreak2)

0 commit comments

Comments
 (0)