Add Unix socket support

This commit is contained in:
Krystian Chachuła 2024-07-01 19:50:24 +02:00 committed by Conrad Hoffmann
parent 4ca7d8c4e7
commit 42b36e3421
2 changed files with 21 additions and 3 deletions

View file

@ -5,8 +5,10 @@ import (
"encoding/base64"
"flag"
"fmt"
"net"
"net/http"
"os"
"strings"
"github.com/emersion/go-webdav"
"github.com/emersion/go-webdav/caldav"
@ -163,6 +165,22 @@ func main() {
mux.Mount("/{user}/contacts", &carddavHandler)
mux.Mount("/{user}/calendar", &caldavHandler)
var ln net.Listener
if a := strings.TrimPrefix(addr, "unix://"); a != addr {
ln, err = net.Listen("unix", a)
if err != nil {
log.Fatal().Err(err).Msg("failed to listen")
}
if err = os.Chmod(a, 0775); err != nil {
log.Warn().Err(err).Msg("failed to set socket mode")
}
} else {
ln, err = net.Listen("tcp", addr)
if err != nil {
log.Fatal().Err(err).Msg("failed to listen")
}
}
server := http.Server{
Addr: addr,
Handler: mux,
@ -172,9 +190,9 @@ func main() {
log.Debug().Msg("debug output enabled")
if (cert != "") && (key != "") {
err = server.ListenAndServeTLS(cert, key)
err = server.ServeTLS(ln, cert, key)
} else {
err = server.ListenAndServe()
err = server.Serve(ln)
}
if err != http.ErrServerClosed {
log.Fatal().Err(err).Msg("ListenAndServe() error")

View file

@ -27,7 +27,7 @@ Regular logs are sent to stderr, HTTP logs are sent to stdout.
*-addr* _addr_
Bind to the specified address/port. Default: ":8080" (port 8080 on all
interfaces.
interfaces. Use "unix:///path/to/socket" to bind to a Unix socket.
*-auth.url* _url_
Auth backend URL (required). See AUTH BACKENDS below.