Documentation
¶
Overview ¶
Package pentest defines the Pentest Campaign Management domain types.
Index ¶
- Variables
- type Campaign
- func (c *Campaign) AssetGroupIDs() []string
- func (c *Campaign) AssetIDs() []string
- func (c *Campaign) CampaignType() CampaignType
- func (c *Campaign) ClientContact() string
- func (c *Campaign) ClientName() string
- func (c *Campaign) CreatedAt() time.Time
- func (c *Campaign) CreatedBy() *shared.ID
- func (c *Campaign) Description() string
- func (c *Campaign) EndDate() *time.Time
- func (c *Campaign) ID() shared.ID
- func (c *Campaign) LeadUserID() *shared.ID
- func (c *Campaign) Metadata() map[string]any
- func (c *Campaign) Methodology() string
- func (c *Campaign) Name() string
- func (c *Campaign) Objectives() []string
- func (c *Campaign) Priority() CampaignPriority
- func (c *Campaign) RulesOfEngagement() map[string]any
- func (c *Campaign) ScopeItems() []map[string]any
- func (c *Campaign) SetCreatedBy(userID shared.ID)
- func (c *Campaign) SetDetails(methodology, clientName, clientContact string, startDate, endDate *time.Time)
- func (c *Campaign) SetScope(scopeItems []map[string]any, rulesOfEngagement map[string]any, ...)
- func (c *Campaign) SetTags(tags []string)
- func (c *Campaign) SetTeam(leadUserID *shared.ID, teamUserIDs []string, assetIDs, assetGroupIDs []string)
- func (c *Campaign) StartDate() *time.Time
- func (c *Campaign) Status() CampaignStatus
- func (c *Campaign) Tags() []string
- func (c *Campaign) TeamUserIDs() []string
- func (c *Campaign) TenantID() shared.ID
- func (c *Campaign) TransitionStatus(newStatus CampaignStatus) error
- func (c *Campaign) Update(name, description string, campaignType CampaignType, priority CampaignPriority)
- func (c *Campaign) UpdatedAt() time.Time
- type CampaignFilter
- type CampaignPriority
- type CampaignRepository
- type CampaignStats
- type CampaignStatus
- type CampaignType
- type Finding
- func (f *Finding) AffectedAssets() []string
- func (f *Finding) AssignedTo() *shared.ID
- func (f *Finding) BusinessImpact() string
- func (f *Finding) CVEID() string
- func (f *Finding) CVSSScore() *float64
- func (f *Finding) CVSSVector() string
- func (f *Finding) CWEID() string
- func (f *Finding) CampaignID() shared.ID
- func (f *Finding) CreatedAt() time.Time
- func (f *Finding) CreatedBy() *shared.ID
- func (f *Finding) Description() string
- func (f *Finding) Evidence() []map[string]any
- func (f *Finding) ID() shared.ID
- func (f *Finding) MarkUpdated()
- func (f *Finding) Metadata() map[string]any
- func (f *Finding) OWASPCategory() string
- func (f *Finding) PoCCode() string
- func (f *Finding) ReferenceURLs() []string
- func (f *Finding) RemediationDeadline() *time.Time
- func (f *Finding) RemediationGuidance() string
- func (f *Finding) RequestResponses() []map[string]any
- func (f *Finding) ReviewedBy() *shared.ID
- func (f *Finding) SetAssignedTo(userID *shared.ID)
- func (f *Finding) SetCreatedBy(userID shared.ID)
- func (f *Finding) SetReviewedBy(userID *shared.ID)
- func (f *Finding) Severity() FindingSeverity
- func (f *Finding) Status() FindingStatus
- func (f *Finding) StepsToReproduce() []string
- func (f *Finding) Tags() []string
- func (f *Finding) TechnicalImpact() string
- func (f *Finding) TenantID() shared.ID
- func (f *Finding) Title() string
- func (f *Finding) TransitionStatus(newStatus FindingStatus) error
- func (f *Finding) UpdatedAt() time.Time
- type FindingFilter
- type FindingRepository
- type FindingSeverity
- type FindingStatus
- type Report
- func (r *Report) CampaignID() shared.ID
- func (r *Report) CreatedAt() time.Time
- func (r *Report) CreatedBy() *shared.ID
- func (r *Report) DownloadURL() string
- func (r *Report) ErrorMessage() string
- func (r *Report) FileSize() int64
- func (r *Report) Format() ReportFormat
- func (r *Report) GeneratedAt() *time.Time
- func (r *Report) ID() shared.ID
- func (r *Report) MarkCompleted(downloadURL string, fileSize int64)
- func (r *Report) MarkFailed(errorMessage string)
- func (r *Report) MarkGenerating()
- func (r *Report) Name() string
- func (r *Report) Options() map[string]any
- func (r *Report) ReportType() ReportType
- func (r *Report) SetCreatedBy(userID shared.ID)
- func (r *Report) SetOptions(options map[string]any)
- func (r *Report) Status() ReportStatus
- func (r *Report) TenantID() shared.ID
- type ReportFilter
- type ReportFormat
- type ReportRepository
- type ReportStatus
- type ReportType
- type Retest
- func (r *Retest) Complete(status RetestStatus, notes string, testedBy shared.ID)
- func (r *Retest) CreatedAt() time.Time
- func (r *Retest) Evidence() []map[string]any
- func (r *Retest) FindingID() shared.ID
- func (r *Retest) ID() shared.ID
- func (r *Retest) Notes() string
- func (r *Retest) SetEvidence(evidence []map[string]any)
- func (r *Retest) Status() RetestStatus
- func (r *Retest) TenantID() shared.ID
- func (r *Retest) TestedAt() *time.Time
- func (r *Retest) TestedBy() *shared.ID
- type RetestFilter
- type RetestRepository
- type RetestStatus
- type Template
- func (t *Template) BusinessImpact() string
- func (t *Template) CWEID() string
- func (t *Template) Category() TemplateCategory
- func (t *Template) CreatedAt() time.Time
- func (t *Template) CreatedBy() *shared.ID
- func (t *Template) Description() string
- func (t *Template) ID() shared.ID
- func (t *Template) IncrementUsage()
- func (t *Template) IsSystem() bool
- func (t *Template) Name() string
- func (t *Template) OWASPCategory() string
- func (t *Template) ReferenceURLs() []string
- func (t *Template) Remediation() string
- func (t *Template) SetBusinessImpact(b string)
- func (t *Template) SetCWEID(c string)
- func (t *Template) SetCategory(c TemplateCategory)
- func (t *Template) SetDescription(d string)
- func (t *Template) SetOWASPCategory(o string)
- func (t *Template) SetReferenceURLs(urls []string)
- func (t *Template) SetRemediation(r string)
- func (t *Template) SetStepsToReproduce(s []string)
- func (t *Template) SetTags(tags []string)
- func (t *Template) SetTechnicalImpact(ti string)
- func (t *Template) Severity() FindingSeverity
- func (t *Template) StepsToReproduce() []string
- func (t *Template) Tags() []string
- func (t *Template) TechnicalImpact() string
- func (t *Template) TenantID() *shared.ID
- func (t *Template) Update(name string, category TemplateCategory, severity FindingSeverity) error
- func (t *Template) UpdatedAt() time.Time
- func (t *Template) UsageCount() int
- type TemplateCategory
- type TemplateFilter
- type TemplateRepository
Constants ¶
This section is empty.
Variables ¶
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) )
var CampaignStatusTransitions = map[CampaignStatus][]CampaignStatus{ CampaignStatusPlanning: {CampaignStatusInProgress, CampaignStatusCancelled}, CampaignStatusInProgress: {CampaignStatusOnHold, CampaignStatusCompleted, CampaignStatusCancelled}, CampaignStatusOnHold: {CampaignStatusInProgress, CampaignStatusCancelled}, CampaignStatusCompleted: {}, CampaignStatusCancelled: {}, }
CampaignStatusTransitions defines allowed status transitions.
var FindingStatusTransitions = map[FindingStatus][]FindingStatus{ FindingStatusDraft: {FindingStatusInReview, FindingStatusConfirmed, FindingStatusFalsePositive, FindingStatusAcceptedRisk}, FindingStatusInReview: {FindingStatusConfirmed, FindingStatusFalsePositive, FindingStatusAcceptedRisk}, FindingStatusConfirmed: {FindingStatusRemediation, FindingStatusFalsePositive, FindingStatusAcceptedRisk}, FindingStatusRemediation: {FindingStatusRetest, FindingStatusFalsePositive, FindingStatusAcceptedRisk}, FindingStatusRetest: {FindingStatusVerified, FindingStatusRemediation, FindingStatusFalsePositive, FindingStatusAcceptedRisk}, FindingStatusVerified: {}, FindingStatusFalsePositive: {FindingStatusDraft, FindingStatusConfirmed}, FindingStatusAcceptedRisk: {FindingStatusDraft, FindingStatusConfirmed}, }
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 (*Campaign) CampaignType ¶
func (c *Campaign) CampaignType() CampaignType
func (*Campaign) ClientContact ¶
func (*Campaign) ClientName ¶
func (*Campaign) Description ¶
func (*Campaign) LeadUserID ¶
func (*Campaign) Methodology ¶
func (*Campaign) Objectives ¶
func (*Campaign) Priority ¶
func (c *Campaign) Priority() CampaignPriority
func (*Campaign) RulesOfEngagement ¶
func (*Campaign) ScopeItems ¶
func (*Campaign) SetCreatedBy ¶
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) SetTeam ¶
func (c *Campaign) SetTeam(leadUserID *shared.ID, teamUserIDs []string, assetIDs, assetGroupIDs []string)
SetTeam sets team and asset assignment fields.
func (*Campaign) Status ¶
func (c *Campaign) Status() CampaignStatus
func (*Campaign) TeamUserIDs ¶
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.
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 (*Finding) AssignedTo ¶
func (*Finding) BusinessImpact ¶
func (*Finding) CVSSVector ¶
func (*Finding) CampaignID ¶
func (*Finding) Description ¶
func (*Finding) MarkUpdated ¶
func (f *Finding) MarkUpdated()
MarkUpdated sets the updated timestamp.
func (*Finding) OWASPCategory ¶
func (*Finding) ReferenceURLs ¶
func (*Finding) RemediationDeadline ¶
func (*Finding) RemediationGuidance ¶
func (*Finding) RequestResponses ¶
func (*Finding) ReviewedBy ¶
func (*Finding) SetAssignedTo ¶
SetAssignedTo assigns the finding to a user.
func (*Finding) SetCreatedBy ¶
SetCreatedBy sets the creator.
func (*Finding) SetReviewedBy ¶
SetReviewedBy sets the reviewer.
func (*Finding) Severity ¶
func (f *Finding) Severity() FindingSeverity
func (*Finding) Status ¶
func (f *Finding) Status() FindingStatus
func (*Finding) StepsToReproduce ¶
func (*Finding) TechnicalImpact ¶
func (*Finding) TransitionStatus ¶
func (f *Finding) TransitionStatus(newStatus FindingStatus) error
TransitionStatus changes finding status with validation.
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 (*Report) DownloadURL ¶
func (*Report) ErrorMessage ¶
func (*Report) Format ¶
func (r *Report) Format() ReportFormat
func (*Report) GeneratedAt ¶
func (*Report) MarkCompleted ¶
MarkCompleted sets the report as completed.
func (*Report) MarkFailed ¶
MarkFailed sets the report as failed.
func (*Report) MarkGenerating ¶
func (r *Report) MarkGenerating()
MarkGenerating sets the report to generating status.
func (*Report) ReportType ¶
func (r *Report) ReportType() ReportType
func (*Report) SetCreatedBy ¶
SetCreatedBy sets the creator.
func (*Report) SetOptions ¶
SetOptions sets report generation options.
func (*Report) Status ¶
func (r *Report) Status() ReportStatus
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 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) SetEvidence ¶
SetEvidence sets retest evidence.
func (*Retest) Status ¶
func (r *Retest) Status() RetestStatus
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 ¶
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 (*Template) Category ¶
func (t *Template) Category() TemplateCategory
func (*Template) Description ¶
func (*Template) IncrementUsage ¶
func (t *Template) IncrementUsage()
IncrementUsage increments the usage counter.
func (*Template) OWASPCategory ¶
func (*Template) ReferenceURLs ¶
func (*Template) Remediation ¶
func (*Template) SetBusinessImpact ¶
SetBusinessImpact sets the business impact text.
func (*Template) SetCategory ¶
func (t *Template) SetCategory(c TemplateCategory)
SetCategory sets the template category.
func (*Template) SetDescription ¶
SetDescription sets the description.
func (*Template) SetOWASPCategory ¶
SetOWASPCategory sets the OWASP category.
func (*Template) SetReferenceURLs ¶
SetReferenceURLs sets the reference URLs.
func (*Template) SetRemediation ¶
SetRemediation sets the remediation guidance.
func (*Template) SetStepsToReproduce ¶
SetStepsToReproduce sets steps to reproduce.
func (*Template) SetTechnicalImpact ¶
SetTechnicalImpact sets the technical impact text.
func (*Template) Severity ¶
func (t *Template) Severity() FindingSeverity
func (*Template) StepsToReproduce ¶
func (*Template) TechnicalImpact ¶
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) UsageCount ¶
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.