cmd/hydroxide: extract listenAndServe into functions
This commit is contained in:
parent
f0d0d64b4f
commit
4ff61deefd
|
@ -34,6 +34,75 @@ func newClient() *protonmail.Client {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func listenAndServeSMTP(addr string, authManager *auth.Manager) error {
|
||||||
|
be := smtpbackend.New(authManager)
|
||||||
|
s := smtp.NewServer(be)
|
||||||
|
s.Addr = addr
|
||||||
|
s.Domain = "localhost" // TODO: make this configurable
|
||||||
|
s.AllowInsecureAuth = true // TODO: remove this
|
||||||
|
//s.Debug = os.Stdout
|
||||||
|
|
||||||
|
log.Println("SMTP server listening on", s.Addr)
|
||||||
|
return s.ListenAndServe()
|
||||||
|
}
|
||||||
|
|
||||||
|
func listenAndServeIMAP(addr string, authManager *auth.Manager, eventsManager *events.Manager) error {
|
||||||
|
be := imapbackend.New(authManager, eventsManager)
|
||||||
|
s := imapserver.New(be)
|
||||||
|
s.Addr = addr
|
||||||
|
s.AllowInsecureAuth = true // TODO: remove this
|
||||||
|
//s.Debug = os.Stdout
|
||||||
|
|
||||||
|
s.Enable(imapspacialuse.NewExtension())
|
||||||
|
s.Enable(imapmove.NewExtension())
|
||||||
|
|
||||||
|
log.Println("IMAP server listening on", s.Addr)
|
||||||
|
return s.ListenAndServe()
|
||||||
|
}
|
||||||
|
|
||||||
|
func listenAndServeCardDAV(addr string, authManager *auth.Manager, eventsManager *events.Manager) error {
|
||||||
|
handlers := make(map[string]http.Handler)
|
||||||
|
|
||||||
|
s := &http.Server{
|
||||||
|
Addr: addr,
|
||||||
|
Handler: http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) {
|
||||||
|
resp.Header().Set("WWW-Authenticate", "Basic")
|
||||||
|
|
||||||
|
username, password, ok := req.BasicAuth()
|
||||||
|
if !ok {
|
||||||
|
resp.WriteHeader(http.StatusUnauthorized)
|
||||||
|
io.WriteString(resp, "Credentials are required")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c, privateKeys, err := authManager.Auth(username, password)
|
||||||
|
if err != nil {
|
||||||
|
if err == auth.ErrUnauthorized {
|
||||||
|
resp.WriteHeader(http.StatusUnauthorized)
|
||||||
|
} else {
|
||||||
|
resp.WriteHeader(http.StatusInternalServerError)
|
||||||
|
}
|
||||||
|
io.WriteString(resp, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
h, ok := handlers[username]
|
||||||
|
if !ok {
|
||||||
|
ch := make(chan *protonmail.Event)
|
||||||
|
eventsManager.Register(c, username, ch, nil)
|
||||||
|
h = carddav.NewHandler(c, privateKeys, ch)
|
||||||
|
|
||||||
|
handlers[username] = h
|
||||||
|
}
|
||||||
|
|
||||||
|
h.ServeHTTP(resp, req)
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("CardDAV server listening on", s.Addr)
|
||||||
|
return s.ListenAndServe()
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
|
@ -174,85 +243,30 @@ func main() {
|
||||||
if port == "" {
|
if port == "" {
|
||||||
port = "1025"
|
port = "1025"
|
||||||
}
|
}
|
||||||
|
addr := "127.0.0.1:" + port
|
||||||
|
|
||||||
sessions := auth.NewManager(newClient)
|
authManager := auth.NewManager(newClient)
|
||||||
|
log.Fatal(listenAndServeSMTP(addr, authManager))
|
||||||
be := smtpbackend.New(sessions)
|
|
||||||
s := smtp.NewServer(be)
|
|
||||||
s.Addr = "127.0.0.1:" + port
|
|
||||||
s.Domain = "localhost" // TODO: make this configurable
|
|
||||||
s.AllowInsecureAuth = true // TODO: remove this
|
|
||||||
//s.Debug = os.Stdout
|
|
||||||
|
|
||||||
log.Println("SMTP server listening on", s.Addr)
|
|
||||||
log.Fatal(s.ListenAndServe())
|
|
||||||
case "imap":
|
case "imap":
|
||||||
port := os.Getenv("PORT")
|
port := os.Getenv("PORT")
|
||||||
if port == "" {
|
if port == "" {
|
||||||
port = "1143"
|
port = "1143"
|
||||||
}
|
}
|
||||||
|
addr := "127.0.0.1:" + port
|
||||||
|
|
||||||
sessions := auth.NewManager(newClient)
|
authManager := auth.NewManager(newClient)
|
||||||
eventsManager := events.NewManager()
|
eventsManager := events.NewManager()
|
||||||
|
log.Fatal(listenAndServeIMAP(addr, authManager, eventsManager))
|
||||||
be := imapbackend.New(sessions, eventsManager)
|
|
||||||
s := imapserver.New(be)
|
|
||||||
s.Addr = "127.0.0.1:" + port
|
|
||||||
s.AllowInsecureAuth = true // TODO: remove this
|
|
||||||
//s.Debug = os.Stdout
|
|
||||||
s.Enable(imapspacialuse.NewExtension())
|
|
||||||
s.Enable(imapmove.NewExtension())
|
|
||||||
|
|
||||||
log.Println("IMAP server listening on", s.Addr)
|
|
||||||
log.Fatal(s.ListenAndServe())
|
|
||||||
case "carddav":
|
case "carddav":
|
||||||
port := os.Getenv("PORT")
|
port := os.Getenv("PORT")
|
||||||
if port == "" {
|
if port == "" {
|
||||||
port = "8080"
|
port = "8080"
|
||||||
}
|
}
|
||||||
|
addr := "127.0.0.1:" + port
|
||||||
|
|
||||||
sessions := auth.NewManager(newClient)
|
authManager := auth.NewManager(newClient)
|
||||||
eventsManager := events.NewManager()
|
eventsManager := events.NewManager()
|
||||||
handlers := make(map[string]http.Handler)
|
log.Fatal(listenAndServeCardDAV(addr, authManager, eventsManager))
|
||||||
|
|
||||||
s := &http.Server{
|
|
||||||
Addr: "127.0.0.1:" + port,
|
|
||||||
Handler: http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) {
|
|
||||||
resp.Header().Set("WWW-Authenticate", "Basic")
|
|
||||||
|
|
||||||
username, password, ok := req.BasicAuth()
|
|
||||||
if !ok {
|
|
||||||
resp.WriteHeader(http.StatusUnauthorized)
|
|
||||||
io.WriteString(resp, "Credentials are required")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
c, privateKeys, err := sessions.Auth(username, password)
|
|
||||||
if err != nil {
|
|
||||||
if err == auth.ErrUnauthorized {
|
|
||||||
resp.WriteHeader(http.StatusUnauthorized)
|
|
||||||
} else {
|
|
||||||
resp.WriteHeader(http.StatusInternalServerError)
|
|
||||||
}
|
|
||||||
io.WriteString(resp, err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
h, ok := handlers[username]
|
|
||||||
if !ok {
|
|
||||||
ch := make(chan *protonmail.Event)
|
|
||||||
eventsManager.Register(c, username, ch, nil)
|
|
||||||
h = carddav.NewHandler(c, privateKeys, ch)
|
|
||||||
|
|
||||||
handlers[username] = h
|
|
||||||
}
|
|
||||||
|
|
||||||
h.ServeHTTP(resp, req)
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Println("CardDAV server listening on", s.Addr)
|
|
||||||
log.Fatal(s.ListenAndServe())
|
|
||||||
default:
|
default:
|
||||||
log.Println("usage: hydroxide smtp")
|
log.Println("usage: hydroxide smtp")
|
||||||
log.Println("usage: hydroxide imap")
|
log.Println("usage: hydroxide imap")
|
||||||
|
|
Loading…
Reference in New Issue