From 586bfb9f32f1d916b6246ff7f0bd9ce2818dfab0 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 16 Nov 2020 15:33:41 +0800 Subject: [PATCH] Use mount but not register for chi routes (#13555) * Use mount but not register for chi routes * Fix test * Fix test * Fix test * Fix comment * turn back unnecessary change * Remove the timout middleware since some operations may spend much time. --- cmd/web.go | 5 +++-- contrib/pr/checkout.go | 3 ++- integrations/create_no_session_test.go | 6 ++++-- integrations/integration_test.go | 3 ++- routers/install.go | 10 ++++++---- routers/routes/chi.go | 21 +++++++++++++++------ 6 files changed, 32 insertions(+), 16 deletions(-) diff --git a/cmd/web.go b/cmd/web.go index 7dcaee306c..47dbc2675e 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -165,9 +165,10 @@ func runWeb(ctx *cli.Context) error { return err } } - // Set up Macaron + // Set up Chi routes c := routes.NewChi() - routes.RegisterRoutes(c) + c.Mount("/", routes.NormalRoutes()) + routes.DelegateToMacaron(c) err := listen(c, true) <-graceful.GetManager().Done() diff --git a/contrib/pr/checkout.go b/contrib/pr/checkout.go index 7a56b61fe3..5288380825 100644 --- a/contrib/pr/checkout.go +++ b/contrib/pr/checkout.go @@ -118,7 +118,8 @@ func runPR() { external.RegisterParsers() markup.Init() c := routes.NewChi() - routes.RegisterRoutes(c) + c.Mount("/", routes.NormalRoutes()) + routes.DelegateToMacaron(c) log.Printf("[PR] Ready for testing !\n") log.Printf("[PR] Login with user1, user2, user3, ... with pass: password\n") diff --git a/integrations/create_no_session_test.go b/integrations/create_no_session_test.go index 671c6cd517..ae0d9f8120 100644 --- a/integrations/create_no_session_test.go +++ b/integrations/create_no_session_test.go @@ -59,7 +59,8 @@ func TestSessionFileCreation(t *testing.T) { defer func() { setting.SessionConfig.ProviderConfig = oldSessionConfig c = routes.NewChi() - routes.RegisterRoutes(c) + c.Mount("/", routes.NormalRoutes()) + routes.DelegateToMacaron(c) }() var config session.Options @@ -84,7 +85,8 @@ func TestSessionFileCreation(t *testing.T) { setting.SessionConfig.ProviderConfig = string(newConfigBytes) c = routes.NewChi() - routes.RegisterRoutes(c) + c.Mount("/", routes.NormalRoutes()) + routes.DelegateToMacaron(c) t.Run("NoSessionOnViewIssue", func(t *testing.T) { defer PrintCurrentTest(t)() diff --git a/integrations/integration_test.go b/integrations/integration_test.go index 1e42fb5333..00aba15603 100644 --- a/integrations/integration_test.go +++ b/integrations/integration_test.go @@ -68,7 +68,8 @@ func TestMain(m *testing.M) { initIntegrationTest() c = routes.NewChi() - routes.RegisterRoutes(c) + c.Mount("/", routes.NormalRoutes()) + routes.DelegateToMacaron(c) // integration test settings... if setting.Cfg != nil { diff --git a/routers/install.go b/routers/install.go index 5d0d089dc0..4dd934aa04 100644 --- a/routers/install.go +++ b/routers/install.go @@ -58,18 +58,20 @@ func Install(ctx *context.Context) { form.DbSchema = setting.Database.Schema form.Charset = setting.Database.Charset - ctx.Data["CurDbOption"] = "MySQL" + var curDBOption = "MySQL" switch setting.Database.Type { case "postgres": - ctx.Data["CurDbOption"] = "PostgreSQL" + curDBOption = "PostgreSQL" case "mssql": - ctx.Data["CurDbOption"] = "MSSQL" + curDBOption = "MSSQL" case "sqlite3": if setting.EnableSQLite3 { - ctx.Data["CurDbOption"] = "SQLite3" + curDBOption = "SQLite3" } } + ctx.Data["CurDbOption"] = curDBOption + // Application general settings form.AppName = setting.AppName form.RepoRootPath = setting.RepoRootPath diff --git a/routers/routes/chi.go b/routers/routes/chi.go index c78fe96ae4..1165040778 100644 --- a/routers/routes/chi.go +++ b/routers/routes/chi.go @@ -186,6 +186,7 @@ func storageHandler(storageSetting setting.Storage, prefix string, objStore stor // NewChi creates a chi Router func NewChi() chi.Router { c := chi.NewRouter() + c.Use(middleware.RealIP) if !setting.DisableRouterLog && setting.RouterLogLevel != log.NONE { if log.GetLogger("router").GetLevel() <= setting.RouterLogLevel { c.Use(LoggerHandler(setting.RouterLogLevel)) @@ -195,6 +196,7 @@ func NewChi() chi.Router { if setting.EnableAccessLog { setupAccessLogger(c) } + if setting.ProdMode { log.Warn("ProdMode ignored") } @@ -233,28 +235,35 @@ func RegisterInstallRoute(c chi.Router) { }) } -// RegisterRoutes registers gin routes -func RegisterRoutes(c chi.Router) { +// NormalRoutes represents non install routes +func NormalRoutes() http.Handler { + r := chi.NewRouter() + // for health check - c.Head("/", func(w http.ResponseWriter, req *http.Request) { + r.Head("/", func(w http.ResponseWriter, req *http.Request) { w.WriteHeader(http.StatusOK) }) // robots.txt if setting.HasRobotsTxt { - c.Get("/robots.txt", func(w http.ResponseWriter, req *http.Request) { + r.Get("/robots.txt", func(w http.ResponseWriter, req *http.Request) { http.ServeFile(w, req, path.Join(setting.CustomPath, "robots.txt")) }) } + return r +} + +// DelegateToMacaron delegates other routes to macaron +func DelegateToMacaron(r chi.Router) { m := NewMacaron() RegisterMacaronRoutes(m) - c.NotFound(func(w http.ResponseWriter, req *http.Request) { + r.NotFound(func(w http.ResponseWriter, req *http.Request) { m.ServeHTTP(w, req) }) - c.MethodNotAllowed(func(w http.ResponseWriter, req *http.Request) { + r.MethodNotAllowed(func(w http.ResponseWriter, req *http.Request) { m.ServeHTTP(w, req) }) }