forked from forgejo/forgejo
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:
parent
126c9331d6
commit
15a475b7db
75 changed files with 5233 additions and 307 deletions
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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue