From 5637f27b45ea20bfb7ad993efacc1e45d50ba819 Mon Sep 17 00:00:00 2001 From: Trevor Slocum Date: Fri, 30 Oct 2020 13:36:55 -0700 Subject: [PATCH] Simplify host configuration --- CONFIGURATION.md | 50 ++++++++++++++++++++++-------------------------- config.go | 11 +++-------- server.go | 6 +++--- 3 files changed, 29 insertions(+), 38 deletions(-) diff --git a/CONFIGURATION.md b/CONFIGURATION.md index 8ba148e..7cccef0 100644 --- a/CONFIGURATION.md +++ b/CONFIGURATION.md @@ -24,31 +24,27 @@ certificates: # Hosts and paths to serve hosts: - - - name: gemini.rocks - paths: - - - path: /sites - root: /home/gemini.rocks/data/sites - - - path: ^/(help|info)$ - root: /home/gemini.rocks/data/help - - - path: ^/proxy-example$ - proxy: gemini://localhost:1966 - - - path: ^/cmd-example$ - command: uname -a - - - path: / - root: /home/gemini.rocks/data/home - - - name: twins.rocketnine.space - paths: - - - path: /sites - root: /home/twins/data/sites - - - path: / - root: /home/twins/data/home + gemini.rocks: + - + path: /sites + root: /home/gemini.rocks/data/sites + - + path: ^/(help|info)$ + root: /home/gemini.rocks/data/help + - + path: ^/proxy-example$ + proxy: gemini://localhost:1966 + - + path: ^/cmd-example$ + command: uname -a + - + path: / + root: /home/gemini.rocks/data/home + twins.rocketnine.space: + - + path: /sites + root: /home/twins/data/sites + - + path: / + root: /home/twins/data/home ``` \ No newline at end of file diff --git a/config.go b/config.go index eaf88a3..bcb2b1d 100644 --- a/config.go +++ b/config.go @@ -26,11 +26,6 @@ type pathConfig struct { cmd []string } -type hostConfig struct { - Name string - Paths []*pathConfig -} - type certConfig struct { Cert string Key string @@ -41,7 +36,7 @@ type serverConfig struct { Certificates []*certConfig - Hosts []*hostConfig + Hosts map[string][]*pathConfig hostname string port int @@ -83,8 +78,8 @@ func readconfig(configPath string) error { } } - for _, host := range config.Hosts { - for _, serve := range host.Paths { + for _, paths := range config.Hosts { + for _, serve := range paths { if serve.Path == "" { log.Fatal("path must be specified in serve entry") } else if (serve.Root != "" && (serve.Proxy != "" || serve.Command != "")) || diff --git a/server.go b/server.go index 5f6d52f..17c11d0 100644 --- a/server.go +++ b/server.go @@ -261,13 +261,13 @@ func handleConn(c net.Conn) { } var matchedHost bool - for _, host := range config.Hosts { - if requestHostname != host.Name { + for hostname := range config.Hosts { + if requestHostname != hostname { continue } matchedHost = true - for _, serve := range host.Paths { + for _, serve := range config.Hosts[hostname] { if serve.Proxy != "" { if serve.r != nil && serve.r.Match(pathBytes) { serveProxy(c, requestData, serve.Proxy)