forked from tangled.org/core
this repo has no description
at knot-xrpc 1.5 kB view raw
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.sh/tangled.sh/core/api/tangled" 12 "tangled.sh/tangled.sh/core/idresolver" 13 "tangled.sh/tangled.sh/core/rbac" 14 "tangled.sh/tangled.sh/core/spindle/config" 15 "tangled.sh/tangled.sh/core/spindle/db" 16 "tangled.sh/tangled.sh/core/spindle/engine" 17 "tangled.sh/tangled.sh/core/spindle/secrets" 18 xrpcerr "tangled.sh/tangled.sh/core/xrpc/errors" 19 "tangled.sh/tangled.sh/core/xrpc/serviceauth" 20) 21 22const ActorDid string = "ActorDid" 23 24type Xrpc struct { 25 Logger *slog.Logger 26 Db *db.DB 27 Enforcer *rbac.Enforcer 28 Engine *engine.Engine 29 Config *config.Config 30 Resolver *idresolver.Resolver 31 Vault secrets.Manager 32 ServiceAuth *serviceauth.ServiceAuth 33} 34 35func (x *Xrpc) Router() http.Handler { 36 r := chi.NewRouter() 37 38 r.With(x.ServiceAuth.VerifyServiceAuth).Post("/"+tangled.RepoAddSecretNSID, x.AddSecret) 39 r.With(x.ServiceAuth.VerifyServiceAuth).Post("/"+tangled.RepoRemoveSecretNSID, x.RemoveSecret) 40 r.With(x.ServiceAuth.VerifyServiceAuth).Get("/"+tangled.RepoListSecretsNSID, x.ListSecrets) 41 42 return r 43} 44 45// this is slightly different from http_util::write_error to follow the spec: 46// 47// the json object returned must include an "error" and a "message" 48func writeError(w http.ResponseWriter, e xrpcerr.XrpcError, status int) { 49 w.Header().Set("Content-Type", "application/json") 50 w.WriteHeader(status) 51 json.NewEncoder(w).Encode(e) 52}