this repo has no description
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/rbac2" 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 string = "ActorDid" 24 25type Xrpc struct { 26 Logger *slog.Logger 27 Db *db.DB 28 Enforcer *rbac2.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 52 return r 53} 54 55// this is slightly different from http_util::write_error to follow the spec: 56// 57// the json object returned must include an "error" and a "message" 58func writeError(w http.ResponseWriter, e xrpcerr.XrpcError, status int) { 59 w.Header().Set("Content-Type", "application/json") 60 w.WriteHeader(status) 61 json.NewEncoder(w).Encode(e) 62}