this repo has no description
1package knotserver 2 3import ( 4 "context" 5 "log/slog" 6 "net/http" 7 8 "github.com/go-chi/chi/v5" 9 "github.com/go-chi/chi/v5/middleware" 10 "tangled.sh/tangled.sh/core/knotserver/config" 11 "tangled.sh/tangled.sh/core/knotserver/db" 12 "tangled.sh/tangled.sh/core/rbac" 13) 14 15type InternalHandle struct { 16 db *db.DB 17 c *config.Config 18 e *rbac.Enforcer 19 l *slog.Logger 20} 21 22func (h *InternalHandle) PushAllowed(w http.ResponseWriter, r *http.Request) { 23 user := r.URL.Query().Get("user") 24 repo := r.URL.Query().Get("repo") 25 26 if user == "" || repo == "" { 27 w.WriteHeader(http.StatusBadRequest) 28 return 29 } 30 31 ok, err := h.e.IsPushAllowed(user, ThisServer, repo) 32 if err != nil || !ok { 33 w.WriteHeader(http.StatusForbidden) 34 return 35 } 36 37 w.WriteHeader(http.StatusNoContent) 38 return 39} 40 41func (h *InternalHandle) InternalKeys(w http.ResponseWriter, r *http.Request) { 42 keys, err := h.db.GetAllPublicKeys() 43 if err != nil { 44 writeError(w, err.Error(), http.StatusInternalServerError) 45 return 46 } 47 48 data := make([]map[string]interface{}, 0) 49 for _, key := range keys { 50 j := key.JSON() 51 data = append(data, j) 52 } 53 writeJSON(w, data) 54 return 55} 56 57func Internal(ctx context.Context, c *config.Config, db *db.DB, e *rbac.Enforcer, l *slog.Logger) http.Handler { 58 r := chi.NewRouter() 59 60 h := InternalHandle{ 61 db, 62 c, 63 e, 64 l, 65 } 66 67 r.Get("/push-allowed", h.PushAllowed) 68 r.Get("/keys", h.InternalKeys) 69 r.Mount("/debug", middleware.Profiler()) 70 71 return r 72}