pentest

package
v0.1.2 Latest Latest
Warning

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

Go to latest
Published: Mar 17, 2026 License: GPL-3.0 Imports: 6 Imported by: 0

Documentation

Overview

Package pentest defines the Pentest Campaign Management domain types.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrCampaignNotFound        = fmt.Errorf("%w: campaign not found", shared.ErrNotFound)
	ErrFindingNotFound         = fmt.Errorf("%w: finding not found", shared.ErrNotFound)
	ErrRetestNotFound          = fmt.Errorf("%w: retest not found", shared.ErrNotFound)
	ErrTemplateNotFound        = fmt.Errorf("%w: template not found", shared.ErrNotFound)
	ErrReportNotFound          = fmt.Errorf("%w: report not found", shared.ErrNotFound)
	ErrInvalidStatusTransition = fmt.Errorf("%w: invalid status transition", shared.ErrValidation)
	ErrSystemTemplateReadOnly  = fmt.Errorf("%w: system templates cannot be modified", shared.ErrForbidden)
)

CampaignStatusTransitions defines allowed status transitions.

FindingStatusTransitions defines allowed status transitions.

Functions

This section is empty.

Types

type Campaign

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

Campaign represents a pentest campaign.

func NewCampaign

func NewCampaign(tenantID shared.ID, name string, campaignType CampaignType, priority CampaignPriority) (*Campaign, error)

NewCampaign creates a new pentest campaign.

func ReconstituteCampaign

func ReconstituteCampaign(
	id, tenantID shared.ID,
	name, description string,
	campaignType CampaignType, status CampaignStatus, priority CampaignPriority,
	scopeItems []map[string]any, rulesOfEngagement map[string]any,
	methodology string, startDate, endDate *time.Time,
	leadUserID *shared.ID, teamUserIDs, objectives []string,
	clientName, clientContact string,
	assetIDs, assetGroupIDs, tags []string,
	metadata map[string]any,
	createdAt, updatedAt time.Time, createdBy *shared.ID,
) *Campaign

ReconstituteCampaign creates a Campaign from persisted data.

func (*Campaign) AssetGroupIDs

func (c *Campaign) AssetGroupIDs() []string

func (*Campaign) AssetIDs

func (c *Campaign) AssetIDs() []string

func (*Campaign) CampaignType

func (c *Campaign) CampaignType() CampaignType

func (*Campaign) ClientContact

func (c *Campaign) ClientContact() string

func (*Campaign) ClientName

func (c *Campaign) ClientName() string

func (*Campaign) CreatedAt

func (c *Campaign) CreatedAt() time.Time

func (*Campaign) CreatedBy

func (c *Campaign) CreatedBy() *shared.ID

func (*Campaign) Description

func (c *Campaign) Description() string

func (*Campaign) EndDate

func (c *Campaign) EndDate() *time.Time

func (*Campaign) ID

func (c *Campaign) ID() shared.ID

Getters

func (*Campaign) LeadUserID

func (c *Campaign) LeadUserID() *shared.ID

func (*Campaign) Metadata

func (c *Campaign) Metadata() map[string]any

func (*Campaign) Methodology

func (c *Campaign) Methodology() string

func (*Campaign) Name

func (c *Campaign) Name() string

func (*Campaign) Objectives

func (c *Campaign) Objectives() []string

func (*Campaign) Priority

func (c *Campaign) Priority() CampaignPriority

func (*Campaign) RulesOfEngagement

func (c *Campaign) RulesOfEngagement() map[string]any

func (*Campaign) ScopeItems

func (c *Campaign) ScopeItems() []map[string]any

func (*Campaign) SetCreatedBy

func (c *Campaign) SetCreatedBy(userID shared.ID)

SetCreatedBy sets the creator.

func (*Campaign) SetDetails

func (c *Campaign) SetDetails(methodology, clientName, clientContact string, startDate, endDate *time.Time)

SetDetails sets optional detail fields.

func (*Campaign) SetScope

func (c *Campaign) SetScope(scopeItems []map[string]any, rulesOfEngagement map[string]any, objectives []string)

SetScope sets scope-related fields.

func (*Campaign) SetTags

func (c *Campaign) SetTags(tags []string)

SetTags sets campaign tags.

func (*Campaign) SetTeam

func (c *Campaign) SetTeam(leadUserID *shared.ID, teamUserIDs []string, assetIDs, assetGroupIDs []string)

SetTeam sets team and asset assignment fields.

func (*Campaign) StartDate

func (c *Campaign) StartDate() *time.Time

func (*Campaign) Status

func (c *Campaign) Status() CampaignStatus

func (*Campaign) Tags

func (c *Campaign) Tags() []string

func (*Campaign) TeamUserIDs

func (c *Campaign) TeamUserIDs() []string

func (*Campaign) TenantID

func (c *Campaign) TenantID() shared.ID

func (*Campaign) TransitionStatus

func (c *Campaign) TransitionStatus(newStatus CampaignStatus) error

TransitionStatus changes the campaign status with validation.

func (*Campaign) Update

func (c *Campaign) Update(name, description string, campaignType CampaignType, priority CampaignPriority)

Update sets mutable fields on the campaign.

func (*Campaign) UpdatedAt

func (c *Campaign) UpdatedAt() time.Time

type CampaignFilter

type CampaignFilter struct {
	TenantID *shared.ID
	Status   *CampaignStatus
	Type     *CampaignType
	Priority *CampaignPriority
	Search   *string
}

CampaignFilter defines criteria for filtering campaigns.

type CampaignPriority

type CampaignPriority string

CampaignPriority represents the priority of a campaign.

const (
	CampaignPriorityCritical CampaignPriority = "critical"
	CampaignPriorityHigh     CampaignPriority = "high"
	CampaignPriorityMedium   CampaignPriority = "medium"
	CampaignPriorityLow      CampaignPriority = "low"
)

func ParseCampaignPriority

func ParseCampaignPriority(s string) (CampaignPriority, error)

ParseCampaignPriority parses a string to CampaignPriority.

type CampaignRepository

type CampaignRepository interface {
	Create(ctx context.Context, campaign *Campaign) error
	GetByID(ctx context.Context, tenantID, id shared.ID) (*Campaign, error)
	Update(ctx context.Context, campaign *Campaign) error
	Delete(ctx context.Context, tenantID, id shared.ID) error
	List(ctx context.Context, filter CampaignFilter, page pagination.Pagination) (pagination.Result[*Campaign], error)
}

CampaignRepository defines the interface for campaign persistence.

type CampaignStats

type CampaignStats struct {
	TotalFindings    int64   `json:"total_findings"`
	CriticalFindings int64   `json:"critical_findings"`
	HighFindings     int64   `json:"high_findings"`
	MediumFindings   int64   `json:"medium_findings"`
	LowFindings      int64   `json:"low_findings"`
	InfoFindings     int64   `json:"info_findings"`
	Progress         float64 `json:"progress"`
}

CampaignStats holds aggregated campaign statistics.

type CampaignStatus

type CampaignStatus string

CampaignStatus represents the status of a pentest campaign.

const (
	CampaignStatusPlanning   CampaignStatus = "planning"
	CampaignStatusInProgress CampaignStatus = "in_progress"
	CampaignStatusOnHold     CampaignStatus = "on_hold"
	CampaignStatusCompleted  CampaignStatus = "completed"
	CampaignStatusCancelled  CampaignStatus = "cancelled"
)

func ParseCampaignStatus

func ParseCampaignStatus(s string) (CampaignStatus, error)

ParseCampaignStatus parses a string to CampaignStatus.

func ValidCampaignStatuses

func ValidCampaignStatuses() []CampaignStatus

ValidCampaignStatuses returns all valid campaign statuses.

type CampaignType

type CampaignType string

CampaignType represents the type of pentest campaign.

const (
	CampaignTypeExternal          CampaignType = "external"
	CampaignTypeInternal          CampaignType = "internal"
	CampaignTypeWebApp            CampaignType = "web_app"
	CampaignTypeMobile            CampaignType = "mobile"
	CampaignTypeAPI               CampaignType = "api"
	CampaignTypeNetwork           CampaignType = "network"
	CampaignTypeSocialEngineering CampaignType = "social_engineering"
	CampaignTypePhysical          CampaignType = "physical"
	CampaignTypeCloud             CampaignType = "cloud"
	CampaignTypeWireless          CampaignType = "wireless"
)

func ParseCampaignType

func ParseCampaignType(s string) (CampaignType, error)

ParseCampaignType parses a string to CampaignType. Accepts any non-empty string — types are configurable per tenant via settings.

func ValidCampaignTypes

func ValidCampaignTypes() []CampaignType

ValidCampaignTypes returns all valid campaign types.

type Finding

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

Finding represents a manual pentest finding.

func NewFinding

func NewFinding(tenantID, campaignID shared.ID, title string, severity FindingSeverity) (*Finding, error)

NewFinding creates a new pentest finding.

func ReconstituteFinding

func ReconstituteFinding(
	id, tenantID, campaignID shared.ID,
	title, description string, severity FindingSeverity, status FindingStatus,
	cvssScore *float64, cvssVector, cweID, cveID, owaspCategory string,
	affectedAssets, stepsToReproduce []string, pocCode string,
	evidence, requestResponses []map[string]any,
	businessImpact, technicalImpact, remediationGuidance string,
	remediationDeadline *time.Time, referenceURLs []string,
	assignedTo, reviewedBy *shared.ID,
	tags []string, metadata map[string]any,
	createdAt, updatedAt time.Time, createdBy *shared.ID,
) *Finding

ReconstituteFinding creates a Finding from persisted data.

func (*Finding) AffectedAssets

func (f *Finding) AffectedAssets() []string

func (*Finding) AssignedTo

func (f *Finding) AssignedTo() *shared.ID

func (*Finding) BusinessImpact

func (f *Finding) BusinessImpact() string

func (*Finding) CVEID

func (f *Finding) CVEID() string

func (*Finding) CVSSScore

func (f *Finding) CVSSScore() *float64

func (*Finding) CVSSVector

func (f *Finding) CVSSVector() string

func (*Finding) CWEID

func (f *Finding) CWEID() string

func (*Finding) CampaignID

func (f *Finding) CampaignID() shared.ID

func (*Finding) CreatedAt

func (f *Finding) CreatedAt() time.Time

func (*Finding) CreatedBy

func (f *Finding) CreatedBy() *shared.ID

func (*Finding) Description

func (f *Finding) Description() string

func (*Finding) Evidence

func (f *Finding) Evidence() []map[string]any

func (*Finding) ID

func (f *Finding) ID() shared.ID

Getters

func (*Finding) MarkUpdated

func (f *Finding) MarkUpdated()

MarkUpdated sets the updated timestamp.

func (*Finding) Metadata

func (f *Finding) Metadata() map[string]any

func (*Finding) OWASPCategory

func (f *Finding) OWASPCategory() string

func (*Finding) PoCCode

func (f *Finding) PoCCode() string

func (*Finding) ReferenceURLs

func (f *Finding) ReferenceURLs() []string

func (*Finding) RemediationDeadline

func (f *Finding) RemediationDeadline() *time.Time

func (*Finding) RemediationGuidance

func (f *Finding) RemediationGuidance() string

func (*Finding) RequestResponses

func (f *Finding) RequestResponses() []map[string]any

func (*Finding) ReviewedBy

func (f *Finding) ReviewedBy() *shared.ID

func (*Finding) SetAssignedTo

func (f *Finding) SetAssignedTo(userID *shared.ID)

SetAssignedTo assigns the finding to a user.

func (*Finding) SetCreatedBy

func (f *Finding) SetCreatedBy(userID shared.ID)

SetCreatedBy sets the creator.

func (*Finding) SetReviewedBy

func (f *Finding) SetReviewedBy(userID *shared.ID)

SetReviewedBy sets the reviewer.

func (*Finding) Severity

func (f *Finding) Severity() FindingSeverity

func (*Finding) Status

func (f *Finding) Status() FindingStatus

func (*Finding) StepsToReproduce

func (f *Finding) StepsToReproduce() []string

func (*Finding) Tags

func (f *Finding) Tags() []string

func (*Finding) TechnicalImpact

func (f *Finding) TechnicalImpact() string

func (*Finding) TenantID

func (f *Finding) TenantID() shared.ID

func (*Finding) Title

func (f *Finding) Title() string

func (*Finding) TransitionStatus

func (f *Finding) TransitionStatus(newStatus FindingStatus) error

TransitionStatus changes finding status with validation.

func (*Finding) UpdatedAt

func (f *Finding) UpdatedAt() time.Time

type FindingFilter

type FindingFilter struct {
	TenantID   *shared.ID
	CampaignID *shared.ID
	Severity   *FindingSeverity
	Status     *FindingStatus
	Search     *string
}

FindingFilter defines criteria for filtering pentest findings.

type FindingRepository

type FindingRepository interface {
	Create(ctx context.Context, finding *Finding) error
	GetByID(ctx context.Context, tenantID, id shared.ID) (*Finding, error)
	Update(ctx context.Context, finding *Finding) error
	Delete(ctx context.Context, tenantID, id shared.ID) error
	List(ctx context.Context, filter FindingFilter, page pagination.Pagination) (pagination.Result[*Finding], error)
	CountByCampaign(ctx context.Context, tenantID, campaignID shared.ID) (int64, error)
	GetStatsByCampaign(ctx context.Context, tenantID, campaignID shared.ID) (*CampaignStats, error)
	GetStatsByCampaignIDs(ctx context.Context, tenantID shared.ID, campaignIDs []shared.ID) (map[string]*CampaignStats, error)
}

FindingRepository defines the interface for pentest finding persistence.

type FindingSeverity

type FindingSeverity string

FindingSeverity represents the severity of a pentest finding.

const (
	FindingSeverityCritical FindingSeverity = "critical"
	FindingSeverityHigh     FindingSeverity = "high"
	FindingSeverityMedium   FindingSeverity = "medium"
	FindingSeverityLow      FindingSeverity = "low"
	FindingSeverityInfo     FindingSeverity = "info"
)

func ParseFindingSeverity

func ParseFindingSeverity(s string) (FindingSeverity, error)

ParseFindingSeverity parses a string to FindingSeverity.

type FindingStatus

type FindingStatus string

FindingStatus represents the status of a pentest finding.

const (
	FindingStatusDraft         FindingStatus = "draft"
	FindingStatusInReview      FindingStatus = "in_review"
	FindingStatusConfirmed     FindingStatus = "confirmed"
	FindingStatusRemediation   FindingStatus = "remediation"
	FindingStatusRetest        FindingStatus = "retest"
	FindingStatusVerified      FindingStatus = "verified"
	FindingStatusFalsePositive FindingStatus = "false_positive"
	FindingStatusAcceptedRisk  FindingStatus = "accepted_risk"
)

func ParseFindingStatus

func ParseFindingStatus(s string) (FindingStatus, error)

ParseFindingStatus parses a string to FindingStatus.

func ValidFindingStatuses

func ValidFindingStatuses() []FindingStatus

ValidFindingStatuses returns all valid finding statuses.

type Report

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

Report represents a generated pentest report.

func NewReport

func NewReport(tenantID, campaignID shared.ID, name string, reportType ReportType, format ReportFormat) *Report

NewReport creates a new pentest report.

func ReconstituteReport

func ReconstituteReport(
	id, tenantID, campaignID shared.ID,
	name string, reportType ReportType, format ReportFormat, status ReportStatus,
	options map[string]any, fileSize int64, downloadURL string,
	generatedAt *time.Time, errorMessage string,
	createdAt time.Time, createdBy *shared.ID,
) *Report

ReconstituteReport creates a Report from persisted data.

func (*Report) CampaignID

func (r *Report) CampaignID() shared.ID

func (*Report) CreatedAt

func (r *Report) CreatedAt() time.Time

func (*Report) CreatedBy

func (r *Report) CreatedBy() *shared.ID

func (*Report) DownloadURL

func (r *Report) DownloadURL() string

func (*Report) ErrorMessage

func (r *Report) ErrorMessage() string

func (*Report) FileSize

func (r *Report) FileSize() int64

func (*Report) Format

func (r *Report) Format() ReportFormat

func (*Report) GeneratedAt

func (r *Report) GeneratedAt() *time.Time

func (*Report) ID

func (r *Report) ID() shared.ID

Getters

func (*Report) MarkCompleted

func (r *Report) MarkCompleted(downloadURL string, fileSize int64)

MarkCompleted sets the report as completed.

func (*Report) MarkFailed

func (r *Report) MarkFailed(errorMessage string)

MarkFailed sets the report as failed.

func (*Report) MarkGenerating

func (r *Report) MarkGenerating()

MarkGenerating sets the report to generating status.

func (*Report) Name

func (r *Report) Name() string

func (*Report) Options

func (r *Report) Options() map[string]any

func (*Report) ReportType

func (r *Report) ReportType() ReportType

func (*Report) SetCreatedBy

func (r *Report) SetCreatedBy(userID shared.ID)

SetCreatedBy sets the creator.

func (*Report) SetOptions

func (r *Report) SetOptions(options map[string]any)

SetOptions sets report generation options.

func (*Report) Status

func (r *Report) Status() ReportStatus

func (*Report) TenantID

func (r *Report) TenantID() shared.ID

type ReportFilter

type ReportFilter struct {
	TenantID   *shared.ID
	CampaignID *shared.ID
	Type       *ReportType
	Format     *ReportFormat
	Status     *ReportStatus
}

ReportFilter defines criteria for filtering reports.

type ReportFormat

type ReportFormat string

ReportFormat represents the file format of a report.

const (
	ReportFormatPDF  ReportFormat = "pdf"
	ReportFormatDOCX ReportFormat = "docx"
	ReportFormatXLSX ReportFormat = "xlsx"
	ReportFormatHTML ReportFormat = "html"
	ReportFormatJSON ReportFormat = "json"
)

func ParseReportFormat

func ParseReportFormat(s string) (ReportFormat, error)

ParseReportFormat parses a string to ReportFormat.

type ReportRepository

type ReportRepository interface {
	Create(ctx context.Context, report *Report) error
	GetByID(ctx context.Context, tenantID, id shared.ID) (*Report, error)
	Update(ctx context.Context, report *Report) error
	Delete(ctx context.Context, tenantID, id shared.ID) error
	List(ctx context.Context, filter ReportFilter, page pagination.Pagination) (pagination.Result[*Report], error)
}

ReportRepository defines the interface for report persistence.

type ReportStatus

type ReportStatus string

ReportStatus represents the status of report generation.

const (
	ReportStatusDraft      ReportStatus = "draft"
	ReportStatusGenerating ReportStatus = "generating"
	ReportStatusCompleted  ReportStatus = "completed"
	ReportStatusFailed     ReportStatus = "failed"
)

type ReportType

type ReportType string

ReportType represents the type of pentest report.

const (
	ReportTypeExecutiveSummary ReportType = "executive_summary"
	ReportTypeTechnical        ReportType = "technical_report"
	ReportTypeFinding          ReportType = "finding_report"
	ReportTypeCompliance       ReportType = "compliance_report"
	ReportTypeRemediation      ReportType = "remediation_report"
	ReportTypeRetest           ReportType = "retest_report"
)

func ParseReportType

func ParseReportType(s string) (ReportType, error)

ParseReportType parses a string to ReportType.

type Retest

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

Retest represents a verification retest of a pentest finding.

func NewRetest

func NewRetest(tenantID, findingID shared.ID) *Retest

NewRetest creates a new retest.

func ReconstituteRetest

func ReconstituteRetest(
	id, tenantID, findingID shared.ID,
	status RetestStatus, notes string, evidence []map[string]any,
	testedBy *shared.ID, testedAt *time.Time, createdAt time.Time,
) *Retest

ReconstituteRetest creates a Retest from persisted data.

func (*Retest) Complete

func (r *Retest) Complete(status RetestStatus, notes string, testedBy shared.ID)

Complete records the retest result.

func (*Retest) CreatedAt

func (r *Retest) CreatedAt() time.Time

func (*Retest) Evidence

func (r *Retest) Evidence() []map[string]any

func (*Retest) FindingID

func (r *Retest) FindingID() shared.ID

func (*Retest) ID

func (r *Retest) ID() shared.ID

Getters

func (*Retest) Notes

func (r *Retest) Notes() string

func (*Retest) SetEvidence

func (r *Retest) SetEvidence(evidence []map[string]any)

SetEvidence sets retest evidence.

func (*Retest) Status

func (r *Retest) Status() RetestStatus

func (*Retest) TenantID

func (r *Retest) TenantID() shared.ID

func (*Retest) TestedAt

func (r *Retest) TestedAt() *time.Time

func (*Retest) TestedBy

func (r *Retest) TestedBy() *shared.ID

type RetestFilter

type RetestFilter struct {
	TenantID  *shared.ID
	FindingID *shared.ID
	Status    *RetestStatus
}

RetestFilter defines criteria for filtering retests.

type RetestRepository

type RetestRepository interface {
	Create(ctx context.Context, retest *Retest) error
	GetByID(ctx context.Context, tenantID, id shared.ID) (*Retest, error)
	Update(ctx context.Context, retest *Retest) error
	ListByFinding(ctx context.Context, tenantID, findingID shared.ID) ([]*Retest, error)
	CountByFinding(ctx context.Context, tenantID, findingID shared.ID) (int64, error)
}

RetestRepository defines the interface for retest persistence.

type RetestStatus

type RetestStatus string

RetestStatus represents the status of a retest.

const (
	RetestStatusPending    RetestStatus = "pending"
	RetestStatusInProgress RetestStatus = "in_progress"
	RetestStatusPassed     RetestStatus = "passed"
	RetestStatusFailed     RetestStatus = "failed"
	RetestStatusPartial    RetestStatus = "partial"
	RetestStatusCancelled  RetestStatus = "cancelled"
)

func ParseRetestStatus

func ParseRetestStatus(s string) (RetestStatus, error)

ParseRetestStatus parses a string to RetestStatus.

type Template

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

Template represents a reusable finding template.

func NewTemplate

func NewTemplate(tenantID shared.ID, name string, severity FindingSeverity) (*Template, error)

NewTemplate creates a new custom finding template.

func ReconstituteTemplate

func ReconstituteTemplate(
	id shared.ID, tenantID *shared.ID,
	name string, category TemplateCategory, severity FindingSeverity,
	owaspCategory, cweID, description string,
	stepsToReproduce []string, businessImpact, technicalImpact, remediation string,
	referenceURLs, tags []string, isSystem bool, usageCount int,
	createdAt, updatedAt time.Time, createdBy *shared.ID,
) *Template

ReconstituteTemplate creates a Template from persisted data.

func (*Template) BusinessImpact

func (t *Template) BusinessImpact() string

func (*Template) CWEID

func (t *Template) CWEID() string

func (*Template) Category

func (t *Template) Category() TemplateCategory

func (*Template) CreatedAt

func (t *Template) CreatedAt() time.Time

func (*Template) CreatedBy

func (t *Template) CreatedBy() *shared.ID

func (*Template) Description

func (t *Template) Description() string

func (*Template) ID

func (t *Template) ID() shared.ID

Getters

func (*Template) IncrementUsage

func (t *Template) IncrementUsage()

IncrementUsage increments the usage counter.

func (*Template) IsSystem

func (t *Template) IsSystem() bool

func (*Template) Name

func (t *Template) Name() string

func (*Template) OWASPCategory

func (t *Template) OWASPCategory() string

func (*Template) ReferenceURLs

func (t *Template) ReferenceURLs() []string

func (*Template) Remediation

func (t *Template) Remediation() string

func (*Template) SetBusinessImpact

func (t *Template) SetBusinessImpact(b string)

SetBusinessImpact sets the business impact text.

func (*Template) SetCWEID

func (t *Template) SetCWEID(c string)

SetCWEID sets the CWE identifier.

func (*Template) SetCategory

func (t *Template) SetCategory(c TemplateCategory)

SetCategory sets the template category.

func (*Template) SetDescription

func (t *Template) SetDescription(d string)

SetDescription sets the description.

func (*Template) SetOWASPCategory

func (t *Template) SetOWASPCategory(o string)

SetOWASPCategory sets the OWASP category.

func (*Template) SetReferenceURLs

func (t *Template) SetReferenceURLs(urls []string)

SetReferenceURLs sets the reference URLs.

func (*Template) SetRemediation

func (t *Template) SetRemediation(r string)

SetRemediation sets the remediation guidance.

func (*Template) SetStepsToReproduce

func (t *Template) SetStepsToReproduce(s []string)

SetStepsToReproduce sets steps to reproduce.

func (*Template) SetTags

func (t *Template) SetTags(tags []string)

SetTags sets the tags.

func (*Template) SetTechnicalImpact

func (t *Template) SetTechnicalImpact(ti string)

SetTechnicalImpact sets the technical impact text.

func (*Template) Severity

func (t *Template) Severity() FindingSeverity

func (*Template) StepsToReproduce

func (t *Template) StepsToReproduce() []string

func (*Template) Tags

func (t *Template) Tags() []string

func (*Template) TechnicalImpact

func (t *Template) TechnicalImpact() string

func (*Template) TenantID

func (t *Template) TenantID() *shared.ID

func (*Template) Update

func (t *Template) Update(name string, category TemplateCategory, severity FindingSeverity) error

Update sets mutable fields. Returns error if system template.

func (*Template) UpdatedAt

func (t *Template) UpdatedAt() time.Time

func (*Template) UsageCount

func (t *Template) UsageCount() int

type TemplateCategory

type TemplateCategory string

TemplateCategory represents the category of a finding template.

const (
	TemplateCategoryInjection       TemplateCategory = "injection"
	TemplateCategoryAuthentication  TemplateCategory = "authentication"
	TemplateCategoryAuthorization   TemplateCategory = "authorization"
	TemplateCategoryCryptographic   TemplateCategory = "cryptographic"
	TemplateCategoryConfiguration   TemplateCategory = "configuration"
	TemplateCategoryDisclosure      TemplateCategory = "disclosure"
	TemplateCategorySession         TemplateCategory = "session"
	TemplateCategoryInputValidation TemplateCategory = "input_validation"
	TemplateCategoryLogic           TemplateCategory = "logic"
	TemplateCategoryOther           TemplateCategory = "other"
)

func ParseTemplateCategory

func ParseTemplateCategory(s string) (TemplateCategory, error)

ParseTemplateCategory parses a string to TemplateCategory. Returns empty string (valid) if input is empty.

type TemplateFilter

type TemplateFilter struct {
	TenantID *shared.ID
	Category *TemplateCategory
	Severity *FindingSeverity
	IsSystem *bool
	Search   *string
}

TemplateFilter defines criteria for filtering templates.

type TemplateRepository

type TemplateRepository interface {
	Create(ctx context.Context, template *Template) error
	GetByID(ctx context.Context, tenantID, id shared.ID) (*Template, error)
	Update(ctx context.Context, tenantID shared.ID, template *Template) error
	Delete(ctx context.Context, tenantID, id shared.ID) error
	List(ctx context.Context, filter TemplateFilter, page pagination.Pagination) (pagination.Result[*Template], error)
	IncrementUsageCount(ctx context.Context, tenantID, id shared.ID) error
}

TemplateRepository defines the interface for template persistence.

Jump to

Keyboard shortcuts

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