Something went wrong. Try again.
forked from tangled.org/core
Something went wrong. Try again.
1.3 kB · 66 lines
Go
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667package knotserver
import ( "context" "net/http"
"github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "tangled.sh/tangled.sh/core/knotserver/db" "tangled.sh/tangled.sh/core/rbac")
type InternalHandle struct { db *db.DB e *rbac.Enforcer}
func (h *InternalHandle) PushAllowed(w http.ResponseWriter, r *http.Request) { user := r.URL.Query().Get("user") repo := r.URL.Query().Get("repo")
if user == "" || repo == "" { w.WriteHeader(http.StatusBadRequest) return }
ok, err := h.e.IsPushAllowed(user, ThisServer, repo) if err != nil || !ok { w.WriteHeader(http.StatusForbidden) return }
w.WriteHeader(http.StatusNoContent) return}
func (h *InternalHandle) InternalKeys(w http.ResponseWriter, r *http.Request) { keys, err := h.db.GetAllPublicKeys() if err != nil { writeError(w, err.Error(), http.StatusInternalServerError) return }
data := make([]map[string]interface{}, 0) for _, key := range keys { j := key.JSON() data = append(data, j) } writeJSON(w, data) return}
func Internal(ctx context.Context, db *db.DB, e *rbac.Enforcer) http.Handler { r := chi.NewRouter()
h := InternalHandle{ db, e, }
r.Get("/push-allowed", h.PushAllowed) r.Get("/keys", h.InternalKeys) r.Mount("/debug", middleware.Profiler())
return r}