mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 02:46:04 +01:00 
			
		
		
		
	Use maintained gziphandler (#30592)
Replace #27894 --------- Co-authored-by: delvh <dev.lh@web.de> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		
							
								
								
									
										10
									
								
								assets/go-licenses.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										10
									
								
								assets/go-licenses.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										3
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								go.mod
									
									
									
									
									
								
							| @@ -16,7 +16,6 @@ require ( | |||||||
| 	gitea.com/lunny/levelqueue v0.4.2-0.20230414023320-3c0159fe0fe4 | 	gitea.com/lunny/levelqueue v0.4.2-0.20230414023320-3c0159fe0fe4 | ||||||
| 	github.com/42wim/sshsig v0.0.0-20211121163825-841cf5bbc121 | 	github.com/42wim/sshsig v0.0.0-20211121163825-841cf5bbc121 | ||||||
| 	github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 | 	github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 | ||||||
| 	github.com/NYTimes/gziphandler v1.1.1 |  | ||||||
| 	github.com/PuerkitoBio/goquery v1.9.1 | 	github.com/PuerkitoBio/goquery v1.9.1 | ||||||
| 	github.com/alecthomas/chroma/v2 v2.13.0 | 	github.com/alecthomas/chroma/v2 v2.13.0 | ||||||
| 	github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb | 	github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb | ||||||
| @@ -67,7 +66,7 @@ require ( | |||||||
| 	github.com/json-iterator/go v1.1.12 | 	github.com/json-iterator/go v1.1.12 | ||||||
| 	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 | 	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 | ||||||
| 	github.com/keybase/go-crypto v0.0.0-20200123153347-de78d2cb44f4 | 	github.com/keybase/go-crypto v0.0.0-20200123153347-de78d2cb44f4 | ||||||
| 	github.com/klauspost/compress v1.17.7 | 	github.com/klauspost/compress v1.17.8 | ||||||
| 	github.com/klauspost/cpuid/v2 v2.2.7 | 	github.com/klauspost/cpuid/v2 v2.2.7 | ||||||
| 	github.com/lib/pq v1.10.9 | 	github.com/lib/pq v1.10.9 | ||||||
| 	github.com/markbates/goth v1.79.0 | 	github.com/markbates/goth v1.79.0 | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								go.sum
									
									
									
									
									
								
							| @@ -70,8 +70,6 @@ github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBa | |||||||
| github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= | github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= | ||||||
| github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= | github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= | ||||||
| github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= | github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= | ||||||
| github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= |  | ||||||
| github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= |  | ||||||
| github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= | github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= | ||||||
| github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= | github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= | ||||||
| github.com/PuerkitoBio/goquery v1.9.1 h1:mTL6XjbJTZdpfL+Gwl5U2h1l9yEkJjhmlTeV9VPW7UI= | github.com/PuerkitoBio/goquery v1.9.1 h1:mTL6XjbJTZdpfL+Gwl5U2h1l9yEkJjhmlTeV9VPW7UI= | ||||||
| @@ -500,8 +498,8 @@ github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs | |||||||
| github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= | github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= | ||||||
| github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= | github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= | ||||||
| github.com/klauspost/compress v1.15.6/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= | github.com/klauspost/compress v1.15.6/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= | ||||||
| github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= | github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= | ||||||
| github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= | github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= | ||||||
| github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | ||||||
| github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= | github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= | ||||||
| github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= | github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= | ||||||
|   | |||||||
| @@ -128,6 +128,16 @@ func hasResponseBeenWritten(argsIn []reflect.Value) bool { | |||||||
| 	return false | 	return false | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func wrapHandlerProvider[T http.Handler](hp func(next http.Handler) T, funcInfo *routing.FuncInfo) func(next http.Handler) http.Handler { | ||||||
|  | 	return func(next http.Handler) http.Handler { | ||||||
|  | 		h := hp(next) // this handle could be dynamically generated, so we can't use it for debug info | ||||||
|  | 		return http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) { | ||||||
|  | 			routing.UpdateFuncInfo(req.Context(), funcInfo) | ||||||
|  | 			h.ServeHTTP(resp, req) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| // toHandlerProvider converts a handler to a handler provider | // toHandlerProvider converts a handler to a handler provider | ||||||
| // A handler provider is a function that takes a "next" http.Handler, it can be used as a middleware | // A handler provider is a function that takes a "next" http.Handler, it can be used as a middleware | ||||||
| func toHandlerProvider(handler any) func(next http.Handler) http.Handler { | func toHandlerProvider(handler any) func(next http.Handler) http.Handler { | ||||||
| @@ -138,13 +148,9 @@ func toHandlerProvider(handler any) func(next http.Handler) http.Handler { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if hp, ok := handler.(func(next http.Handler) http.Handler); ok { | 	if hp, ok := handler.(func(next http.Handler) http.Handler); ok { | ||||||
| 		return func(next http.Handler) http.Handler { | 		return wrapHandlerProvider(hp, funcInfo) | ||||||
| 			h := hp(next) // this handle could be dynamically generated, so we can't use it for debug info | 	} else if hp, ok := handler.(func(http.Handler) http.HandlerFunc); ok { | ||||||
| 			return http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) { | 		return wrapHandlerProvider(hp, funcInfo) | ||||||
| 				routing.UpdateFuncInfo(req.Context(), funcInfo) |  | ||||||
| 				h.ServeHTTP(resp, req) |  | ||||||
| 			}) |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	provider := func(next http.Handler) http.Handler { | 	provider := func(next http.Handler) http.Handler { | ||||||
|   | |||||||
| @@ -48,9 +48,9 @@ import ( | |||||||
| 	_ "code.gitea.io/gitea/modules/session" // to registers all internal adapters | 	_ "code.gitea.io/gitea/modules/session" // to registers all internal adapters | ||||||
|  |  | ||||||
| 	"gitea.com/go-chi/captcha" | 	"gitea.com/go-chi/captcha" | ||||||
| 	"github.com/NYTimes/gziphandler" |  | ||||||
| 	chi_middleware "github.com/go-chi/chi/v5/middleware" | 	chi_middleware "github.com/go-chi/chi/v5/middleware" | ||||||
| 	"github.com/go-chi/cors" | 	"github.com/go-chi/cors" | ||||||
|  | 	"github.com/klauspost/compress/gzhttp" | ||||||
| 	"github.com/prometheus/client_golang/prometheus" | 	"github.com/prometheus/client_golang/prometheus" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -241,11 +241,13 @@ func Routes() *web.Route { | |||||||
| 	var mid []any | 	var mid []any | ||||||
|  |  | ||||||
| 	if setting.EnableGzip { | 	if setting.EnableGzip { | ||||||
| 		h, err := gziphandler.GzipHandlerWithOpts(gziphandler.MinSize(GzipMinSize)) | 		// random jitter is recommended by: https://pkg.go.dev/github.com/klauspost/compress/gzhttp#readme-breach-mitigation | ||||||
|  | 		// compression level 6 is the gzip default and a good general tradeoff between speed, CPU usage, and compression | ||||||
|  | 		wrapper, err := gzhttp.NewWrapper(gzhttp.RandomJitter(32, 0, false), gzhttp.MinSize(GzipMinSize), gzhttp.CompressionLevel(6)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			log.Fatal("GzipHandlerWithOpts failed: %v", err) | 			log.Fatal("gzhttp.NewWrapper failed: %v", err) | ||||||
| 		} | 		} | ||||||
| 		mid = append(mid, h) | 		mid = append(mid, wrapper) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if setting.Service.EnableCaptcha { | 	if setting.Service.EnableCaptcha { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user