diff --git a/hubclient/rapid-scans-client.go b/hubclient/rapid-scans-client.go index 5db206f..aa43f2c 100644 --- a/hubclient/rapid-scans-client.go +++ b/hubclient/rapid-scans-client.go @@ -17,10 +17,15 @@ package hubclient import ( "github.com/blackducksoftware/hub-client-go/hubapi" log "github.com/sirupsen/logrus" + "strconv" ) const ( - apiDeveloperScans = "/api/developer-scans" + apiDeveloperScans = "/api/developer-scans" + headerBdMode = "X-BD-MODE" + headerBdDocumentCount = "X-BD-DOCUMENT-COUNT" + bdModeAppend = "append" + bdModeFinish = "finish" ) func (c *Client) StartRapidScan(bdioHeaderContent string) (error, string) { @@ -34,3 +39,28 @@ func (c *Client) StartRapidScan(bdioHeaderContent string) (error, string) { return nil, bdioUploadEndpoint } + +func (c *Client) UploadBdioFiles(bdioUploadEndpoint string, bdioContents []string) error { + c.AddHeaderValue(headerBdMode, bdModeAppend) + c.AddHeaderValue(headerBdDocumentCount, strconv.Itoa(len(bdioContents))) + + for _, bdioContent := range bdioContents { + err := c.HttpPutJSON(bdioUploadEndpoint, bdioContent, hubapi.ContentTypeRapidScan, 202) + if err != nil { + log.Errorf("Error uploading bdio files.", err) + return err + } + } + + c.SetHeaderValue(headerBdMode, bdModeFinish) + err := c.HttpPutJSON(bdioUploadEndpoint, "", hubapi.ContentTypeRapidScan, 202) + if err != nil { + log.Errorf("Error uploading bdio files.", err) + return err + } + + c.DeleteHeaderValue(headerBdMode) + c.DeleteHeaderValue(headerBdDocumentCount) + + return nil +}