Bump the version to 2.1.0.
[mailpopbox.git] / mailpopbox.go
index 2765ce99290e80c8534359f56b5ab8d99d0adcd5..62bbf71a34a03e4fb07cfa2a6d868f0e6f750b98 100644 (file)
@@ -1,9 +1,17 @@
+// mailpopbox
+// Copyright 2020 Blue Static <https://www.bluestatic.org>
+// This program is free software licensed under the GNU General Public License,
+// version 3.0. The full text of the license can be found in LICENSE.txt.
+// SPDX-License-Identifier: GPL-3.0-only
+
 package main
 
 import (
        "encoding/json"
        "fmt"
        "os"
+
+       "go.uber.org/zap"
 )
 
 func main() {
@@ -12,6 +20,11 @@ func main() {
                os.Exit(1)
        }
 
+       if os.Args[1] == "version" {
+               fmt.Print(versionString)
+               os.Exit(0)
+       }
+
        configFile, err := os.Open(os.Args[1])
        if err != nil {
                fmt.Fprintf(os.Stderr, "config file: %s\n", err)
@@ -25,7 +38,32 @@ func main() {
        }
        configFile.Close()
 
-       smtp := runSMTPServer(config)
-       err = <-smtp
-       fmt.Println(err)
+       logConfig := zap.NewDevelopmentConfig()
+       logConfig.Development = false
+       logConfig.DisableStacktrace = true
+       logConfig.Level.SetLevel(zap.DebugLevel)
+       log, err := logConfig.Build()
+       if err != nil {
+               fmt.Fprintf(os.Stderr, "create logger: %v\n", err)
+               os.Exit(4)
+       }
+
+       log.Info("starting mailpopbox", zap.String("hostname", config.Hostname))
+
+       pop3 := runPOP3Server(config, log)
+       smtp := runSMTPServer(config, log)
+
+       for {
+               select {
+               case cm := <-pop3:
+                       if cm == ServerControlRestart {
+                               pop3 = runPOP3Server(config, log)
+                       } else {
+                               break
+                       }
+               case <-smtp:
+                       // smtp never reloads.
+                       break
+               }
+       }
 }