@@ -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+
974982func GetLatestTaskID (sonarHost string , projectSlug string ) (string , error ) {
975983 fmt .Printf ("\n Starting 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 ("\n Error 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 ("\n Request 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 ("\n Error 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 ("\n Retrying with Basic Auth...\n " )
1006+ addBasicAuth (taskRequest , sonarToken )
1007+ taskResponse , err = netClient .Do (taskRequest )
10031008 if err != nil {
1004- fmt .Printf ("\n Request 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 ("\n Error 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 ("\n Error 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