package main import ( "log" "net/http" "os" ) // env returns the value of key or def when unset/empty. func env(key, def string) string { if v := os.Getenv(key); v != "" { return v } return def } // envRequired returns the value of key or exits: a missing credential must // fail loudly, never run with an open door. func envRequired(key string) string { v := os.Getenv(key) if v == "" { log.Fatalf("mail-admin: %s is required (set it in mail-server/.env)", key) } return v } func main() { s := &server{ accountsPath: envRequired("MAIL_ADMIN_ACCOUNTS"), quotaPath: envRequired("MAIL_ADMIN_QUOTAS"), maildirRoot: envRequired("MAIL_ADMIN_MAILDIR"), basePath: env("MAIL_ADMIN_BASE_PATH", ""), user: envRequired("MAIL_ADMIN_USER"), pass: envRequired("MAIL_ADMIN_PASSWORD"), } addr := env("MAIL_ADMIN_LISTEN", ":8080") log.Printf("mail-admin listening on %s, base path %q", addr, s.basePath) log.Fatal(http.ListenAndServe(addr, s.handler())) }