diff --git a/README b/README index f3a8f56..e0a6de1 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ SecretShop: a small Gemini server. # Features -* Multi-site hosting (WIP) +* Multi-site hosting * CGI (WIP) * Fully compliant with Jetforce diagnostics * Probably won't kill your computer diff --git a/main.go b/main.go index b052192..d1aee5c 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "fmt" "log" + "sync" "github.com/spf13/viper" ) @@ -19,15 +20,29 @@ func main() { //Load config active_capsules := viper.GetStringSlice("active_capsules") + capsule_list := make([]Config, len(active_capsules)) for i, c := range active_capsules { viper.UnmarshalKey(c, &(capsule_list[i])) + log.Printf("Loading capsule %v %v", i, capsule_list[i].Hostname) } if len(capsule_list) < 1 { log.Println("No capsules defined. Shutting down.") return } - log.Fatal(ListenAndServeTLS(capsule_list[0])) + log.Printf("%v capsules loaded", len(capsule_list)) + // Intialize servers + wg := new(sync.WaitGroup) + wg.Add(len(capsule_list)) + for i, c := range capsule_list { + log.Printf("Starting capsule %v %v", i, c.Hostname) + go func(c interface{}) { + log.Fatal(ListenAndServeTLS(c.(Config))) + wg.Done() + }(c) + } + wg.Wait() + //log.Fatal(ListenAndServeTLS(capsule_list[0])) } type Config struct { diff --git a/server.go b/server.go index 9dee6d0..6e03613 100644 --- a/server.go +++ b/server.go @@ -201,6 +201,8 @@ func generateDirectory(path string) Response { log.Println(err) return Response{STATUS_TEMPORARY_FAILURE, "Unable to show directory listing", ""} } + // Unashamedly based off solderpunks directory generation code + // https://tildegit.org/solderpunk/molly-brown/src/branch/master/handler.go listing = "# Directory listing\r\n" for _, file := range files { // Skip dotfiles