diff --git a/web/fup/cmd/serve.go b/web/fup/cmd/serve.go index 48ba35475a..2ab5e5b7e3 100644 --- a/web/fup/cmd/serve.go +++ b/web/fup/cmd/serve.go @@ -12,6 +12,7 @@ import ( "os/exec" "strings" + "github.com/coreos/go-systemd/v22/activation" "github.com/google/safehtml" "github.com/spf13/cobra" "hg.lukegb.com/lukegb/depot/web/fup/fuphttp" @@ -72,6 +73,16 @@ var ( http.Handle("/", a.Handler()) http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.FS(fupstatic.Static)))) log.Printf("Serving on %s", serveBind) + if serveBind == "systemd" { + listeners, err := activation.Listeners() + if err != nil { + return fmt.Errorf("getting systemd socket-activated listeners: %v", err) + } + if len(listeners) != 1 { + return fmt.Errorf("unexpected systemd socket activation fds: got %d; want 1", len(listeners)) + } + return http.Serve(listeners[0], nil) + } return http.ListenAndServe(serveBind, nil) }, } diff --git a/web/fup/default.nix b/web/fup/default.nix index 84d23a991e..d74952cd46 100644 --- a/web/fup/default.nix +++ b/web/fup/default.nix @@ -21,7 +21,7 @@ pkgs.buildGoModule { wrapProgram $out/bin/fup --prefix PATH : ${lib.makeBinPath [ depot.third_party.cheddar ]} ''; - vendorSha256 = "sha256:0myd1p61q777ybbwdz8k4nbchh2hv1yr8008061m3gc44s3gsphx"; + vendorSha256 = "sha256:08v3n5lrnbdbs36qpr5brqrainb34nwgm9z2pbxwpj85fxb8ky06"; meta = with pkgs.lib; { description = "Simple file upload manager."; diff --git a/web/fup/go.mod b/web/fup/go.mod index 72206823c9..89cb9f7102 100644 --- a/web/fup/go.mod +++ b/web/fup/go.mod @@ -7,6 +7,7 @@ module hg.lukegb.com/lukegb/depot/web/fup go 1.16 require ( + github.com/coreos/go-systemd/v22 v22.3.0 github.com/dustinkirkland/golang-petname v0.0.0-20191129215211-8e5a1ed0cff0 github.com/gabriel-vasile/mimetype v1.2.0 github.com/google/safehtml v0.0.2 diff --git a/web/fup/go.sum b/web/fup/go.sum index 3e26e764e2..bf1b8e90d0 100644 --- a/web/fup/go.sum +++ b/web/fup/go.sum @@ -104,7 +104,10 @@ github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnht github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.3.0 h1:C8u/Ljj8G8O6rqWJh2J8cDyeEFBMWvXlvJ/ccMyzcqw= +github.com/coreos/go-systemd/v22 v22.3.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -150,6 +153,7 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=