goapacheconf

package module
v1.1.5 Latest Latest
Warning

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

Go to latest
Published: Nov 16, 2025 License: MIT Imports: 14 Imported by: 0

README ¶

GoApacheConf

GoApacheConf is a Go library for parsing, modifying, and regenerating Apache configuration files.
It makes it easy to work with Apache config blocks and directives programmatically in your Go applications.

Powered by Participle v2 under the hood.


📦 Installation

go get github.com/r2dtools/goapacheconf

🚀 Usage Example

Parse the entire Apache configuration and inspect blocks and directives:

package main

import (
	"fmt"

	"github.com/r2dtools/goapacheconf"
)

func main() {
	// Load Apache config from /etc/apache2
	config, err := goapacheconf.GetConfig("/etc/apache2", "")
	if err != nil {
		panic(err)
	}

	// Find VirtualHost blocks
	blocks := config.FindVirtualHostBlocks()
	if len(blocks) == 0 {
		panic("virtual host block not found")
	}
	vBlock := blocks[0]

	// Get DocumentRoot
	fmt.Println(vBlock.GetDocumentRoot())

	// Find "ErrorLog" directives
	directives := vBlock.FindDirectives("ErrorLog")
	if len(directives) == 0 {
		panic("directive not found")
	}

	// Print the first ErrorLog directive value
	fmt.Println(directives[0].GetFirstValue())
}

👉 For more examples, check the tests.


🔧 Roadmap

  • Support for additional Apache directive types
  • Advanced helpers for config manipulation
  • Built-in config validation

📜 License

MIT License. See LICENSE for details.

Documentation ¶

Index ¶

Constants ¶

View Source
const (
	VirtualHost   = "VirtualHost"
	Directory     = "Directory"
	IfModule      = "IfModule"
	Proxy         = "Proxy"
	Location      = "Location"
	LocationMatch = "LocationMatch"
)
View Source
const (
	LoadModule              = "LoadModule"
	ServerName              = "ServerName"
	ServerAlias             = "ServerAlias"
	DocumentRoot            = "DocumentRoot"
	SSLEngine               = "SSLEngine"
	SSLCertificateFile      = "SSLCertificateFile"
	SSLCertificateKeyFile   = "SSLCertificateKeyFile"
	SSLCertificateChainFile = "SSLCertificateChainFile"
	UseCanonicalName        = "UseCanonicalName"
	Include                 = "Include"
	IncludeOptional         = "IncludeOptional"
	RewriteEngine           = "RewriteEngine"
	SetSysEnv               = "SetSysEnv"
	RewriteCond             = "RewriteCond"
	RewriteRule             = "RewriteRule"
	ListenPort              = "Listen"
	Alias                   = "Alias"
	Order                   = "Order"
	Allow                   = "Allow"
	Satisfy                 = "Satisfy"
	CustomLog               = "CustomLog"
	ErrorLog                = "ErrorLog"
	ProxyPass               = "ProxyPass"
)

Variables ¶

View Source
var ErrInvalidBlock = errors.New("entry is not a block")
View Source
var ErrInvalidDirective = errors.New("entry is not a directive")

Functions ¶

This section is empty.

Types ¶

type Address ¶

type Address struct {
	IsIpv6 bool
	Host   string
	Port   string
}

func CreateAddressFromString ¶

func CreateAddressFromString(addrStr string) Address

func (Address) GetAddressWithNewPort ¶

func (a Address) GetAddressWithNewPort(port string) Address

func (Address) GetHash ¶

func (a Address) GetHash() string

func (Address) GetNormalizedHost ¶

func (a Address) GetNormalizedHost() string

GetNormalizedHost returns normalized host. Normalization occurres only for ipv6 address. Ipv4 returns as is. For example: [fd00:dead:beaf::1] -> fd00:dead:beaf:0:0:0:0:1

func (Address) GetNormalizedIpv6 ¶

func (a Address) GetNormalizedIpv6() string

GetNormalizedIpv6 returns normalized IPv6 For example: [fd00:dead:beaf::1] -> fd00:dead:beaf:0:0:0:0:1

func (Address) IsEqual ¶

func (a Address) IsEqual(b Address) bool

func (Address) IsWildcardPort ¶

func (a Address) IsWildcardPort() bool

func (Address) ToString ¶

func (a Address) ToString() string

type AliasDirective ¶ added in v1.0.8

type AliasDirective struct {
	Directive
}

func NewAliasDirective ¶ added in v1.1.1

func NewAliasDirective(toLocation, fromLocation string) AliasDirective

func (*AliasDirective) GetFromLocation ¶ added in v1.0.8

func (d *AliasDirective) GetFromLocation() string

func (*AliasDirective) GetToLocation ¶ added in v1.0.8

func (d *AliasDirective) GetToLocation() string

type Block ¶

type Block struct {
	FilePath  string
	IfModules []string
	// contains filtered or unexported fields
}

func (*Block) AddBlock ¶

func (b *Block) AddBlock(name string, parameters []string, begining bool) Block

func (*Block) AppendDirective ¶ added in v1.1.0

func (b *Block) AppendDirective(directive Directive) Directive

func (*Block) ChangeDirectiveOrder ¶ added in v1.1.0

func (b *Block) ChangeDirectiveOrder(directive Directive, order int)

func (*Block) DeleteDirective ¶

func (b *Block) DeleteDirective(directive Directive)

func (*Block) DeleteDirectiveByName ¶

func (b *Block) DeleteDirectiveByName(directiveName string)

func (*Block) Dump ¶

func (b *Block) Dump() string

func (*Block) FindBlocks ¶

func (b *Block) FindBlocks(blockName string) []Block

func (*Block) FindDirectives ¶

func (b *Block) FindDirectives(directiveName string) []Directive

func (*Block) FindIfModuleBlocks ¶

func (b *Block) FindIfModuleBlocks() []IfModuleBlock

func (*Block) FindIfModuleBlocksByModuleName ¶

func (b *Block) FindIfModuleBlocksByModuleName(moduleName string) []IfModuleBlock

func (*Block) FindRewriteRuleDirectives ¶ added in v1.0.4

func (b *Block) FindRewriteRuleDirectives() []RewriteRuleDirective

func (*Block) GetBlockOrder ¶ added in v1.1.0

func (b *Block) GetBlockOrder(block Block) int

func (*Block) GetDirectiveOrder ¶ added in v1.1.0

func (b *Block) GetDirectiveOrder(directive Directive) int

func (*Block) GetFirstParameter ¶ added in v1.0.8

func (b *Block) GetFirstParameter() string

func (*Block) GetName ¶

func (b *Block) GetName() string

func (*Block) GetParameters ¶

func (b *Block) GetParameters() []string

func (*Block) PrependDirective ¶ added in v1.1.0

func (b *Block) PrependDirective(directive Directive) Directive

func (*Block) SetParameters ¶

func (b *Block) SetParameters(parameters []string)

type BlockUnion ¶ added in v1.0.8

type Config ¶

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

func GetConfig ¶

func GetConfig(serverRootPath, configFilePath string) (*Config, error)

func (*Config) AddConfigFile ¶

func (c *Config) AddConfigFile(filePath string) (*ConfigFile, error)

func (*Config) Dump ¶

func (c *Config) Dump() error

func (*Config) FindAliasDirectives ¶ added in v1.0.8

func (c *Config) FindAliasDirectives() []AliasDirective

func (*Config) FindBlocks ¶

func (c *Config) FindBlocks(blockName string) []Block

func (*Config) FindDirectives ¶

func (c *Config) FindDirectives(directiveName string) []Directive

func (*Config) FindIfModuleBlocks ¶

func (c *Config) FindIfModuleBlocks() []IfModuleBlock

func (*Config) FindIfModuleBlocksByModuleName ¶

func (c *Config) FindIfModuleBlocksByModuleName(moduleName string) []IfModuleBlock

func (*Config) FindLoadModuleDirectives ¶

func (c *Config) FindLoadModuleDirectives() []LoadModuleDirective

func (*Config) FindRewriteRuleDirectives ¶ added in v1.0.4

func (c *Config) FindRewriteRuleDirectives() []RewriteRuleDirective

func (*Config) FindVirtualHostBlocks ¶

func (c *Config) FindVirtualHostBlocks() []VirtualHostBlock

func (*Config) FindVirtualHostBlocksByServerName ¶

func (c *Config) FindVirtualHostBlocksByServerName(serverName string) []VirtualHostBlock

func (*Config) GetConfigFile ¶

func (c *Config) GetConfigFile(configFileName string) *ConfigFile

func (*Config) GetEnabledModules ¶

func (c *Config) GetEnabledModules() map[string]struct{}

func (*Config) IsBlockModulesEnabled ¶

func (c *Config) IsBlockModulesEnabled(block Block) (enabled bool, disabledModules []string)

func (*Config) IsDirectiveModulesEnabled ¶

func (c *Config) IsDirectiveModulesEnabled(directive Directive) (enabled bool, disabledModules []string)

func (*Config) IsModuleEnabled ¶

func (c *Config) IsModuleEnabled(name string) bool

func (*Config) ParseFile ¶

func (c *Config) ParseFile(configPath string) error

type ConfigFile ¶

type ConfigFile struct {
	FilePath string
	// contains filtered or unexported fields
}

func (*ConfigFile) AddBlock ¶

func (c *ConfigFile) AddBlock(name string, parameters []string, begining bool) Block

func (*ConfigFile) AppendAliasDirective ¶ added in v1.1.0

func (c *ConfigFile) AppendAliasDirective(aliasDirective AliasDirective) AliasDirective

func (*ConfigFile) AppendDirective ¶ added in v1.1.0

func (c *ConfigFile) AppendDirective(directive Directive) Directive

func (*ConfigFile) DeleteAliasDirective ¶ added in v1.0.9

func (c *ConfigFile) DeleteAliasDirective(aliasDirective AliasDirective)

func (*ConfigFile) DeleteDirective ¶

func (c *ConfigFile) DeleteDirective(directive Directive)

func (*ConfigFile) DeleteDirectiveByName ¶

func (c *ConfigFile) DeleteDirectiveByName(directiveName string)

func (*ConfigFile) DeleteVirtualHostBlock ¶

func (c *ConfigFile) DeleteVirtualHostBlock(virtualHostBlock VirtualHostBlock)

func (*ConfigFile) Dump ¶

func (c *ConfigFile) Dump() (string, error)

func (*ConfigFile) FindAlliasDirectives ¶ added in v1.0.8

func (c *ConfigFile) FindAlliasDirectives() []AliasDirective

func (*ConfigFile) FindBlocks ¶

func (c *ConfigFile) FindBlocks(blockName string) []Block

func (*ConfigFile) FindDirectives ¶

func (c *ConfigFile) FindDirectives(directiveName string) []Directive

func (*ConfigFile) FindIfModuleBlocks ¶

func (c *ConfigFile) FindIfModuleBlocks() []IfModuleBlock

func (*ConfigFile) FindIfModuleBlocksByModuleName ¶

func (c *ConfigFile) FindIfModuleBlocksByModuleName(moduleName string) []IfModuleBlock

func (*ConfigFile) FindRewriteRuleDirectives ¶ added in v1.0.4

func (c *ConfigFile) FindRewriteRuleDirectives() []RewriteRuleDirective

func (*ConfigFile) FindVirtualHostBlocks ¶

func (c *ConfigFile) FindVirtualHostBlocks() []VirtualHostBlock

func (*ConfigFile) FindVirtualHostBlocksByServerName ¶

func (c *ConfigFile) FindVirtualHostBlocksByServerName(serverName string) []VirtualHostBlock

func (*ConfigFile) PrependAliasDirective ¶ added in v1.1.0

func (c *ConfigFile) PrependAliasDirective(aliasDirective AliasDirective) AliasDirective

func (*ConfigFile) PrependDirective ¶ added in v1.1.0

func (c *ConfigFile) PrependDirective(directive Directive) Directive

type Directive ¶

type Directive struct {
	IfModules []string
	// contains filtered or unexported fields
}

func NewDirective ¶ added in v1.1.0

func NewDirective(name string, values []string) Directive

func (*Directive) AddValue ¶

func (d *Directive) AddValue(expression string)

func (*Directive) AppendNewLine ¶ added in v1.1.0

func (d *Directive) AppendNewLine()

func (*Directive) GetFirstValue ¶

func (d *Directive) GetFirstValue() string

func (*Directive) GetName ¶

func (d *Directive) GetName() string

func (*Directive) GetValues ¶

func (d *Directive) GetValues() []string

func (*Directive) GetValuesAsString ¶ added in v1.0.6

func (d *Directive) GetValuesAsString() string

func (*Directive) HasAppendedNewLines ¶ added in v1.1.0

func (d *Directive) HasAppendedNewLines() bool

func (*Directive) HasPrependedNewLines ¶ added in v1.1.0

func (d *Directive) HasPrependedNewLines() bool

func (*Directive) PrependNewLine ¶ added in v1.1.0

func (d *Directive) PrependNewLine()

func (*Directive) SetValue ¶

func (d *Directive) SetValue(expression string)

func (*Directive) SetValues ¶

func (d *Directive) SetValues(expressions []string)

type DirectiveUnion ¶ added in v1.0.8

type DirectiveUnion interface {
	RewriteRuleDirective | AliasDirective | LoadModuleDirective
}

type DirectoryBlock ¶

type DirectoryBlock struct {
	Block
}

func (*DirectoryBlock) DeleteDirectoryBlock ¶ added in v1.0.8

func (v *DirectoryBlock) DeleteDirectoryBlock(directoryBlock DirectoryBlock)

func (*DirectoryBlock) GetLocationMatch ¶

func (d *DirectoryBlock) GetLocationMatch() string

func (*DirectoryBlock) IsRegex ¶

func (d *DirectoryBlock) IsRegex() bool

func (*DirectoryBlock) SetLocationMatch ¶

func (d *DirectoryBlock) SetLocationMatch(match string)

type IfModuleBlock ¶

type IfModuleBlock struct {
	Block
}

func (*IfModuleBlock) AddBlock ¶

func (b *IfModuleBlock) AddBlock(name string, parameters []string, begining bool) Block

func (*IfModuleBlock) AppendDirective ¶ added in v1.1.0

func (b *IfModuleBlock) AppendDirective(directive Directive) Directive

func (*IfModuleBlock) FindBlocks ¶

func (b *IfModuleBlock) FindBlocks(blockName string) []Block

func (*IfModuleBlock) FindIfModuleBlocks ¶

func (b *IfModuleBlock) FindIfModuleBlocks() []IfModuleBlock

func (*IfModuleBlock) FindIfModuleBlocksByModuleName ¶

func (b *IfModuleBlock) FindIfModuleBlocksByModuleName(moduleName string) []IfModuleBlock

func (*IfModuleBlock) GetModuleName ¶

func (b *IfModuleBlock) GetModuleName() string

func (*IfModuleBlock) PrependDirective ¶ added in v1.1.0

func (b *IfModuleBlock) PrependDirective(directive Directive) Directive

type Listen ¶

type Listen struct {
	HostPort string
	Protocol string
}

type LoadModuleDirective ¶

type LoadModuleDirective struct {
	Directive
}

func (*LoadModuleDirective) GetModuleName ¶

func (d *LoadModuleDirective) GetModuleName() string

type LocationBlock ¶ added in v1.0.8

type LocationBlock struct {
	Block
}

func (*LocationBlock) GetLocation ¶ added in v1.0.8

func (b *LocationBlock) GetLocation() string

func (*LocationBlock) SetLocation ¶ added in v1.0.8

func (b *LocationBlock) SetLocation(location string)

type LocationMatchBlock ¶ added in v1.0.9

type LocationMatchBlock struct {
	Block
}

func (*LocationMatchBlock) GetLocationMatch ¶ added in v1.0.9

func (b *LocationMatchBlock) GetLocationMatch() string

func (*LocationMatchBlock) SetLocationMatch ¶ added in v1.0.9

func (b *LocationMatchBlock) SetLocationMatch(locationMatch string)

type RewriteRuleDirective ¶ added in v1.0.4

type RewriteRuleDirective struct {
	Directive
}

func (*RewriteRuleDirective) GetRelatedRewiteCondDirectives ¶ added in v1.0.4

func (d *RewriteRuleDirective) GetRelatedRewiteCondDirectives() []Directive

type VirtualHostBlock ¶

type VirtualHostBlock struct {
	Block
}

func (*VirtualHostBlock) AddDirectoryBlock ¶

func (v *VirtualHostBlock) AddDirectoryBlock(isRegex bool, match string, begining bool) DirectoryBlock

func (*VirtualHostBlock) AddLocationBlock ¶ added in v1.0.9

func (v *VirtualHostBlock) AddLocationBlock(location string, begining bool) LocationBlock

func (*VirtualHostBlock) AddLocationMatchBlock ¶ added in v1.0.9

func (v *VirtualHostBlock) AddLocationMatchBlock(locationMatch string, begining bool) LocationMatchBlock

func (*VirtualHostBlock) AppendAliasDirective ¶ added in v1.1.0

func (v *VirtualHostBlock) AppendAliasDirective(aliasDirective AliasDirective) AliasDirective

func (*VirtualHostBlock) ChangeAliasDirectiveOrder ¶ added in v1.1.2

func (v *VirtualHostBlock) ChangeAliasDirectiveOrder(aliasdirective AliasDirective, order int)

func (*VirtualHostBlock) DeleteAliasDirective ¶ added in v1.0.9

func (v *VirtualHostBlock) DeleteAliasDirective(aliasDirective AliasDirective)

func (*VirtualHostBlock) DeleteLocationBlock ¶ added in v1.0.9

func (v *VirtualHostBlock) DeleteLocationBlock(locationBlock LocationBlock)

func (*VirtualHostBlock) DeleteLocationMatchBlock ¶ added in v1.0.9

func (v *VirtualHostBlock) DeleteLocationMatchBlock(locationMatchBlock LocationMatchBlock)

func (*VirtualHostBlock) FindAlliasDirectives ¶ added in v1.0.8

func (v *VirtualHostBlock) FindAlliasDirectives() []AliasDirective

func (*VirtualHostBlock) FindDirectoryBlocks ¶

func (v *VirtualHostBlock) FindDirectoryBlocks() []DirectoryBlock

func (*VirtualHostBlock) FindLocationBlocks ¶ added in v1.0.9

func (v *VirtualHostBlock) FindLocationBlocks() []LocationBlock

func (*VirtualHostBlock) FindLocationMatchBlocks ¶ added in v1.0.9

func (v *VirtualHostBlock) FindLocationMatchBlocks() []LocationMatchBlock

func (*VirtualHostBlock) GetAddresses ¶

func (s *VirtualHostBlock) GetAddresses() []Address

func (*VirtualHostBlock) GetDocumentRoot ¶

func (v *VirtualHostBlock) GetDocumentRoot() string

func (*VirtualHostBlock) GetServerAliases ¶

func (v *VirtualHostBlock) GetServerAliases() []string

func (*VirtualHostBlock) GetServerNames ¶

func (v *VirtualHostBlock) GetServerNames() []string

func (*VirtualHostBlock) HasSSL ¶

func (s *VirtualHostBlock) HasSSL() bool

func (*VirtualHostBlock) IsIpv4Enabled ¶

func (v *VirtualHostBlock) IsIpv4Enabled() bool

func (*VirtualHostBlock) IsIpv6Enabled ¶

func (v *VirtualHostBlock) IsIpv6Enabled() bool

func (*VirtualHostBlock) PrependAliasDirective ¶ added in v1.1.0

func (v *VirtualHostBlock) PrependAliasDirective(aliasDirective AliasDirective) AliasDirective

func (*VirtualHostBlock) SetAddresses ¶ added in v1.0.1

func (s *VirtualHostBlock) SetAddresses(addresses []Address)

Directories ¶

Path Synopsis
internal

Jump to

Keyboard shortcuts

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