normalizer

package
v1.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 1, 2026 License: MIT Imports: 3 Imported by: 0

Documentation

Overview

Package normalizer provides functionality for normalizing vulnerability data from different scanner outputs into a unified format.

Design Philosophy: Each scanner has its own JSON schema and data representation. The normalizer serves as an anti-corruption layer that: 1. Isolates the core domain from external schema changes 2. Provides consistent data regardless of source 3. Handles missing/malformed fields gracefully 4. Enables new scanner integration without affecting existing code

Error Handling Strategy: - Missing fields: Use sensible defaults - Malformed data: Log warning, skip individual record, continue processing - Empty responses: Return empty slice (not error) - Invalid JSON: Return error (unrecoverable)

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Normalizer

type Normalizer struct {
	// contains filtered or unexported fields
}

Normalizer handles the normalization of vulnerability data from multiple sources.

func NewNormalizer

func NewNormalizer(opts ...Option) *Normalizer

NewNormalizer creates a new Normalizer with the given options.

func (*Normalizer) FilterBySeverity

func (n *Normalizer) FilterBySeverity(vulns []models.Vulnerability, minSeverity models.Severity) []models.Vulnerability

FilterBySeverity returns only vulnerabilities at or above the given severity.

func (*Normalizer) GroupByPackage

func (n *Normalizer) GroupByPackage(vulns []models.Vulnerability) map[string][]models.Vulnerability

GroupByPackage organizes vulnerabilities by package name.

func (*Normalizer) GroupByScanner

func (n *Normalizer) GroupByScanner(vulns []models.Vulnerability) map[string][]models.Vulnerability

GroupByScanner organizes vulnerabilities by scanner.

func (*Normalizer) GroupBySeverity

func (n *Normalizer) GroupBySeverity(vulns []models.Vulnerability) map[models.Severity][]models.Vulnerability

GroupBySeverity organizes vulnerabilities by their severity level.

func (*Normalizer) MergeVulnerabilities

func (n *Normalizer) MergeVulnerabilities(results []models.ScanResult) map[string][]models.Vulnerability

MergeVulnerabilities combines vulnerabilities from multiple sources, tracking which scanners found each vulnerability.

This is useful for consensus analysis where we need to know which scanners agree on a vulnerability.

func (*Normalizer) NormalizeResults

func (n *Normalizer) NormalizeResults(results []models.ScanResult) []models.Vulnerability

NormalizeResults takes scan results from multiple scanners and produces a unified, normalized list of vulnerabilities.

Processing Steps: 1. Extract vulnerabilities from all results 2. Normalize severity values 3. Clean and validate fields 4. Optionally deduplicate 5. Sort by severity (highest first)

Time Complexity: O(n log n) where n is total vulnerabilities Space Complexity: O(n) for storing all vulnerabilities

type Option

type Option func(*Normalizer)

Option is a functional option for configuring the Normalizer.

func WithDeduplication

func WithDeduplication(enabled bool) Option

WithDeduplication enables or disables deduplication.

func WithSeverityNormalization

func WithSeverityNormalization(enabled bool) Option

WithSeverityNormalization enables or disables severity normalization.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL