mirror of
https://github.com/pomerium/pomerium.git
synced 2025-08-02 00:10:45 +02:00
proxy: add support for logging http request headers
This commit is contained in:
parent
86a2fc6807
commit
4d7140a8a2
3 changed files with 45 additions and 1 deletions
|
@ -3,6 +3,7 @@ package log
|
|||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// An AccessLogField is a field in the access logs.
|
||||
|
@ -42,6 +43,21 @@ func DefaultAccessLogFields() []AccessLogField {
|
|||
}
|
||||
}
|
||||
|
||||
const accessLogFieldHeaderPrefix = "header."
|
||||
|
||||
// AccessLogFieldForHeader returns an access log field for the given header name.
|
||||
func AccessLogFieldForHeader(header string) AccessLogField {
|
||||
return AccessLogField(accessLogFieldHeaderPrefix + header)
|
||||
}
|
||||
|
||||
// IsForHeader returns true if the access log field is for a header.
|
||||
func (field AccessLogField) IsForHeader() (headerName string, ok bool) {
|
||||
if strings.HasPrefix(string(field), accessLogFieldHeaderPrefix) {
|
||||
return string(field[len(accessLogFieldHeaderPrefix):]), true
|
||||
}
|
||||
return "", false
|
||||
}
|
||||
|
||||
// ErrUnknownAccessLogField indicates that an access log field is unknown.
|
||||
var ErrUnknownAccessLogField = errors.New("unknown access log field")
|
||||
|
||||
|
@ -62,6 +78,10 @@ var accessLogFieldLookup = map[AccessLogField]struct{}{
|
|||
|
||||
// Validate returns an error if the access log field is invalid.
|
||||
func (field AccessLogField) Validate() error {
|
||||
if _, ok := field.IsForHeader(); ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
_, ok := accessLogFieldLookup[field]
|
||||
if !ok {
|
||||
return fmt.Errorf("%w: %s", ErrUnknownAccessLogField, field)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue