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