mirror of
https://github.com/pomerium/pomerium.git
synced 2025-04-29 18:36:30 +02:00
81 lines
2.6 KiB
Go
81 lines
2.6 KiB
Go
package log
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
// An AccessLogField is a field in the access logs.
|
|
type AccessLogField string
|
|
|
|
// known access log fields
|
|
const (
|
|
AccessLogFieldAuthority AccessLogField = "authority"
|
|
AccessLogFieldDuration AccessLogField = "duration"
|
|
AccessLogFieldForwardedFor AccessLogField = "forwarded-for"
|
|
AccessLogFieldIP AccessLogField = "ip"
|
|
AccessLogFieldMethod AccessLogField = "method"
|
|
AccessLogFieldPath AccessLogField = "path"
|
|
AccessLogFieldQuery AccessLogField = "query"
|
|
AccessLogFieldReferer AccessLogField = "referer"
|
|
AccessLogFieldRequestID AccessLogField = "request-id"
|
|
AccessLogFieldResponseCode AccessLogField = "response-code"
|
|
AccessLogFieldResponseCodeDetails AccessLogField = "response-code-details"
|
|
AccessLogFieldSize AccessLogField = "size"
|
|
AccessLogFieldUpstreamCluster AccessLogField = "upstream-cluster"
|
|
AccessLogFieldUserAgent AccessLogField = "user-agent"
|
|
)
|
|
|
|
var defaultAccessLogFields = []AccessLogField{
|
|
AccessLogFieldUpstreamCluster,
|
|
AccessLogFieldMethod,
|
|
AccessLogFieldAuthority,
|
|
AccessLogFieldPath,
|
|
AccessLogFieldUserAgent,
|
|
AccessLogFieldReferer,
|
|
AccessLogFieldForwardedFor,
|
|
AccessLogFieldRequestID,
|
|
AccessLogFieldDuration,
|
|
AccessLogFieldSize,
|
|
AccessLogFieldResponseCode,
|
|
AccessLogFieldResponseCodeDetails,
|
|
}
|
|
|
|
// DefaultAccessLogFields returns the default access log fields.
|
|
func DefaultAccessLogFields() []AccessLogField {
|
|
return defaultAccessLogFields
|
|
}
|
|
|
|
// ErrUnknownAccessLogField indicates that an access log field is unknown.
|
|
var ErrUnknownAccessLogField = errors.New("unknown access log field")
|
|
|
|
var accessLogFieldLookup = map[AccessLogField]struct{}{
|
|
AccessLogFieldAuthority: {},
|
|
AccessLogFieldDuration: {},
|
|
AccessLogFieldForwardedFor: {},
|
|
AccessLogFieldIP: {},
|
|
AccessLogFieldMethod: {},
|
|
AccessLogFieldPath: {},
|
|
AccessLogFieldQuery: {},
|
|
AccessLogFieldReferer: {},
|
|
AccessLogFieldRequestID: {},
|
|
AccessLogFieldResponseCode: {},
|
|
AccessLogFieldResponseCodeDetails: {},
|
|
AccessLogFieldSize: {},
|
|
AccessLogFieldUpstreamCluster: {},
|
|
AccessLogFieldUserAgent: {},
|
|
}
|
|
|
|
// Validate returns an error if the access log field is invalid.
|
|
func (field AccessLogField) Validate() error {
|
|
if _, ok := GetHeaderField(field); ok {
|
|
return nil
|
|
}
|
|
|
|
_, ok := accessLogFieldLookup[field]
|
|
if !ok {
|
|
return fmt.Errorf("%w: %s", ErrUnknownAccessLogField, field)
|
|
}
|
|
|
|
return nil
|
|
}
|