builder

package
v1.2.2 Latest Latest
Warning

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

Go to latest
Published: Feb 12, 2026 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Overview

Package builder provides programmatic report building functionality for OPNsense configurations.

Package builder provides programmatic report building functionality for OPNsense configurations.

Index

Constants

This section is empty.

Variables

View Source
var ErrNilOpnSenseDocument = errors.New("input OpnSenseDocument struct is nil")

ErrNilOpnSenseDocument is returned when the input OpnSenseDocument is nil.

Functions

func BuildDHCPStaticLeasesTableSet

func BuildDHCPStaticLeasesTableSet(leases []model.DHCPStaticLease) *markdown.TableSet

BuildDHCPStaticLeasesTableSet builds the table data for static DHCP leases.

func BuildDHCPSummaryTableSet

func BuildDHCPSummaryTableSet(dhcpd model.Dhcpd) *markdown.TableSet

BuildDHCPSummaryTableSet builds the table data for DHCP scope summary.

func BuildFirewallRulesTableSet

func BuildFirewallRulesTableSet(rules []model.Rule) *markdown.TableSet

BuildFirewallRulesTableSet builds the table data for firewall rules.

func BuildGroupTableSet

func BuildGroupTableSet(groups []model.Group) *markdown.TableSet

BuildGroupTableSet builds the table data for system groups.

func BuildInboundNATTableSet

func BuildInboundNATTableSet(rules []model.InboundRule) *markdown.TableSet

BuildInboundNATTableSet builds the table data for inbound NAT rules.

func BuildInterfaceTableSet

func BuildInterfaceTableSet(interfaces model.Interfaces) *markdown.TableSet

BuildInterfaceTableSet builds the table data for network interfaces.

func BuildOutboundNATTableSet

func BuildOutboundNATTableSet(rules []model.NATRule) *markdown.TableSet

BuildOutboundNATTableSet builds the table data for outbound NAT rules.

func BuildStaticRoutesTableSet

func BuildStaticRoutesTableSet(routes []model.StaticRoute) *markdown.TableSet

BuildStaticRoutesTableSet builds the table data for static routes.

func BuildSysctlTableSet

func BuildSysctlTableSet(sysctl []model.SysctlItem) *markdown.TableSet

BuildSysctlTableSet builds the table data for system tunables.

func BuildUserTableSet

func BuildUserTableSet(users []model.User) *markdown.TableSet

BuildUserTableSet builds the table data for system users.

func BuildVLANTableSet

func BuildVLANTableSet(vlans []model.VLAN) *markdown.TableSet

BuildVLANTableSet builds the table data for VLAN configurations.

func FormatLeaseTime

func FormatLeaseTime(seconds string) string

FormatLeaseTime converts DHCP lease time seconds to human-readable format. Empty string or "0" returns "-". Invalid input returns the original string. Examples:

  • "" → "-"
  • "0" → "-"
  • "3600" → "1 hour"
  • "7200" → "2 hours"
  • "86400" → "1 day"
  • "172800" → "2 days"
  • "604800" → "1 week"
  • "1209600" → "2 weeks"
  • "5400" → "1 hour, 30 minutes"

func HasAdvancedDHCPConfig

func HasAdvancedDHCPConfig(dhcp model.DhcpdInterface) bool

HasAdvancedDHCPConfig checks if any AdvDHCP* fields are populated in a DhcpdInterface. This includes: AliasAddress, AliasSubnet, DHCPRejectFrom, and all AdvDHCP* fields.

func HasDHCPv6Config

func HasDHCPv6Config(dhcp model.DhcpdInterface) bool

HasDHCPv6Config checks if any DHCPv6 fields are populated in a DhcpdInterface. This includes: Track6Interface, Track6PrefixID, and all AdvDHCP6* fields.

Types

type MarkdownBuilder

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

MarkdownBuilder implements the ReportBuilder interface with comprehensive programmatic markdown generation capabilities.

func NewMarkdownBuilder

func NewMarkdownBuilder() *MarkdownBuilder

NewMarkdownBuilder creates a new MarkdownBuilder instance.

func NewMarkdownBuilderWithConfig

func NewMarkdownBuilderWithConfig(config *model.OpnSenseDocument, logger *log.Logger) *MarkdownBuilder

NewMarkdownBuilderWithConfig creates a new MarkdownBuilder instance with configuration.

func (*MarkdownBuilder) AggregatePackageStats

func (b *MarkdownBuilder) AggregatePackageStats(packages []model.Package) map[string]int

AggregatePackageStats aggregates statistics about packages.

func (*MarkdownBuilder) AssessRiskLevel

func (b *MarkdownBuilder) AssessRiskLevel(severity string) string

AssessRiskLevel returns a consistent emoji + text representation.

func (*MarkdownBuilder) AssessServiceRisk

func (b *MarkdownBuilder) AssessServiceRisk(service model.Service) string

AssessServiceRisk maps common services to risk levels.

func (*MarkdownBuilder) BoolToString

func (b *MarkdownBuilder) BoolToString(val bool) string

BoolToString converts a boolean value to a standardized string representation with emojis.

func (*MarkdownBuilder) BuildComprehensiveReport

func (b *MarkdownBuilder) BuildComprehensiveReport(data *model.OpnSenseDocument) (string, error)

BuildComprehensiveReport builds a comprehensive markdown report.

func (*MarkdownBuilder) BuildHASection

func (b *MarkdownBuilder) BuildHASection(data *model.OpnSenseDocument) string

BuildHASection builds the High Availability and CARP configuration section.

func (*MarkdownBuilder) BuildIDSSection added in v1.2.0

func (b *MarkdownBuilder) BuildIDSSection(data *model.OpnSenseDocument) string

BuildIDSSection builds the IDS/Suricata configuration section.

func (*MarkdownBuilder) BuildIPsecSection

func (b *MarkdownBuilder) BuildIPsecSection(data *model.OpnSenseDocument) string

BuildIPsecSection builds the IPsec VPN configuration section.

func (*MarkdownBuilder) BuildNetworkSection

func (b *MarkdownBuilder) BuildNetworkSection(data *model.OpnSenseDocument) string

BuildNetworkSection builds the network configuration section.

func (*MarkdownBuilder) BuildOpenVPNSection

func (b *MarkdownBuilder) BuildOpenVPNSection(data *model.OpnSenseDocument) string

BuildOpenVPNSection builds the OpenVPN configuration section with servers, clients, and CSC.

func (*MarkdownBuilder) BuildSecuritySection

func (b *MarkdownBuilder) BuildSecuritySection(data *model.OpnSenseDocument) string

BuildSecuritySection builds the security configuration section.

func (*MarkdownBuilder) BuildServicesSection

func (b *MarkdownBuilder) BuildServicesSection(data *model.OpnSenseDocument) string

BuildServicesSection builds the service configuration section.

func (*MarkdownBuilder) BuildStandardReport

func (b *MarkdownBuilder) BuildStandardReport(data *model.OpnSenseDocument) (string, error)

BuildStandardReport builds a standard markdown report.

func (*MarkdownBuilder) BuildSystemSection

func (b *MarkdownBuilder) BuildSystemSection(data *model.OpnSenseDocument) string

BuildSystemSection builds the system configuration section.

func (*MarkdownBuilder) CalculateSecurityScore

func (b *MarkdownBuilder) CalculateSecurityScore(data *model.OpnSenseDocument) int

CalculateSecurityScore computes an overall score (0-100).

func (*MarkdownBuilder) DefaultValue

func (b *MarkdownBuilder) DefaultValue(value, defaultVal any) any

DefaultValue returns the default value if the primary value is empty.

func (*MarkdownBuilder) EscapeTableContent

func (b *MarkdownBuilder) EscapeTableContent(content any) string

EscapeTableContent escapes content for safe display in markdown tables.

func (*MarkdownBuilder) ExtractUniqueValues

func (b *MarkdownBuilder) ExtractUniqueValues(items []string) []string

ExtractUniqueValues extracts unique values from a slice of strings.

func (*MarkdownBuilder) FilterRulesByType

func (b *MarkdownBuilder) FilterRulesByType(rules []model.Rule, ruleType string) []model.Rule

FilterRulesByType filters firewall rules by their type.

func (*MarkdownBuilder) FilterSystemTunables

func (b *MarkdownBuilder) FilterSystemTunables(tunables []model.SysctlItem, includeTunables bool) []model.SysctlItem

FilterSystemTunables filters system tunables based on security-related prefixes.

func (*MarkdownBuilder) FormatBytes

func (b *MarkdownBuilder) FormatBytes(bytes int64) string

FormatBytes formats a byte count as a human-readable string.

func (*MarkdownBuilder) GroupServicesByStatus

func (b *MarkdownBuilder) GroupServicesByStatus(services []model.Service) map[string][]model.Service

GroupServicesByStatus groups services by their status (running/stopped).

func (*MarkdownBuilder) IsEmpty

func (b *MarkdownBuilder) IsEmpty(value any) bool

IsEmpty checks if a value is considered empty according to Go conventions.

func (*MarkdownBuilder) IsLastInSlice

func (b *MarkdownBuilder) IsLastInSlice(index int, slice any) bool

IsLastInSlice checks if the given index is the last element in a slice or array.

func (*MarkdownBuilder) SanitizeID

func (b *MarkdownBuilder) SanitizeID(s string) string

SanitizeID converts a string to a valid HTML/markdown anchor ID.

func (*MarkdownBuilder) ToLower

func (b *MarkdownBuilder) ToLower(s string) string

ToLower converts a string to lowercase.

func (*MarkdownBuilder) ToUpper

func (b *MarkdownBuilder) ToUpper(s string) string

ToUpper converts a string to uppercase.

func (*MarkdownBuilder) TrimSpace

func (b *MarkdownBuilder) TrimSpace(s string) string

TrimSpace removes leading and trailing whitespace from a string.

func (*MarkdownBuilder) TruncateDescription

func (b *MarkdownBuilder) TruncateDescription(description string, maxLength int) string

TruncateDescription truncates a description to the specified maximum length.

func (*MarkdownBuilder) WriteComprehensiveReport

func (b *MarkdownBuilder) WriteComprehensiveReport(w io.Writer, data *model.OpnSenseDocument) error

WriteComprehensiveReport writes a complete comprehensive report directly to the writer. This provides the same content as BuildComprehensiveReport but with streaming output.

func (*MarkdownBuilder) WriteDHCPStaticLeasesTable

func (b *MarkdownBuilder) WriteDHCPStaticLeasesTable(
	md *markdown.Markdown,
	leases []model.DHCPStaticLease,
) *markdown.Markdown

WriteDHCPStaticLeasesTable writes a static DHCP leases table and returns md for chaining.

func (*MarkdownBuilder) WriteDHCPSummaryTable

func (b *MarkdownBuilder) WriteDHCPSummaryTable(md *markdown.Markdown, dhcpd model.Dhcpd) *markdown.Markdown

WriteDHCPSummaryTable writes a DHCP scope summary table and returns md for chaining.

func (*MarkdownBuilder) WriteFirewallRulesTable

func (b *MarkdownBuilder) WriteFirewallRulesTable(md *markdown.Markdown, rules []model.Rule) *markdown.Markdown

WriteFirewallRulesTable writes a firewall rules table and returns md for chaining.

func (*MarkdownBuilder) WriteGroupTable

func (b *MarkdownBuilder) WriteGroupTable(md *markdown.Markdown, groups []model.Group) *markdown.Markdown

WriteGroupTable writes a groups table and returns md for chaining.

func (*MarkdownBuilder) WriteInboundNATTable

func (b *MarkdownBuilder) WriteInboundNATTable(md *markdown.Markdown, rules []model.InboundRule) *markdown.Markdown

WriteInboundNATTable writes an inbound NAT rules table and returns md for chaining.

func (*MarkdownBuilder) WriteInterfaceTable

func (b *MarkdownBuilder) WriteInterfaceTable(md *markdown.Markdown, interfaces model.Interfaces) *markdown.Markdown

WriteInterfaceTable writes an interfaces table and returns md for chaining.

func (*MarkdownBuilder) WriteNetworkSection

func (b *MarkdownBuilder) WriteNetworkSection(w io.Writer, data *model.OpnSenseDocument) error

WriteNetworkSection writes the network configuration section directly to the writer.

func (*MarkdownBuilder) WriteOutboundNATTable

func (b *MarkdownBuilder) WriteOutboundNATTable(md *markdown.Markdown, rules []model.NATRule) *markdown.Markdown

WriteOutboundNATTable writes an outbound NAT rules table and returns md for chaining.

func (*MarkdownBuilder) WriteSecuritySection

func (b *MarkdownBuilder) WriteSecuritySection(w io.Writer, data *model.OpnSenseDocument) error

WriteSecuritySection writes the security configuration section directly to the writer.

func (*MarkdownBuilder) WriteServicesSection

func (b *MarkdownBuilder) WriteServicesSection(w io.Writer, data *model.OpnSenseDocument) error

WriteServicesSection writes the services configuration section directly to the writer.

func (*MarkdownBuilder) WriteStandardReport

func (b *MarkdownBuilder) WriteStandardReport(w io.Writer, data *model.OpnSenseDocument) error

WriteStandardReport writes a complete standard report directly to the writer. Unlike BuildStandardReport which returns a string, this method streams output section-by-section, reducing peak memory usage for large configurations.

func (*MarkdownBuilder) WriteStaticRoutesTable

func (b *MarkdownBuilder) WriteStaticRoutesTable(md *markdown.Markdown, routes []model.StaticRoute) *markdown.Markdown

WriteStaticRoutesTable writes a static routes table and returns md for chaining.

func (*MarkdownBuilder) WriteSysctlTable

func (b *MarkdownBuilder) WriteSysctlTable(md *markdown.Markdown, sysctl []model.SysctlItem) *markdown.Markdown

WriteSysctlTable writes a sysctl tunables table and returns md for chaining.

func (*MarkdownBuilder) WriteSystemSection

func (b *MarkdownBuilder) WriteSystemSection(w io.Writer, data *model.OpnSenseDocument) error

WriteSystemSection writes the system configuration section directly to the writer.

func (*MarkdownBuilder) WriteUserTable

func (b *MarkdownBuilder) WriteUserTable(md *markdown.Markdown, users []model.User) *markdown.Markdown

WriteUserTable writes a users table and returns md for chaining.

func (*MarkdownBuilder) WriteVLANTable

func (b *MarkdownBuilder) WriteVLANTable(md *markdown.Markdown, vlans []model.VLAN) *markdown.Markdown

WriteVLANTable writes a VLAN configurations table and returns md for chaining.

type ReportBuilder

type ReportBuilder interface {
	// BuildSystemSection builds the system configuration section.
	BuildSystemSection(data *model.OpnSenseDocument) string
	// BuildNetworkSection builds the network configuration section.
	BuildNetworkSection(data *model.OpnSenseDocument) string
	// BuildSecuritySection builds the security configuration section.
	BuildSecuritySection(data *model.OpnSenseDocument) string
	// BuildServicesSection builds the services configuration section.
	BuildServicesSection(data *model.OpnSenseDocument) string

	// WriteFirewallRulesTable writes a firewall rules table and returns md for chaining.
	WriteFirewallRulesTable(md *markdown.Markdown, rules []model.Rule) *markdown.Markdown
	// WriteInterfaceTable writes an interfaces table and returns md for chaining.
	WriteInterfaceTable(md *markdown.Markdown, interfaces model.Interfaces) *markdown.Markdown
	// WriteUserTable writes a users table and returns md for chaining.
	WriteUserTable(md *markdown.Markdown, users []model.User) *markdown.Markdown
	// WriteGroupTable writes a groups table and returns md for chaining.
	WriteGroupTable(md *markdown.Markdown, groups []model.Group) *markdown.Markdown
	// WriteSysctlTable writes a sysctl tunables table and returns md for chaining.
	WriteSysctlTable(md *markdown.Markdown, sysctl []model.SysctlItem) *markdown.Markdown
	// WriteOutboundNATTable writes an outbound NAT rules table and returns md for chaining.
	WriteOutboundNATTable(md *markdown.Markdown, rules []model.NATRule) *markdown.Markdown
	// WriteInboundNATTable writes an inbound NAT/port forward rules table and returns md for chaining.
	WriteInboundNATTable(md *markdown.Markdown, rules []model.InboundRule) *markdown.Markdown
	// WriteVLANTable writes a VLAN configurations table and returns md for chaining.
	WriteVLANTable(md *markdown.Markdown, vlans []model.VLAN) *markdown.Markdown
	// WriteStaticRoutesTable writes a static routes table and returns md for chaining.
	WriteStaticRoutesTable(md *markdown.Markdown, routes []model.StaticRoute) *markdown.Markdown
	// WriteDHCPSummaryTable writes a DHCP summary table and returns md for chaining.
	WriteDHCPSummaryTable(md *markdown.Markdown, dhcpd model.Dhcpd) *markdown.Markdown
	// WriteDHCPStaticLeasesTable writes a static leases table and returns md for chaining.
	WriteDHCPStaticLeasesTable(md *markdown.Markdown, leases []model.DHCPStaticLease) *markdown.Markdown

	// BuildIPsecSection builds the IPsec VPN configuration section.
	BuildIPsecSection(data *model.OpnSenseDocument) string
	// BuildOpenVPNSection builds the OpenVPN configuration section.
	BuildOpenVPNSection(data *model.OpnSenseDocument) string
	// BuildHASection builds the High Availability and CARP configuration section.
	BuildHASection(data *model.OpnSenseDocument) string
	// BuildIDSSection builds the IDS/Suricata configuration section.
	BuildIDSSection(data *model.OpnSenseDocument) string

	// BuildStandardReport generates a standard configuration report.
	BuildStandardReport(data *model.OpnSenseDocument) (string, error)
	// BuildComprehensiveReport generates a comprehensive configuration report.
	BuildComprehensiveReport(data *model.OpnSenseDocument) (string, error)
}

ReportBuilder interface defines the contract for programmatic report generation. This provides type-safe, compile-time guaranteed markdown generation.

type SectionWriter

type SectionWriter interface {
	// WriteSystemSection writes the system configuration section to the writer.
	WriteSystemSection(w io.Writer, data *model.OpnSenseDocument) error

	// WriteNetworkSection writes the network configuration section to the writer.
	WriteNetworkSection(w io.Writer, data *model.OpnSenseDocument) error

	// WriteSecuritySection writes the security configuration section to the writer.
	WriteSecuritySection(w io.Writer, data *model.OpnSenseDocument) error

	// WriteServicesSection writes the services configuration section to the writer.
	WriteServicesSection(w io.Writer, data *model.OpnSenseDocument) error

	// WriteStandardReport writes a complete standard report to the writer.
	WriteStandardReport(w io.Writer, data *model.OpnSenseDocument) error

	// WriteComprehensiveReport writes a complete comprehensive report to the writer.
	WriteComprehensiveReport(w io.Writer, data *model.OpnSenseDocument) error
}

SectionWriter defines the interface for streaming report generation. This interface enables memory-efficient output by writing sections directly to an io.Writer instead of accumulating strings in memory.

Implementations should write each section immediately, allowing for: - Lower memory footprint for large configurations - Faster time-to-first-byte for output - Better support for piping to other tools.

Jump to

Keyboard shortcuts

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