cloudflare-native port of the tangled knot server
0

Configure Feed

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

aerie / spindle / xrpc / xrpc.go
1.9 kB 72 lines
1package xrpc 2 3import ( 4 _ "embed" 5 "encoding/json" 6 "log/slog" 7 "net/http" 8 9 "github.com/go-chi/chi/v5" 10 11 "tangled.org/core/api/tangled" 12 "tangled.org/core/idresolver" 13 "tangled.org/core/notifier" 14 "tangled.org/core/rbac" 15 "tangled.org/core/spindle/config" 16 "tangled.org/core/spindle/db" 17 "tangled.org/core/spindle/models" 18 "tangled.org/core/spindle/secrets" 19 xrpcerr "tangled.org/core/xrpc/errors" 20 "tangled.org/core/xrpc/serviceauth" 21) 22 23const ActorDid = serviceauth.ActorDid 24 25type Xrpc struct { 26 Logger *slog.Logger 27 Db *db.DB 28 Enforcer *rbac.Enforcer 29 Engines map[string]models.Engine 30 Config *config.Config 31 Resolver *idresolver.Resolver 32 Vault secrets.Manager 33 Notifier *notifier.Notifier 34 ServiceAuth *serviceauth.ServiceAuth 35} 36 37func (x *Xrpc) Router() http.Handler { 38 r := chi.NewRouter() 39 40 r.Group(func(r chi.Router) { 41 r.Use(x.ServiceAuth.VerifyServiceAuth) 42 43 r.Post("/"+tangled.RepoAddSecretNSID, x.AddSecret) 44 r.Post("/"+tangled.RepoRemoveSecretNSID, x.RemoveSecret) 45 r.Get("/"+tangled.RepoListSecretsNSID, x.ListSecrets) 46 r.Post("/"+tangled.PipelineCancelPipelineNSID, x.CancelPipeline) 47 }) 48 49 // service query endpoints (no auth required) 50 r.Get("/"+tangled.OwnerNSID, x.Owner) 51 r.Get("/"+tangled.CiPipelineSubscribeLogsNSID, x.HandleCiPipelineSubscribeLogs) 52 53 return r 54} 55 56// this is slightly different from http_util::write_error to follow the spec: 57// 58// the json object returned must include an "error" and a "message" 59func writeError(w http.ResponseWriter, e xrpcerr.XrpcError, status int) { 60 w.Header().Set("Content-Type", "application/json") 61 w.WriteHeader(status) 62 json.NewEncoder(w).Encode(e) 63} 64 65func writeJson(w http.ResponseWriter, status int, response any) error { 66 w.Header().Set("Content-Type", "application/json") 67 w.WriteHeader(status) 68 if err := json.NewEncoder(w).Encode(response); err != nil { 69 return err 70 } 71 return nil 72}