---
cmd/tokidoki/main.go | 22 ++++++++++++++++++++--
doc/tokidoki.8.scd | 2 +-
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/cmd/tokidoki/main.go b/cmd/tokidoki/main.go
index 3b982f7..06b817c 100644
--- a/cmd/tokidoki/main.go
+++ b/cmd/tokidoki/main.go
@@ -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")
diff --git a/doc/tokidoki.8.scd b/doc/tokidoki.8.scd
index cf2220f..0ea5678 100644
--- a/doc/tokidoki.8.scd
+++ b/doc/tokidoki.8.scd
@@ -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.
--
2.45.1
Thanks!
to git@git.sr.ht:~sircmpwn/tokidoki
4ca7d8c..7969df1 master -> master