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