Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Yevhen Zavhorodnii committed May 30, 2024
1 parent 8596bd5 commit e22a8d8
Show file tree
Hide file tree
Showing 6 changed files with 564 additions and 1,108 deletions.
19 changes: 15 additions & 4 deletions pkg/report/graphviz.go
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,7 @@ func WriteDataAssetDiagramGraphvizDOT(parsedModel *types.Model, diagramFilenameD
dataAssets = append(dataAssets, dataAsset)
}

types.SortByDataAssetDataBreachProbabilityAndTitle(parsedModel, dataAssets)
sortByDataAssetDataBreachProbabilityAndTitle(parsedModel, dataAssets)
for _, dataAsset := range dataAssets {
dotContent.WriteString(makeDataAssetNode(parsedModel, dataAsset))
dotContent.WriteString("\n")
Expand Down Expand Up @@ -584,9 +584,20 @@ func WriteDataAssetDiagramGraphvizDOT(parsedModel *types.Model, diagramFilenameD
return file, nil
}

func sortByDataAssetDataBreachProbabilityAndTitle(parsedModel *types.Model, assets []*types.DataAsset) {
sort.Slice(assets, func(i, j int) bool {
highestDataBreachProbabilityLeft := assets[i].IdentifiedDataBreachProbability(parsedModel)
highestDataBreachProbabilityRight := assets[j].IdentifiedDataBreachProbability(parsedModel)
if highestDataBreachProbabilityLeft == highestDataBreachProbabilityRight {
return assets[i].Title < assets[j].Title
}
return highestDataBreachProbabilityLeft > highestDataBreachProbabilityRight
})
}

func makeDataAssetNode(parsedModel *types.Model, dataAsset *types.DataAsset) string {
var color string
switch dataAsset.IdentifiedDataBreachProbabilityStillAtRisk(parsedModel) {
switch identifiedDataBreachProbabilityStillAtRisk(parsedModel, dataAsset) {
case types.Probable:
color = rgbHexColorHighRisk()
case types.Possible:
Expand All @@ -596,7 +607,7 @@ func makeDataAssetNode(parsedModel *types.Model, dataAsset *types.DataAsset) str
default:
color = "#444444" // since black is too dark here as fill color
}
if !dataAsset.IsDataBreachPotentialStillAtRisk(parsedModel) {
if !isDataBreachPotentialStillAtRisk(parsedModel, dataAsset) {
color = "#444444" // since black is too dark here as fill color
}
return " " + hash(dataAsset.Id) + ` [ label=<<b>` + encode(dataAsset.Title) + `</b>> penwidth="3.0" style="filled" fillcolor="` + color + `" color="` + color + "\"\n ]; "
Expand All @@ -621,7 +632,7 @@ func makeTechAssetNode(parsedModel *types.Model, technicalAsset *types.Technical
default:
color = "#444444" // since black is too dark here as fill color
}
if len(types.ReduceToOnlyStillAtRisk(parsedModel, generatedRisks)) == 0 {
if len(types.ReduceToOnlyStillAtRisk(generatedRisks)) == 0 {
color = "#444444" // since black is too dark here as fill color
}
}
Expand Down
57 changes: 47 additions & 10 deletions pkg/report/json.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,6 @@ import (
)

func WriteRisksJSON(parsedModel *types.Model, filename string) error {
/*
remainingRisks := make([]model.Risk, 0)
for _, category := range model.SortedRiskCategories() {
risks := model.SortedRisksOfCategory(category)
for _, risk := range model.ReduceToOnlyStillAtRisk(risks) {
remainingRisks = append(remainingRisks, risk)
}
}
*/
jsonBytes, err := json.Marshal(types.AllRisks(parsedModel))
if err != nil {
return fmt.Errorf("failed to marshal risks to JSON: %w", err)
Expand All @@ -44,7 +35,7 @@ func WriteTechnicalAssetsJSON(parsedModel *types.Model, filename string) error {
}

func WriteStatsJSON(parsedModel *types.Model, filename string) error {
jsonBytes, err := json.Marshal(types.OverallRiskStatistics(parsedModel))
jsonBytes, err := json.Marshal(overallRiskStatistics(parsedModel))
if err != nil {
return fmt.Errorf("failed to marshal stats to JSON: %w", err)
}
Expand All @@ -54,3 +45,49 @@ func WriteStatsJSON(parsedModel *types.Model, filename string) error {
}
return nil
}

func overallRiskStatistics(parsedModel *types.Model) types.RiskStatistics {
result := types.RiskStatistics{}
result.Risks = make(map[string]map[string]int)
result.Risks[types.CriticalSeverity.String()] = make(map[string]int)
result.Risks[types.CriticalSeverity.String()][types.Unchecked.String()] = 0
result.Risks[types.CriticalSeverity.String()][types.InDiscussion.String()] = 0
result.Risks[types.CriticalSeverity.String()][types.Accepted.String()] = 0
result.Risks[types.CriticalSeverity.String()][types.InProgress.String()] = 0
result.Risks[types.CriticalSeverity.String()][types.Mitigated.String()] = 0
result.Risks[types.CriticalSeverity.String()][types.FalsePositive.String()] = 0
result.Risks[types.HighSeverity.String()] = make(map[string]int)
result.Risks[types.HighSeverity.String()][types.Unchecked.String()] = 0
result.Risks[types.HighSeverity.String()][types.InDiscussion.String()] = 0
result.Risks[types.HighSeverity.String()][types.Accepted.String()] = 0
result.Risks[types.HighSeverity.String()][types.InProgress.String()] = 0
result.Risks[types.HighSeverity.String()][types.Mitigated.String()] = 0
result.Risks[types.HighSeverity.String()][types.FalsePositive.String()] = 0
result.Risks[types.ElevatedSeverity.String()] = make(map[string]int)
result.Risks[types.ElevatedSeverity.String()][types.Unchecked.String()] = 0
result.Risks[types.ElevatedSeverity.String()][types.InDiscussion.String()] = 0
result.Risks[types.ElevatedSeverity.String()][types.Accepted.String()] = 0
result.Risks[types.ElevatedSeverity.String()][types.InProgress.String()] = 0
result.Risks[types.ElevatedSeverity.String()][types.Mitigated.String()] = 0
result.Risks[types.ElevatedSeverity.String()][types.FalsePositive.String()] = 0
result.Risks[types.MediumSeverity.String()] = make(map[string]int)
result.Risks[types.MediumSeverity.String()][types.Unchecked.String()] = 0
result.Risks[types.MediumSeverity.String()][types.InDiscussion.String()] = 0
result.Risks[types.MediumSeverity.String()][types.Accepted.String()] = 0
result.Risks[types.MediumSeverity.String()][types.InProgress.String()] = 0
result.Risks[types.MediumSeverity.String()][types.Mitigated.String()] = 0
result.Risks[types.MediumSeverity.String()][types.FalsePositive.String()] = 0
result.Risks[types.LowSeverity.String()] = make(map[string]int)
result.Risks[types.LowSeverity.String()][types.Unchecked.String()] = 0
result.Risks[types.LowSeverity.String()][types.InDiscussion.String()] = 0
result.Risks[types.LowSeverity.String()][types.Accepted.String()] = 0
result.Risks[types.LowSeverity.String()][types.InProgress.String()] = 0
result.Risks[types.LowSeverity.String()][types.Mitigated.String()] = 0
result.Risks[types.LowSeverity.String()][types.FalsePositive.String()] = 0
for _, risks := range parsedModel.GeneratedRisksByCategory {
for _, risk := range risks {
result.Risks[risk.Severity.String()][risk.RiskStatus.String()]++
}
}
return result
}
Loading

0 comments on commit e22a8d8

Please sign in to comment.