github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/codeql/sarif_upload.go (about) 1 package codeql 2 3 import ( 4 "encoding/json" 5 "io" 6 "net/http" 7 ) 8 9 type CodeqlSarifUploader interface { 10 GetSarifStatus() (SarifFileInfo, error) 11 } 12 13 func NewCodeqlSarifUploaderInstance(url, token string) CodeqlSarifUploaderInstance { 14 return CodeqlSarifUploaderInstance{ 15 url: url, 16 token: token, 17 } 18 } 19 20 type CodeqlSarifUploaderInstance struct { 21 url string 22 token string 23 } 24 25 func (codeqlSarifUploader *CodeqlSarifUploaderInstance) GetSarifStatus() (SarifFileInfo, error) { 26 return getSarifUploadingStatus(codeqlSarifUploader.url, codeqlSarifUploader.token) 27 } 28 29 type SarifFileInfo struct { 30 ProcessingStatus string `json:"processing_status"` 31 Errors []string `json:"errors"` 32 } 33 34 const internalServerError = "Internal server error" 35 36 func getSarifUploadingStatus(sarifURL, token string) (SarifFileInfo, error) { 37 client := http.Client{} 38 req, err := http.NewRequest("GET", sarifURL, nil) 39 if err != nil { 40 return SarifFileInfo{}, err 41 } 42 req.Header.Add("Authorization", "Bearer "+token) 43 req.Header.Add("Accept", "application/vnd.github+json") 44 req.Header.Add("X-GitHub-Api-Version", "2022-11-28") 45 46 resp, err := client.Do(req) 47 if err != nil { 48 return SarifFileInfo{}, err 49 } 50 defer resp.Body.Close() 51 52 if resp.StatusCode == http.StatusServiceUnavailable || resp.StatusCode == http.StatusBadGateway || 53 resp.StatusCode == http.StatusGatewayTimeout { 54 return SarifFileInfo{ProcessingStatus: internalServerError}, nil 55 } 56 57 body, err := io.ReadAll(resp.Body) 58 if err != nil { 59 return SarifFileInfo{}, err 60 } 61 62 sarifInfo := SarifFileInfo{} 63 err = json.Unmarshal(body, &sarifInfo) 64 if err != nil { 65 return SarifFileInfo{}, err 66 } 67 return sarifInfo, nil 68 }