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}