Refactor "route" related code, fix Safari cookie bug (#24330)
Fix #24176 Clean some misuses of route package, clean some legacy FIXMEs --------- Co-authored-by: Giteabot <teabot@gitea.io>
This commit is contained in:
parent
1c875ef5be
commit
92fd3fc4fd
14 changed files with 264 additions and 253 deletions
|
@ -19,8 +19,6 @@ import (
|
|||
"code.gitea.io/gitea/routers/common"
|
||||
"code.gitea.io/gitea/routers/web/healthcheck"
|
||||
"code.gitea.io/gitea/services/forms"
|
||||
|
||||
"gitea.com/go-chi/session"
|
||||
)
|
||||
|
||||
type dataStore map[string]interface{}
|
||||
|
@ -30,7 +28,6 @@ func (d *dataStore) GetData() map[string]interface{} {
|
|||
}
|
||||
|
||||
func installRecovery(ctx goctx.Context) func(next http.Handler) http.Handler {
|
||||
_, rnd := templates.HTMLRenderer(ctx)
|
||||
return func(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||
defer func() {
|
||||
|
@ -69,6 +66,7 @@ func installRecovery(ctx goctx.Context) func(next http.Handler) http.Handler {
|
|||
if !setting.IsProd {
|
||||
store["ErrorMsg"] = combinedErr
|
||||
}
|
||||
_, rnd := templates.HTMLRenderer(ctx)
|
||||
err = rnd.HTML(w, http.StatusInternalServerError, "status/500", templates.BaseVars().Merge(store))
|
||||
if err != nil {
|
||||
log.Error("%v", err)
|
||||
|
@ -83,34 +81,22 @@ func installRecovery(ctx goctx.Context) func(next http.Handler) http.Handler {
|
|||
|
||||
// Routes registers the installation routes
|
||||
func Routes(ctx goctx.Context) *web.Route {
|
||||
base := web.NewRoute()
|
||||
base.Use(common.ProtocolMiddlewares()...)
|
||||
base.RouteMethods("/assets/*", "GET, HEAD", public.AssetsHandlerFunc("/assets/"))
|
||||
|
||||
r := web.NewRoute()
|
||||
for _, middle := range common.Middlewares() {
|
||||
r.Use(middle)
|
||||
}
|
||||
|
||||
r.Use(web.MiddlewareWithPrefix("/assets/", nil, public.AssetsHandlerFunc("/assets/")))
|
||||
|
||||
r.Use(session.Sessioner(session.Options{
|
||||
Provider: setting.SessionConfig.Provider,
|
||||
ProviderConfig: setting.SessionConfig.ProviderConfig,
|
||||
CookieName: setting.SessionConfig.CookieName,
|
||||
CookiePath: setting.SessionConfig.CookiePath,
|
||||
Gclifetime: setting.SessionConfig.Gclifetime,
|
||||
Maxlifetime: setting.SessionConfig.Maxlifetime,
|
||||
Secure: setting.SessionConfig.Secure,
|
||||
SameSite: setting.SessionConfig.SameSite,
|
||||
Domain: setting.SessionConfig.Domain,
|
||||
}))
|
||||
|
||||
r.Use(common.Sessioner())
|
||||
r.Use(installRecovery(ctx))
|
||||
r.Use(Init(ctx))
|
||||
r.Get("/", Install) // it must be on the root, because the "install.js" use the window.location to replace the "localhost" AppURL
|
||||
r.Post("/", web.Bind(forms.InstallForm{}), SubmitInstall)
|
||||
r.Get("/post-install", InstallDone)
|
||||
r.Get("/api/healthz", healthcheck.Check)
|
||||
|
||||
r.NotFound(installNotFound)
|
||||
return r
|
||||
|
||||
base.Mount("", r)
|
||||
return base
|
||||
}
|
||||
|
||||
func installNotFound(w http.ResponseWriter, req *http.Request) {
|
||||
|
|
|
@ -11,11 +11,14 @@ import (
|
|||
)
|
||||
|
||||
func TestRoutes(t *testing.T) {
|
||||
// TODO: this test seems not really testing the handlers
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
routes := Routes(ctx)
|
||||
assert.NotNil(t, routes)
|
||||
assert.EqualValues(t, "/", routes.R.Routes()[0].Pattern)
|
||||
assert.Nil(t, routes.R.Routes()[0].SubRoutes)
|
||||
assert.Len(t, routes.R.Routes()[0].Handlers, 2)
|
||||
base := Routes(ctx)
|
||||
assert.NotNil(t, base)
|
||||
r := base.R.Routes()[1]
|
||||
routes := r.SubRoutes.Routes()[0]
|
||||
assert.EqualValues(t, "/", routes.Pattern)
|
||||
assert.Nil(t, routes.SubRoutes)
|
||||
assert.Len(t, routes.Handlers, 2)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue