Skip to content

Commit

Permalink
fix bug #414 where the jira consumer would not create issues with zer…
Browse files Browse the repository at this point in the history
…o scanstart time
  • Loading branch information
northdpole authored and andream16 committed Oct 11, 2024
1 parent 4489f0f commit 440cc09
Show file tree
Hide file tree
Showing 4 changed files with 187 additions and 32 deletions.
5 changes: 0 additions & 5 deletions components/consumers/jira/utils/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,6 @@ func ProcessMessages(allowDuplicates, allowFP bool, sevThreshold int) ([]documen
return nil, 0, err
}
messages, discarded := ProcessRawMessages(responses, sevThreshold)
if err != nil {
log.Print("Could not Process Raw Messages: ", err)
return nil, 0, err
}

return messages, discarded, nil
}
log.Print("Parsing Enriched results")
Expand Down
3 changes: 3 additions & 0 deletions pkg/jira/jira/apiutils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package jira

import (
"testing"
"time"

jira "github.com/andygrunwald/go-jira"
"github.com/ocurity/dracon/pkg/jira/document"
"github.com/stretchr/testify/require"
"github.com/trivago/tgo/tcontainer"
)
Expand Down Expand Up @@ -65,6 +67,7 @@ func TestMakeDescription(t *testing.T) {
require.Equal(t, res, exp)
}


func TestMakeSummary(t *testing.T) {
res, extra := makeSummary(sampleResult)
exp := "bar1:baz2 Unit Test Title"
Expand Down
62 changes: 37 additions & 25 deletions pkg/templating/template_description.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,21 @@ const (
defaultRawFindingTemplate = "Dracon found '{{.Title}}' at '{{.Target}}', severity '{{.Severity}}', rule id: '{{.Type}}', CVSS '{{.Cvss}}' Confidence '{{.Confidence}}' Original Description: {{.Description}}, Cve {{.Cve}}"
)

type (
enrichedIssue struct {
*v1.EnrichedIssue
ToolName string
ScanStartTime string
ScanID string
ConfidenceText string
SeverityText string
Count uint
FirstFound string
}

enrichedIssueOption func(*enrichedIssue) error
)

// TemplateStringRaw applies the provided go template to the Raw Issue provided and returns the resulting str
func TemplateStringRaw(inputTemplate string, issue *v1.Issue) (*string, error) {
if inputTemplate == "" {
Expand All @@ -36,18 +51,7 @@ func TemplateStringRaw(inputTemplate string, issue *v1.Issue) (*string, error) {
return &res, nil
}

type enrichedIssue struct {
*v1.EnrichedIssue
ToolName string
ScanStartTime string
ScanID string
ConfidenceText string
SeverityText string
Count uint
FirstFound string
}
type enrichedIssueOption func(*enrichedIssue) error

// EnrichedIssueWithToolName allows customising the Enriched Issue's ToolName.
func EnrichedIssueWithToolName(toolname string) enrichedIssueOption {
return func(ei *enrichedIssue) error {
if toolname == "" {
Expand All @@ -58,16 +62,7 @@ func EnrichedIssueWithToolName(toolname string) enrichedIssueOption {
}
}

func EnrichedIssueWithScanStartTime(startTime time.Time) enrichedIssueOption {
return func(ei *enrichedIssue) error {
if time.Time.IsZero(startTime) {
return errors.New("invalid startTime zero")
}
ei.ScanStartTime = startTime.Format(time.RFC3339)
return nil
}
}

// EnrichedIssueWithConfidenceText allows customising the Enriched Issue's ConfidenceText.
func EnrichedIssueWithConfidenceText(confidence string) enrichedIssueOption {
return func(ei *enrichedIssue) error {
if confidence == "" {
Expand All @@ -78,6 +73,7 @@ func EnrichedIssueWithConfidenceText(confidence string) enrichedIssueOption {
}
}

// EnrichedIssueWithSeverityText allows customising the Enriched Issue's SeverityText.
func EnrichedIssueWithSeverityText(severity string) enrichedIssueOption {
return func(ei *enrichedIssue) error {
if severity == "" {
Expand All @@ -88,6 +84,7 @@ func EnrichedIssueWithSeverityText(severity string) enrichedIssueOption {
}
}

// EnrichedIssueWithCount allows customising the Enriched Issue's Count.
func EnrichedIssueWithCount(count uint) enrichedIssueOption {
return func(ei *enrichedIssue) error {
if count <= 0 {
Expand All @@ -98,6 +95,7 @@ func EnrichedIssueWithCount(count uint) enrichedIssueOption {
}
}

// EnrichedIssueWithScanID allows customising the Enriched Issue's Scan ID.
func EnrichedIssueWithScanID(scanID string) enrichedIssueOption {
return func(ei *enrichedIssue) error {
if scanID == "" {
Expand All @@ -108,12 +106,26 @@ func EnrichedIssueWithScanID(scanID string) enrichedIssueOption {
}
}

// EnrichedIssueWithScanStartTime allows customising the Enriched Issue's Scan start time.
func EnrichedIssueWithScanStartTime(startTime time.Time) enrichedIssueOption {
return func(ei *enrichedIssue) error {
st := startTime.Format(time.RFC3339)
if startTime.IsZero() {
return errors.Errorf("invalid startTime zero: %s", st)
}
ei.ScanStartTime = st
return nil
}
}

// EnrichedIssueWithFirstFound allows customising the Enriched Issue's Scan first found time.
func EnrichedIssueWithFirstFound(firstFound time.Time) enrichedIssueOption {
return func(ei *enrichedIssue) error {
if time.Time.IsZero(firstFound) {
return errors.New("invalid firstFound zero")
ff := firstFound.Format(time.RFC3339)
if firstFound.IsZero() {
return errors.Errorf("invalid firstFound zero %s", ff)
}
ei.FirstFound = firstFound.Format(time.RFC3339)
ei.FirstFound = ff
return nil
}
}
Expand Down
149 changes: 147 additions & 2 deletions pkg/templating/template_description_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import (
"testing"
"time"

"google.golang.org/protobuf/types/known/timestamppb"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/timestamppb"

v1 "github.com/ocurity/dracon/api/proto/v1"
)
Expand Down Expand Up @@ -138,3 +138,148 @@ func Test_TemplateStringEnriched(t *testing.T) {
})
}
}

func TestDescriptionOptions(t *testing.T) {
type args struct {
option enrichedIssueOption
}

acceptableTime, err := time.Parse(time.RFC3339, "2024-10-10T20:06:33Z")
require.NoError(t, err)

for _, tt := range []struct {
name string
args args
wantErr bool
expectedEnrichedIssue *enrichedIssue
}{
{
name: "zero startTime returns err",
args: args{
option: EnrichedIssueWithScanStartTime(time.Time{}),
},
wantErr: true,
},
{
name: "non zero startTime returns no err",
args: args{
option: EnrichedIssueWithScanStartTime(acceptableTime),
},
wantErr: false,
expectedEnrichedIssue: &enrichedIssue{
ScanStartTime: acceptableTime.Format(time.RFC3339),
},
},
{
name: "zero firstFound returns err",
args: args{
option: EnrichedIssueWithFirstFound(time.Time{}),
},
wantErr: true,
},
{
name: "non zero firstFound returns no err",
args: args{
option: EnrichedIssueWithFirstFound(acceptableTime),
},
wantErr: false,
expectedEnrichedIssue: &enrichedIssue{
FirstFound: acceptableTime.Format(time.RFC3339),
},
},
{
name: "empty tool name returns err",
args: args{
option: EnrichedIssueWithToolName(""),
},
wantErr: true,
},
{
name: "valid tool name returns no err",
args: args{
option: EnrichedIssueWithToolName("some-tool"),
},
wantErr: false,
expectedEnrichedIssue: &enrichedIssue{
ToolName: "some-tool",
},
},
{
name: "empty confidence text returns err",
args: args{
option: EnrichedIssueWithConfidenceText(""),
},
wantErr: true,
},
{
name: "valid confidence text returns no err",
args: args{
option: EnrichedIssueWithConfidenceText("conf-text-1"),
},
wantErr: false,
expectedEnrichedIssue: &enrichedIssue{
ConfidenceText: "conf-text-1",
},
},
{
name: "empty severity text returns err",
args: args{
option: EnrichedIssueWithSeverityText(""),
},
wantErr: true,
},
{
name: "valid severity text returns no err",
args: args{
option: EnrichedIssueWithSeverityText("severity-text-1"),
},
wantErr: false,
expectedEnrichedIssue: &enrichedIssue{
SeverityText: "severity-text-1",
},
},
{
name: "0 count returns err",
args: args{
option: EnrichedIssueWithCount(0),
},
wantErr: true,
},
{
name: "positive count text returns no err",
args: args{
option: EnrichedIssueWithCount(420),
},
wantErr: false,
expectedEnrichedIssue: &enrichedIssue{
Count: 420,
},
},
{
name: "empty scan ID returns err",
args: args{
option: EnrichedIssueWithScanID(""),
},
wantErr: true,
},
{
name: "valid scan id returns no err",
args: args{
option: EnrichedIssueWithScanID("scan-1"),
},
wantErr: false,
expectedEnrichedIssue: &enrichedIssue{
ScanID: "scan-1",
},
},
} {
t.Run(tt.name, func(t *testing.T) {
var ei enrichedIssue
if err := tt.args.option(&ei); tt.wantErr {
require.Error(t, err)
return
}
assert.Equal(t, tt.expectedEnrichedIssue, &ei)
})
}
}

0 comments on commit 440cc09

Please sign in to comment.