From 93c99f67342504efe9f6b58a734aaec3929fe785 Mon Sep 17 00:00:00 2001
From: Matthew Holt <mholt@users.noreply.github.com>
Date: Thu, 17 Mar 2022 17:53:32 -0600
Subject: [PATCH] map: Support numeric and bool types with Caddyfile

Based on caddyserver/website#221
---
 modules/caddyhttp/map/caddyfile.go | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/modules/caddyhttp/map/caddyfile.go b/modules/caddyhttp/map/caddyfile.go
index 77d4c46da..a7f809b00 100644
--- a/modules/caddyhttp/map/caddyfile.go
+++ b/modules/caddyhttp/map/caddyfile.go
@@ -15,6 +15,7 @@
 package maphandler
 
 import (
+	"strconv"
 	"strings"
 
 	"github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile"
@@ -78,7 +79,7 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error)
 				if out == "-" {
 					outs = append(outs, nil)
 				} else {
-					outs = append(outs, out)
+					outs = append(outs, specificType(out))
 				}
 			}
 
@@ -107,3 +108,16 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error)
 
 	return handler, nil
 }
+
+func specificType(v string) interface{} {
+	if num, err := strconv.Atoi(v); err == nil {
+		return num
+	}
+	if num, err := strconv.ParseFloat(v, 64); err == nil {
+		return num
+	}
+	if bool, err := strconv.ParseBool(v); err == nil {
+		return bool
+	}
+	return v
+}