forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
at knot-xrpc 1.6 kB view raw
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 r.Group(func(r chi.Router) { 35 r.Use(x.ServiceAuth.VerifyServiceAuth) 36 37 r.Post("/"+tangled.RepoSetDefaultBranchNSID, x.SetDefaultBranch) 38 r.Post("/"+tangled.RepoCreateNSID, x.CreateRepo) 39 r.Post("/"+tangled.RepoDeleteNSID, x.DeleteRepo) 40 r.Post("/"+tangled.RepoForkNSID, x.ForkRepo) 41 r.Post("/"+tangled.RepoForkStatusNSID, x.ForkStatus) 42 r.Post("/"+tangled.RepoForkSyncNSID, x.ForkSync) 43 44 r.Post("/"+tangled.RepoHiddenRefNSID, x.HiddenRef) 45 46 r.Post("/"+tangled.RepoMergeNSID, x.Merge) 47 r.Post("/"+tangled.RepoMergeCheckNSID, x.MergeCheck) 48 }) 49 return r 50} 51 52func writeError(w http.ResponseWriter, e xrpcerr.XrpcError, status int) { 53 w.Header().Set("Content-Type", "application/json") 54 w.WriteHeader(status) 55 json.NewEncoder(w).Encode(e) 56}