aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFrancis Lavoie <[email protected]>2024-02-12 12:15:35 -0500
committerGitHub <[email protected]>2024-02-12 17:15:35 +0000
commit91ec75441ab5b95deec4ee6794f00b3880ec6336 (patch)
treee3a645ddf24dafa79a9270ecb46ab572f64bda96
parente7a534d0a311d9fa75b5981879c755281c4c9fba (diff)
downloadcaddy-91ec75441ab5b95deec4ee6794f00b3880ec6336.tar.gz
caddy-91ec75441ab5b95deec4ee6794f00b3880ec6336.zip
logging: Inline Caddyfile syntax for `ip_mask` filter (#6094)
-rw-r--r--caddytest/integration/caddyfile_adapt/log_filters.txt6
-rw-r--r--modules/logging/filters.go21
2 files changed, 27 insertions, 0 deletions
diff --git a/caddytest/integration/caddyfile_adapt/log_filters.txt b/caddytest/integration/caddyfile_adapt/log_filters.txt
index 776fa68d3..28524a346 100644
--- a/caddytest/integration/caddyfile_adapt/log_filters.txt
+++ b/caddytest/integration/caddyfile_adapt/log_filters.txt
@@ -21,6 +21,7 @@ log {
ipv4 24
ipv6 32
}
+ request>client_ip ip_mask 16 32
request>headers>Regexp regexp secret REDACTED
request>headers>Hash hash
}
@@ -41,6 +42,11 @@ log {
},
"encoder": {
"fields": {
+ "request\u003eclient_ip": {
+ "filter": "ip_mask",
+ "ipv4_cidr": 16,
+ "ipv6_cidr": 32
+ },
"request\u003eheaders\u003eAuthorization": {
"filter": "replace",
"value": "REDACTED"
diff --git a/modules/logging/filters.go b/modules/logging/filters.go
index f38f8c185..79d908fca 100644
--- a/modules/logging/filters.go
+++ b/modules/logging/filters.go
@@ -169,6 +169,27 @@ func (IPMaskFilter) CaddyModule() caddy.ModuleInfo {
// UnmarshalCaddyfile sets up the module from Caddyfile tokens.
func (m *IPMaskFilter) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
d.Next() // consume filter name
+
+ args := d.RemainingArgs()
+ if len(args) > 2 {
+ return d.Errf("too many arguments")
+ }
+ if len(args) > 0 {
+ val, err := strconv.Atoi(args[0])
+ if err != nil {
+ return d.Errf("error parsing %s: %v", args[0], err)
+ }
+ m.IPv4MaskRaw = val
+
+ if len(args) > 1 {
+ val, err := strconv.Atoi(args[1])
+ if err != nil {
+ return d.Errf("error parsing %s: %v", args[1], err)
+ }
+ m.IPv6MaskRaw = val
+ }
+ }
+
for d.NextBlock(0) {
switch d.Val() {
case "ipv4":