Monorepo for Tangled tangled.org

spindle/config: add abilility to override motd #906

merged opened by evan.jarrett.net targeting master from evan.jarrett.net/core: spindle-motd
Labels

None yet.

assignee

None yet.

Participants 3
AT URI
at://did:plc:pddp4xt5lgnv2qsegbzzs4xg/sh.tangled.repo.pull/3mahvraqqgz22
+21 -3
Diff #1
+21 -3
spindle/server.go
··· 8 8 "log/slog" 9 9 "maps" 10 10 "net/http" 11 + "sync" 11 12 12 13 "github.com/go-chi/chi/v5" 13 14 "tangled.org/core/api/tangled" ··· 30 31 ) 31 32 32 33 //go:embed motd 33 - var motd []byte 34 + var defaultMotd []byte 34 35 35 36 const ( 36 37 rbacDomain = "thisserver" ··· 47 48 cfg *config.Config 48 49 ks *eventconsumer.Consumer 49 50 res *idresolver.Resolver 50 - vault secrets.Manager 51 + vault secrets.Manager 52 + motd []byte 53 + motdMu sync.RWMutex 51 54 } 52 55 53 56 // New creates a new Spindle server with the provided configuration and engines. ··· 128 131 cfg: cfg, 129 132 res: resolver, 130 133 vault: vault, 134 + motd: defaultMotd, 131 135 } 132 136 133 137 err = e.AddSpindle(rbacDomain) ··· 201 205 return s.e 202 206 } 203 207 208 + // SetMotdContent sets custom MOTD content, replacing the embedded default. 209 + func (s *Spindle) SetMotdContent(content []byte) { 210 + s.motdMu.Lock() 211 + defer s.motdMu.Unlock() 212 + s.motd = content 213 + } 214 + 215 + // GetMotdContent returns the current MOTD content. 216 + func (s *Spindle) GetMotdContent() []byte { 217 + s.motdMu.RLock() 218 + defer s.motdMu.RUnlock() 219 + return s.motd 220 + } 221 + 204 222 // Start starts the Spindle server (blocking). 205 223 func (s *Spindle) Start(ctx context.Context) error { 206 224 // starts a job queue runner in the background ··· 246 264 mux := chi.NewRouter() 247 265 248 266 mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { 249 - w.Write(motd) 267 + w.Write(s.GetMotdContent()) 250 268 }) 251 269 mux.HandleFunc("/events", s.Events) 252 270 mux.HandleFunc("/logs/{knot}/{rkey}/{name}", s.Logs)

History

2 rounds 7 comments
sign up or login to add to the discussion
1 commit
expand
spindle/config: add abilility to override motd
expand 4 comments

Instead of setting the files via the config, what I really want is to just set the byte content directly. I have updated the PR to reflect this.

how is the motd overridden in this scenario? SetMotd is not being called anywhere.

Its not called in tangled core. I'm using tangled as a libary and I was opening it as a way for me to set the motd directly with a []byte, rather than go through the original route I was going to do by setting the MOTD_FILE in the config. I can still go that route, but seems like its going to refactored based on boltless's commit to add datadir.

sounds good, lgtm!

pull request successfully merged
1 commit
expand
spindle/config: add abilility to override motd
expand 3 comments

Thank you for the contribution!

I'd prefer motd file path and db path to be fixed under configurable spindle data dir (see commit), so I might eventually change the config schema later.

But this seems good to merge for now!

I'm using the config directly and specifying my own path to an embedded motd

	if _, err := motdFile.Write(motd); err != nil {
		setupLog.Error(err, "failed to write MOTD temp file")
		os.Exit(1)
	}
	motdFile.Close()
	spindleCfg.Server.MOTDFile = motdFile.Name()

If so, you can do same for {cfg.DataDir}/motd file.

// spindle/config.go
func (s Server) MotdPath() string {
	return filepath.Join(s.DataDir, "motd")
}

// ...
	if err := os.WriteFile(path, data, 0644); err != nil {
		setupLog.Error(err, "failed to write MOTD file")
		os.Exit(1)
	}

Just write embedded motd bytes to {cfg.DataDir}/motd file.