mirror of
https://codeberg.org/davrot/forgejo.git
synced 2025-05-20 14:00:04 +02:00
Fix access log (#14475)
Fix #14121, #14478. The `AccessLog` middleware has to be after `Contexter` or `APIContexter` so that we can get `LoginUserName` if possible. And also there is a **BREAK** change that it removed internal API access log.
This commit is contained in:
parent
4c6e029506
commit
a51cc6dea4
10 changed files with 129 additions and 72 deletions
|
@ -12,6 +12,7 @@ type ResponseWriter interface {
|
|||
Flush()
|
||||
Status() int
|
||||
Before(func(ResponseWriter))
|
||||
Size() int
|
||||
}
|
||||
|
||||
var (
|
||||
|
@ -21,11 +22,17 @@ var (
|
|||
// Response represents a response
|
||||
type Response struct {
|
||||
http.ResponseWriter
|
||||
written int
|
||||
status int
|
||||
befores []func(ResponseWriter)
|
||||
beforeExecuted bool
|
||||
}
|
||||
|
||||
// Size return written size
|
||||
func (r *Response) Size() int {
|
||||
return r.written
|
||||
}
|
||||
|
||||
// Write writes bytes to HTTP endpoint
|
||||
func (r *Response) Write(bs []byte) (int, error) {
|
||||
if !r.beforeExecuted {
|
||||
|
@ -35,8 +42,9 @@ func (r *Response) Write(bs []byte) (int, error) {
|
|||
r.beforeExecuted = true
|
||||
}
|
||||
size, err := r.ResponseWriter.Write(bs)
|
||||
r.written += size
|
||||
if err != nil {
|
||||
return 0, err
|
||||
return size, err
|
||||
}
|
||||
if r.status == 0 {
|
||||
r.WriteHeader(200)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue