Documentation
¶
Overview ¶
Package builder provides programmatic report building functionality for OPNsense configurations.
Package builder provides programmatic report building functionality for OPNsense configurations.
Index ¶
- Variables
- func BuildDHCPStaticLeasesTableSet(leases []model.DHCPStaticLease) *markdown.TableSet
- func BuildDHCPSummaryTableSet(dhcpd model.Dhcpd) *markdown.TableSet
- func BuildFirewallRulesTableSet(rules []model.Rule) *markdown.TableSet
- func BuildGroupTableSet(groups []model.Group) *markdown.TableSet
- func BuildInboundNATTableSet(rules []model.InboundRule) *markdown.TableSet
- func BuildInterfaceTableSet(interfaces model.Interfaces) *markdown.TableSet
- func BuildOutboundNATTableSet(rules []model.NATRule) *markdown.TableSet
- func BuildStaticRoutesTableSet(routes []model.StaticRoute) *markdown.TableSet
- func BuildSysctlTableSet(sysctl []model.SysctlItem) *markdown.TableSet
- func BuildUserTableSet(users []model.User) *markdown.TableSet
- func BuildVLANTableSet(vlans []model.VLAN) *markdown.TableSet
- func FormatLeaseTime(seconds string) string
- func HasAdvancedDHCPConfig(dhcp model.DhcpdInterface) bool
- func HasDHCPv6Config(dhcp model.DhcpdInterface) bool
- type MarkdownBuilder
- func (b *MarkdownBuilder) AggregatePackageStats(packages []model.Package) map[string]int
- func (b *MarkdownBuilder) AssessRiskLevel(severity string) string
- func (b *MarkdownBuilder) AssessServiceRisk(service model.Service) string
- func (b *MarkdownBuilder) BoolToString(val bool) string
- func (b *MarkdownBuilder) BuildComprehensiveReport(data *model.OpnSenseDocument) (string, error)
- func (b *MarkdownBuilder) BuildHASection(data *model.OpnSenseDocument) string
- func (b *MarkdownBuilder) BuildIDSSection(data *model.OpnSenseDocument) string
- func (b *MarkdownBuilder) BuildIPsecSection(data *model.OpnSenseDocument) string
- func (b *MarkdownBuilder) BuildNetworkSection(data *model.OpnSenseDocument) string
- func (b *MarkdownBuilder) BuildOpenVPNSection(data *model.OpnSenseDocument) string
- func (b *MarkdownBuilder) BuildSecuritySection(data *model.OpnSenseDocument) string
- func (b *MarkdownBuilder) BuildServicesSection(data *model.OpnSenseDocument) string
- func (b *MarkdownBuilder) BuildStandardReport(data *model.OpnSenseDocument) (string, error)
- func (b *MarkdownBuilder) BuildSystemSection(data *model.OpnSenseDocument) string
- func (b *MarkdownBuilder) CalculateSecurityScore(data *model.OpnSenseDocument) int
- func (b *MarkdownBuilder) DefaultValue(value, defaultVal any) any
- func (b *MarkdownBuilder) EscapeTableContent(content any) string
- func (b *MarkdownBuilder) ExtractUniqueValues(items []string) []string
- func (b *MarkdownBuilder) FilterRulesByType(rules []model.Rule, ruleType string) []model.Rule
- func (b *MarkdownBuilder) FilterSystemTunables(tunables []model.SysctlItem, includeTunables bool) []model.SysctlItem
- func (b *MarkdownBuilder) FormatBytes(bytes int64) string
- func (b *MarkdownBuilder) GroupServicesByStatus(services []model.Service) map[string][]model.Service
- func (b *MarkdownBuilder) IsEmpty(value any) bool
- func (b *MarkdownBuilder) IsLastInSlice(index int, slice any) bool
- func (b *MarkdownBuilder) SanitizeID(s string) string
- func (b *MarkdownBuilder) ToLower(s string) string
- func (b *MarkdownBuilder) ToUpper(s string) string
- func (b *MarkdownBuilder) TrimSpace(s string) string
- func (b *MarkdownBuilder) TruncateDescription(description string, maxLength int) string
- func (b *MarkdownBuilder) WriteComprehensiveReport(w io.Writer, data *model.OpnSenseDocument) error
- func (b *MarkdownBuilder) WriteDHCPStaticLeasesTable(md *markdown.Markdown, leases []model.DHCPStaticLease) *markdown.Markdown
- func (b *MarkdownBuilder) WriteDHCPSummaryTable(md *markdown.Markdown, dhcpd model.Dhcpd) *markdown.Markdown
- func (b *MarkdownBuilder) WriteFirewallRulesTable(md *markdown.Markdown, rules []model.Rule) *markdown.Markdown
- func (b *MarkdownBuilder) WriteGroupTable(md *markdown.Markdown, groups []model.Group) *markdown.Markdown
- func (b *MarkdownBuilder) WriteInboundNATTable(md *markdown.Markdown, rules []model.InboundRule) *markdown.Markdown
- func (b *MarkdownBuilder) WriteInterfaceTable(md *markdown.Markdown, interfaces model.Interfaces) *markdown.Markdown
- func (b *MarkdownBuilder) WriteNetworkSection(w io.Writer, data *model.OpnSenseDocument) error
- func (b *MarkdownBuilder) WriteOutboundNATTable(md *markdown.Markdown, rules []model.NATRule) *markdown.Markdown
- func (b *MarkdownBuilder) WriteSecuritySection(w io.Writer, data *model.OpnSenseDocument) error
- func (b *MarkdownBuilder) WriteServicesSection(w io.Writer, data *model.OpnSenseDocument) error
- func (b *MarkdownBuilder) WriteStandardReport(w io.Writer, data *model.OpnSenseDocument) error
- func (b *MarkdownBuilder) WriteStaticRoutesTable(md *markdown.Markdown, routes []model.StaticRoute) *markdown.Markdown
- func (b *MarkdownBuilder) WriteSysctlTable(md *markdown.Markdown, sysctl []model.SysctlItem) *markdown.Markdown
- func (b *MarkdownBuilder) WriteSystemSection(w io.Writer, data *model.OpnSenseDocument) error
- func (b *MarkdownBuilder) WriteUserTable(md *markdown.Markdown, users []model.User) *markdown.Markdown
- func (b *MarkdownBuilder) WriteVLANTable(md *markdown.Markdown, vlans []model.VLAN) *markdown.Markdown
- type ReportBuilder
- type SectionWriter
Constants ¶
This section is empty.
Variables ¶
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 ¶
BuildDHCPSummaryTableSet builds the table data for DHCP scope summary.
func BuildFirewallRulesTableSet ¶
BuildFirewallRulesTableSet builds the table data for firewall rules.
func BuildGroupTableSet ¶
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 ¶
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 ¶
BuildUserTableSet builds the table data for system users.
func BuildVLANTableSet ¶
BuildVLANTableSet builds the table data for VLAN configurations.
func FormatLeaseTime ¶
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 ¶
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.