mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 00:57:50 -04:00 
			
		
		
		
	Fix recovery middleware to render gitea style page. (#13857)
* Some changes to fix recovery * Move Recovery to middlewares * Remove trace code * Fix lint * add session middleware and remove dependent on macaron for sso * Fix panic 500 page rendering * Fix bugs * Fix fmt * Fix vendor * recover unnecessary change * Fix lint and addd some comments about the copied codes. * Use util.StatDir instead of com.StatDir Co-authored-by: 6543 <6543@obermui.de>
This commit is contained in:
		
							
								
								
									
										54
									
								
								vendor/github.com/go-chi/chi/context.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										54
									
								
								vendor/github.com/go-chi/chi/context.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -2,9 +2,9 @@ package chi | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"net" | ||||
| 	"net/http" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // URLParam returns the url parameter from a http.Request object. | ||||
| @@ -30,26 +30,6 @@ func RouteContext(ctx context.Context) *Context { | ||||
| 	return val | ||||
| } | ||||
|  | ||||
| // ServerBaseContext wraps an http.Handler to set the request context to the | ||||
| // `baseCtx`. | ||||
| func ServerBaseContext(baseCtx context.Context, h http.Handler) http.Handler { | ||||
| 	fn := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | ||||
| 		ctx := r.Context() | ||||
| 		baseCtx := baseCtx | ||||
|  | ||||
| 		// Copy over default net/http server context keys | ||||
| 		if v, ok := ctx.Value(http.ServerContextKey).(*http.Server); ok { | ||||
| 			baseCtx = context.WithValue(baseCtx, http.ServerContextKey, v) | ||||
| 		} | ||||
| 		if v, ok := ctx.Value(http.LocalAddrContextKey).(net.Addr); ok { | ||||
| 			baseCtx = context.WithValue(baseCtx, http.LocalAddrContextKey, v) | ||||
| 		} | ||||
|  | ||||
| 		h.ServeHTTP(w, r.WithContext(baseCtx)) | ||||
| 	}) | ||||
| 	return fn | ||||
| } | ||||
|  | ||||
| // NewRouteContext returns a new routing Context object. | ||||
| func NewRouteContext() *Context { | ||||
| 	return &Context{} | ||||
| @@ -92,6 +72,11 @@ type Context struct { | ||||
|  | ||||
| 	// methodNotAllowed hint | ||||
| 	methodNotAllowed bool | ||||
|  | ||||
| 	// parentCtx is the parent of this one, for using Context as a | ||||
| 	// context.Context directly. This is an optimization that saves | ||||
| 	// 1 allocation. | ||||
| 	parentCtx context.Context | ||||
| } | ||||
|  | ||||
| // Reset a routing context to its initial state. | ||||
| @@ -107,6 +92,7 @@ func (x *Context) Reset() { | ||||
| 	x.routeParams.Keys = x.routeParams.Keys[:0] | ||||
| 	x.routeParams.Values = x.routeParams.Values[:0] | ||||
| 	x.methodNotAllowed = false | ||||
| 	x.parentCtx = nil | ||||
| } | ||||
|  | ||||
| // URLParam returns the corresponding URL parameter value from the request | ||||
| @@ -160,6 +146,32 @@ func (s *RouteParams) Add(key, value string) { | ||||
| 	s.Values = append(s.Values, value) | ||||
| } | ||||
|  | ||||
| // directContext provides direct access to the routing *Context object, | ||||
| // while implementing the context.Context interface, thereby allowing | ||||
| // us to saving 1 allocation during routing. | ||||
| type directContext Context | ||||
|  | ||||
| var _ context.Context = (*directContext)(nil) | ||||
|  | ||||
| func (d *directContext) Deadline() (deadline time.Time, ok bool) { | ||||
| 	return d.parentCtx.Deadline() | ||||
| } | ||||
|  | ||||
| func (d *directContext) Done() <-chan struct{} { | ||||
| 	return d.parentCtx.Done() | ||||
| } | ||||
|  | ||||
| func (d *directContext) Err() error { | ||||
| 	return d.parentCtx.Err() | ||||
| } | ||||
|  | ||||
| func (d *directContext) Value(key interface{}) interface{} { | ||||
| 	if key == RouteCtxKey { | ||||
| 		return (*Context)(d) | ||||
| 	} | ||||
| 	return d.parentCtx.Value(key) | ||||
| } | ||||
|  | ||||
| // contextKey is a value for use with context.WithValue. It's used as | ||||
| // a pointer so it fits in an interface{} without allocation. This technique | ||||
| // for defining context keys was copied from Go 1.7's new use of context in net/http. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user