From ba43cd193c78eb70c4734d95f5864bfffde3277d Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 17 Aug 2025 16:10:12 +0800 Subject: Unspaghetti the handler --- forged/internal/incoming/web/handler.go | 51 +++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) (limited to 'forged/internal/incoming/web/handler.go') diff --git a/forged/internal/incoming/web/handler.go b/forged/internal/incoming/web/handler.go index e638bf7..9018547 100644 --- a/forged/internal/incoming/web/handler.go +++ b/forged/internal/incoming/web/handler.go @@ -1,8 +1,55 @@ +// internal/incoming/web/handler.go package web -import "net/http" +import ( + "net/http" + "path/filepath" +) -type handler struct{} +type handler struct { + r *Router +} + +func NewHandler(cfg Config) http.Handler { + h := &handler{r: NewRouter().ReverseProxy(cfg.ReverseProxy)} + + // Static files + staticDir := filepath.Join(cfg.Root, "static") + staticFS := http.FileServer(http.Dir(staticDir)) + h.r.ANYHTTP("-/static/*rest", + http.StripPrefix("/-/static/", staticFS), + WithDirIfEmpty("rest"), + ) + + // Index + h.r.GET("/", h.index) + + // Top-level utilities + h.r.ANY("-/login", h.notImplemented) + h.r.ANY("-/users", h.notImplemented) + + // Group index + h.r.GET("@group/", h.groupIndex) + + // Repo index + h.r.GET("@group/-/repos/:repo/", h.repoIndex) + + // Repo + h.r.ANY("@group/-/repos/:repo/info", h.notImplemented) + h.r.ANY("@group/-/repos/:repo/git-upload-pack", h.notImplemented) + + // Repo features + h.r.GET("@group/-/repos/:repo/branches/", h.notImplemented) + h.r.GET("@group/-/repos/:repo/log/", h.notImplemented) + h.r.GET("@group/-/repos/:repo/commit/:commit", h.notImplemented) + h.r.GET("@group/-/repos/:repo/tree/*rest", h.repoTree, WithDirIfEmpty("rest")) + h.r.GET("@group/-/repos/:repo/raw/*rest", h.repoRaw, WithDirIfEmpty("rest")) + h.r.GET("@group/-/repos/:repo/contrib/", h.notImplemented) + h.r.GET("@group/-/repos/:repo/contrib/:mr", h.notImplemented) + + return h +} func (h *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + h.r.ServeHTTP(w, r) } -- cgit v1.2.3