all repos — homestead @ 4b11ea624dc32fdb0950cdb4665656218874a702

Code for my website

determine tailscale remote user and greet them

Alan Pearce
commit

4b11ea624dc32fdb0950cdb4665656218874a702

parent

c641b47bd01a0f1fbf3dc7749594ceec373e794c

1 file changed, 43 insertions(+), 22 deletions(-)

changed files
M domain/content/publisher/barkeep/main.godomain/content/publisher/barkeep/main.go
@@ -1,22 +1,24 @@
package main import ( + "context" "errors" "fmt" "os" + "path/filepath" "github.com/ardanlabs/conf/v3" + "tailscale.com/tsnet" "alin.ovh/homestead/domain/content/publisher" "alin.ovh/homestead/domain/web/server" - "alin.ovh/homestead/domain/web/tssrv" + "alin.ovh/homestead/shared/env" "alin.ovh/x/log" ) type Options struct { Development bool `conf:"flag:dev"` Publisher publisher.Options - Tailscale tssrv.Options Server server.Options }
@@ -35,38 +37,57 @@ log := log.Configure(!options.Development)
if options.Development { options.Publisher.Development = true - options.Tailscale.Development = true + } + + hostname := env.GetEnvFallback("TAILSCALE_HOSTNAME", "barkeep") + stateDir := env.GetEnvFallback("XDG_STATE_HOME", "~/.local/state") + + ts := &tsnet.Server{ + Dir: filepath.Join(stateDir, "barkeep"), + Hostname: hostname, + Ephemeral: options.Development, + } + + lc, err := ts.LocalClient() + if err != nil { + log.Fatal("error creating tailscale local client", "error", err) } + options.Publisher.LocalClient = lc + pub, err := publisher.New(&options.Publisher, log.Named("publisher")) if err != nil { log.Fatal("error running publisher", "error", err) } - if options.Development { - srv, err := server.New(&options.Server, log.Named("server")) - if err != nil { - log.Fatal("error creating server", "error", err) - } + listener, err := ts.ListenTLS("tcp", ":443") + if err != nil { + log.Fatal("error creating tailscale listener", "error", err) + } + + options.Server.Listener = listener + + srv, err := server.New(&options.Server, log.Named("server")) + if err != nil { + log.Fatal("error creating server", "error", err) + } - if err := srv.HostApp(pub.App); err != nil { - log.Fatal("error hosting app", "error", err) - } + if err := srv.HostApp(pub.App); err != nil { + log.Fatal("error hosting app", "error", err) + } - if err := srv.Start(); err != nil { - log.Fatal("error starting server", "error", err) + go func() { + _, err := ts.Up(context.Background()) + if err != nil { + log.Error("error starting tailscale", "error", err) } - return - } + log.Info("starting server", "base_url", options.Publisher.BaseURL) + }() - ts, err := tssrv.New(&options.Tailscale) - if err != nil { - log.Fatal("error creating tailscale server", "error", err) + if err := srv.Start(); err != nil { + log.Fatal("error starting server", "error", err) } - err = ts.Serve(pub.Handler) - if err != nil { - log.Fatal("error serving", "error", err) - } + defer ts.Close() }