mirror of
https://code.rocketnine.space/tslocum/twins.git
synced 2024-11-27 13:28:15 +01:00
Allow specifying default host and path configuration
This commit is contained in:
parent
4f4e2a8cbe
commit
335a90c5c5
2 changed files with 51 additions and 0 deletions
|
@ -30,6 +30,10 @@ Fixed string paths will match with and without a trailing slash.
|
||||||
|
|
||||||
When accessing a directory the file `index.gemini` or `index.gmi` is served.
|
When accessing a directory the file `index.gemini` or `index.gmi` is served.
|
||||||
|
|
||||||
|
When a host is defined with the name `default`, other hosts and paths will use
|
||||||
|
those values as the default configuration. It is not currently possible to
|
||||||
|
enable an attribute by default and then disable it for individual paths.
|
||||||
|
|
||||||
### Certificates
|
### Certificates
|
||||||
|
|
||||||
A certificate and private key must be specified.
|
A certificate and private key must be specified.
|
||||||
|
@ -162,6 +166,10 @@ listen: :1965
|
||||||
|
|
||||||
# Hosts and paths to serve
|
# Hosts and paths to serve
|
||||||
hosts:
|
hosts:
|
||||||
|
default: # Default host configuration
|
||||||
|
paths: # Default path attributes
|
||||||
|
-
|
||||||
|
symlinks: true # Follow symbolic links
|
||||||
gemini.rocks:
|
gemini.rocks:
|
||||||
cert: /srv/gemini.rocks/data/cert.crt
|
cert: /srv/gemini.rocks/data/cert.crt
|
||||||
key: /srv/gemini.rocks/data/cert.key
|
key: /srv/gemini.rocks/data/cert.key
|
||||||
|
|
43
config.go
43
config.go
|
@ -123,8 +123,51 @@ func readconfig(configPath string) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defaultHost := config.Hosts["default"]
|
||||||
|
delete(config.Hosts, "default")
|
||||||
|
|
||||||
config.fcgiPools = make(map[string]gofast.ConnFactory)
|
config.fcgiPools = make(map[string]gofast.ConnFactory)
|
||||||
for hostname, host := range config.Hosts {
|
for hostname, host := range config.Hosts {
|
||||||
|
if defaultHost != nil {
|
||||||
|
if host.Cert == "" {
|
||||||
|
host.Cert = defaultHost.Cert
|
||||||
|
}
|
||||||
|
if host.Key == "" {
|
||||||
|
host.Key = defaultHost.Key
|
||||||
|
}
|
||||||
|
if len(defaultHost.Paths) == 1 {
|
||||||
|
defaultPath := defaultHost.Paths[0]
|
||||||
|
for _, serve := range host.Paths {
|
||||||
|
if defaultPath.Root != "" && serve.Root == "" {
|
||||||
|
serve.Root = defaultPath.Root
|
||||||
|
}
|
||||||
|
if defaultPath.Proxy != "" && serve.Proxy == "" {
|
||||||
|
serve.Proxy = defaultPath.Proxy
|
||||||
|
}
|
||||||
|
if defaultPath.Command != "" && serve.Command == "" {
|
||||||
|
serve.Command = defaultPath.Command
|
||||||
|
}
|
||||||
|
if defaultPath.SymLinks {
|
||||||
|
serve.SymLinks = defaultPath.SymLinks
|
||||||
|
}
|
||||||
|
if defaultPath.HiddenFiles {
|
||||||
|
serve.HiddenFiles = defaultPath.HiddenFiles
|
||||||
|
}
|
||||||
|
if defaultPath.ListDirectory {
|
||||||
|
serve.ListDirectory = defaultPath.ListDirectory
|
||||||
|
}
|
||||||
|
if defaultPath.Cache != "" && serve.Cache == "" {
|
||||||
|
serve.Cache = defaultPath.Cache
|
||||||
|
}
|
||||||
|
if defaultPath.FastCGI != "" && serve.FastCGI == "" {
|
||||||
|
serve.FastCGI = defaultPath.FastCGI
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if len(defaultHost.Paths) > 1 {
|
||||||
|
log.Fatal("only one path may be defined for the default host")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if host.Cert == "" || host.Key == "" {
|
if host.Cert == "" || host.Key == "" {
|
||||||
log.Fatal("a certificate must be specified for each domain (gemini requires TLS for all connections)")
|
log.Fatal("a certificate must be specified for each domain (gemini requires TLS for all connections)")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue