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