forked from tangled.org/core
this repo has no description
1package xrpc 2 3import ( 4 "encoding/json" 5 "log/slog" 6 "net/http" 7 8 "tangled.sh/tangled.sh/core/api/tangled" 9 "tangled.sh/tangled.sh/core/idresolver" 10 "tangled.sh/tangled.sh/core/jetstream" 11 "tangled.sh/tangled.sh/core/knotserver/config" 12 "tangled.sh/tangled.sh/core/knotserver/db" 13 "tangled.sh/tangled.sh/core/notifier" 14 "tangled.sh/tangled.sh/core/rbac" 15 xrpcerr "tangled.sh/tangled.sh/core/xrpc/errors" 16 "tangled.sh/tangled.sh/core/xrpc/serviceauth" 17 18 "github.com/go-chi/chi/v5" 19) 20 21type Xrpc struct { 22 Config *config.Config 23 Db *db.DB 24 Ingester *jetstream.JetstreamClient 25 Enforcer *rbac.Enforcer 26 Logger *slog.Logger 27 Notifier *notifier.Notifier 28 Resolver *idresolver.Resolver 29 ServiceAuth *serviceauth.ServiceAuth 30} 31 32func (x *Xrpc) Router() http.Handler { 33 r := chi.NewRouter() 34 35 r.Group(func(r chi.Router) { 36 r.Use(x.ServiceAuth.VerifyServiceAuth) 37 38 r.Post("/"+tangled.RepoSetDefaultBranchNSID, x.SetDefaultBranch) 39 r.Post("/"+tangled.RepoCreateNSID, x.CreateRepo) 40 r.Post("/"+tangled.RepoDeleteNSID, x.DeleteRepo) 41 r.Post("/"+tangled.RepoForkStatusNSID, x.ForkStatus) 42 r.Post("/"+tangled.RepoForkSyncNSID, x.ForkSync) 43 r.Post("/"+tangled.RepoHiddenRefNSID, x.HiddenRef) 44 r.Post("/"+tangled.RepoMergeNSID, x.Merge) 45 }) 46 47 // merge check is an open endpoint 48 // 49 // TODO: should we constrain this more? 50 // - we can calculate on PR submit/resubmit/gitRefUpdate etc. 51 // - use ETags on clients to keep requests to a minimum 52 r.Post("/"+tangled.RepoMergeCheckNSID, x.MergeCheck) 53 return r 54} 55 56func writeError(w http.ResponseWriter, e xrpcerr.XrpcError, status int) { 57 w.Header().Set("Content-Type", "application/json") 58 w.WriteHeader(status) 59 json.NewEncoder(w).Encode(e) 60}