Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2 (Please be gentle).
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

spindle: move MOTD to embedded file

Signed-off-by: oppiliappan <me@oppi.li>

authored by

oppiliappan and committed by
Tangled
f6c2000c 136cd318

+91 -47
+17 -6
spindle/config/config.go
··· 2 2 3 3 import ( 4 4 "context" 5 + "fmt" 5 6 7 + "github.com/bluesky-social/indigo/atproto/syntax" 6 8 "github.com/sethvargo/go-envconfig" 7 9 ) 8 10 9 11 type Server struct { 10 - ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:6555"` 11 - DBPath string `env:"DB_PATH, default=spindle.db"` 12 - Hostname string `env:"HOSTNAME, required"` 13 - JetstreamEndpoint string `env:"JETSTREAM_ENDPOINT, default=wss://jetstream1.us-west.bsky.network/subscribe"` 14 - Dev bool `env:"DEV, default=false"` 15 - Owner string `env:"OWNER, required"` 12 + ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:6555"` 13 + DBPath string `env:"DB_PATH, default=spindle.db"` 14 + Hostname string `env:"HOSTNAME, required"` 15 + JetstreamEndpoint string `env:"JETSTREAM_ENDPOINT, default=wss://jetstream1.us-west.bsky.network/subscribe"` 16 + Dev bool `env:"DEV, default=false"` 17 + Owner string `env:"OWNER, required"` 18 + Secrets Secrets `env:",prefix=SECRETS_"` 19 + } 20 + 21 + func (s Server) Did() syntax.DID { 22 + return syntax.DID(fmt.Sprintf("did:web:%s", s.Hostname)) 23 + } 24 + 25 + type Secrets struct { 26 + Provider string `env:"PROVIDER, default=sqlite"` 16 27 } 17 28 18 29 type Pipelines struct {
+25
spindle/motd
··· 1 + **** 2 + *** *** 3 + *** ** ****** ** 4 + ** * ***** 5 + * ** ** 6 + * * * *************** 7 + ** ** *# ** 8 + * ** ** *** ** 9 + * * ** ** * ****** 10 + * ** ** * ** * * 11 + ** ** *** ** ** * 12 + ** ** * ** * * 13 + ** **** ** * * 14 + ** *** ** ** ** 15 + *** ** ***** 16 + ******************** 17 + ** 18 + * 19 + #************** 20 + ** 21 + ******** 22 + 23 + This is a spindle server. More info at https://tangled.sh/@tangled.sh/core/tree/master/docs/spindle 24 + 25 + Most API routes are under /xrpc/
+49 -41
spindle/server.go
··· 2 2 3 3 import ( 4 4 "context" 5 + _ "embed" 5 6 "encoding/json" 6 7 "fmt" 7 8 "log/slog" ··· 12 11 "tangled.sh/tangled.sh/core/api/tangled" 13 12 "tangled.sh/tangled.sh/core/eventconsumer" 14 13 "tangled.sh/tangled.sh/core/eventconsumer/cursor" 14 + "tangled.sh/tangled.sh/core/idresolver" 15 15 "tangled.sh/tangled.sh/core/jetstream" 16 16 "tangled.sh/tangled.sh/core/log" 17 17 "tangled.sh/tangled.sh/core/notifier" ··· 22 20 "tangled.sh/tangled.sh/core/spindle/engine" 23 21 "tangled.sh/tangled.sh/core/spindle/models" 24 22 "tangled.sh/tangled.sh/core/spindle/queue" 23 + "tangled.sh/tangled.sh/core/spindle/secrets" 24 + "tangled.sh/tangled.sh/core/spindle/xrpc" 25 25 ) 26 + 27 + //go:embed motd 28 + var motd []byte 26 29 27 30 const ( 28 31 rbacDomain = "thisserver" 29 32 ) 30 33 31 34 type Spindle struct { 32 - jc *jetstream.JetstreamClient 33 - db *db.DB 34 - e *rbac.Enforcer 35 - l *slog.Logger 36 - n *notifier.Notifier 37 - eng *engine.Engine 38 - jq *queue.Queue 39 - cfg *config.Config 40 - ks *eventconsumer.Consumer 35 + jc *jetstream.JetstreamClient 36 + db *db.DB 37 + e *rbac.Enforcer 38 + l *slog.Logger 39 + n *notifier.Notifier 40 + eng *engine.Engine 41 + jq *queue.Queue 42 + cfg *config.Config 43 + ks *eventconsumer.Consumer 44 + res *idresolver.Resolver 45 + vault secrets.Manager 41 46 } 42 47 43 48 func Run(ctx context.Context) error { ··· 85 76 } 86 77 jc.AddDid(cfg.Server.Owner) 87 78 79 + resolver := idresolver.DefaultResolver() 80 + 88 81 spindle := Spindle{ 89 - jc: jc, 90 - e: e, 91 - db: d, 92 - l: logger, 93 - n: &n, 94 - eng: eng, 95 - jq: jq, 96 - cfg: cfg, 82 + jc: jc, 83 + e: e, 84 + db: d, 85 + l: logger, 86 + n: &n, 87 + eng: eng, 88 + jq: jq, 89 + cfg: cfg, 90 + res: resolver, 91 + vault: vault, 97 92 } 98 93 99 94 err = e.AddSpindle(rbacDomain) ··· 157 144 mux := chi.NewRouter() 158 145 159 146 mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { 160 - w.Write([]byte( 161 - ` **** 162 - *** *** 163 - *** ** ****** ** 164 - ** * ***** 165 - * ** ** 166 - * * * *************** 167 - ** ** *# ** 168 - * ** ** *** ** 169 - * * ** ** * ****** 170 - * ** ** * ** * * 171 - ** ** *** ** ** * 172 - ** ** * ** * * 173 - ** **** ** * * 174 - ** *** ** ** ** 175 - *** ** ***** 176 - ******************** 177 - ** 178 - * 179 - #************** 180 - ** 181 - ******** 182 - 183 - This is a spindle server. More info at https://tangled.sh/@tangled.sh/core/tree/master/docs/spindle`)) 147 + w.Write(motd) 184 148 }) 185 149 mux.HandleFunc("/events", s.Events) 186 150 mux.HandleFunc("/owner", func(w http.ResponseWriter, r *http.Request) { 187 151 w.Write([]byte(s.cfg.Server.Owner)) 188 152 }) 189 153 mux.HandleFunc("/logs/{knot}/{rkey}/{name}", s.Logs) 154 + 155 + mux.Mount("/xrpc", s.XrpcRouter()) 190 156 return mux 157 + } 158 + 159 + func (s *Spindle) XrpcRouter() http.Handler { 160 + logger := s.l.With("route", "xrpc") 161 + 162 + x := xrpc.Xrpc{ 163 + Logger: logger, 164 + Db: s.db, 165 + Enforcer: s.e, 166 + Engine: s.eng, 167 + Config: s.cfg, 168 + Resolver: s.res, 169 + Vault: s.vault, 170 + } 171 + 172 + return x.Router() 191 173 } 192 174 193 175 func (s *Spindle) processPipeline(ctx context.Context, src eventconsumer.Source, msg eventconsumer.Message) error {