Use common sessioner for API and Web (#17027)

* Use common sessioner for API and Web

Instead of creating separate sessioner and doubly initialising the provider just
use the same sessioner for the API and Web routes.

Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
zeripath 2021-09-12 18:35:38 +01:00 committed by GitHub
parent aac7f68af1
commit a334a95a3c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 28 deletions

View file

@ -87,7 +87,6 @@ import (
"code.gitea.io/gitea/services/forms" "code.gitea.io/gitea/services/forms"
"gitea.com/go-chi/binding" "gitea.com/go-chi/binding"
"gitea.com/go-chi/session"
"github.com/go-chi/cors" "github.com/go-chi/cors"
) )
@ -547,20 +546,11 @@ func bind(obj interface{}) http.HandlerFunc {
} }
// Routes registers all v1 APIs routes to web application. // Routes registers all v1 APIs routes to web application.
func Routes() *web.Route { func Routes(sessioner func(http.Handler) http.Handler) *web.Route {
var m = web.NewRoute() var m = web.NewRoute()
m.Use(session.Sessioner(session.Options{ m.Use(sessioner)
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,
}))
m.Use(securityHeaders()) m.Use(securityHeaders())
if setting.CORSConfig.Enabled { if setting.CORSConfig.Enabled {
m.Use(cors.Handler(cors.Options{ m.Use(cors.Handler(cors.Options{

View file

@ -41,6 +41,8 @@ import (
pull_service "code.gitea.io/gitea/services/pull" pull_service "code.gitea.io/gitea/services/pull"
"code.gitea.io/gitea/services/repository" "code.gitea.io/gitea/services/repository"
"code.gitea.io/gitea/services/webhook" "code.gitea.io/gitea/services/webhook"
"gitea.com/go-chi/session"
) )
// NewServices init new services // NewServices init new services
@ -145,8 +147,20 @@ func NormalRoutes() *web.Route {
r.Use(middle) r.Use(middle)
} }
r.Mount("/", web_routers.Routes()) sessioner := session.Sessioner(session.Options{
r.Mount("/api/v1", apiv1.Routes()) 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.Mount("/", web_routers.Routes(sessioner))
r.Mount("/api/v1", apiv1.Routes(sessioner))
r.Mount("/api/internal", private.Routes()) r.Mount("/api/internal", private.Routes())
return r return r
} }

View file

@ -40,7 +40,6 @@ import (
_ "code.gitea.io/gitea/modules/session" _ "code.gitea.io/gitea/modules/session"
"gitea.com/go-chi/captcha" "gitea.com/go-chi/captcha"
"gitea.com/go-chi/session"
"github.com/NYTimes/gziphandler" "github.com/NYTimes/gziphandler"
"github.com/go-chi/chi/middleware" "github.com/go-chi/chi/middleware"
"github.com/go-chi/cors" "github.com/go-chi/cors"
@ -72,7 +71,7 @@ func CorsHandler() func(next http.Handler) http.Handler {
} }
// Routes returns all web routes // Routes returns all web routes
func Routes() *web.Route { func Routes(sessioner func(http.Handler) http.Handler) *web.Route {
routes := web.NewRoute() routes := web.NewRoute()
routes.Use(public.AssetsHandler(&public.Options{ routes.Use(public.AssetsHandler(&public.Options{
@ -81,17 +80,7 @@ func Routes() *web.Route {
CorsHandler: CorsHandler(), CorsHandler: CorsHandler(),
})) }))
routes.Use(session.Sessioner(session.Options{ routes.Use(sessioner)
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,
}))
routes.Use(Recovery()) routes.Use(Recovery())