@marcel91200 / caddy Mirror · read-only / commits / 3cf443f0
Fork 0

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 14, 05:15 UTC

httpcaddyfile: Add `grace_period` global option (#4152)

See https://caddyserver.com/docs/json/apps/http/#grace_period

Francis Lavoie committed May 7, 2021 at 18:18 UTC 3cf443f0feee50a5de3f31daf79af1b8f70ebc76
3 files changed +17 -5
caddyconfig/httpcaddyfile/httptype.go
+12 -3
@@ -220,9 +220,10 @@ func (st ServerType) Setup(inputServerBlocks []caddyfile.ServerBlock,
220
221 // now that each server is configured, make the HTTP app
222 httpApp := caddyhttp.App{
223 - HTTPPort: tryInt(options["http_port"], &warnings),
224 - HTTPSPort: tryInt(options["https_port"], &warnings),
225 - Servers: servers,
223 + HTTPPort: tryInt(options["http_port"], &warnings),
224 + HTTPSPort: tryInt(options["https_port"], &warnings),
225 + GracePeriod: tryDuration(options["grace_period"], &warnings),
226 + Servers: servers,
227 }
228
229 // then make the TLS app
@@ -1246,6 +1247,14 @@ func tryString(val interface{}, warnings *[]caddyconfig.Warning) string {
1247 return stringVal
1248 }
1249
1250 +func tryDuration(val interface{}, warnings *[]caddyconfig.Warning) caddy.Duration {
1251 + durationVal, ok := val.(caddy.Duration)
1252 + if val != nil && !ok && warnings != nil {
1253 + *warnings = append(*warnings, caddyconfig.Warning{Message: "not a duration type"})
1254 + }
1255 + return durationVal
1256 +}
1257 +
1258 // sliceContains returns true if needle is in haystack.
1259 func sliceContains(haystack []string, needle string) bool {
1260 for _, s := range haystack {
caddyconfig/httpcaddyfile/options.go
+3 -2
@@ -29,10 +29,11 @@ func init() {
29 RegisterGlobalOption("debug", parseOptTrue)
30 RegisterGlobalOption("http_port", parseOptHTTPPort)
31 RegisterGlobalOption("https_port", parseOptHTTPSPort)
32 + RegisterGlobalOption("grace_period", parseOptDuration)
33 RegisterGlobalOption("default_sni", parseOptSingleString)
34 RegisterGlobalOption("order", parseOptOrder)
35 RegisterGlobalOption("storage", parseOptStorage)
35 - RegisterGlobalOption("storage_clean_interval", parseOptStorageCleanInterval)
36 + RegisterGlobalOption("storage_clean_interval", parseOptDuration)
37 RegisterGlobalOption("acme_ca", parseOptSingleString)
38 RegisterGlobalOption("acme_ca_root", parseOptSingleString)
39 RegisterGlobalOption("acme_dns", parseOptACMEDNS)
@@ -178,7 +179,7 @@ func parseOptStorage(d *caddyfile.Dispenser, _ interface{}) (interface{}, error)
179 return storage, nil
180 }
181
181 -func parseOptStorageCleanInterval(d *caddyfile.Dispenser, _ interface{}) (interface{}, error) {
182 +func parseOptDuration(d *caddyfile.Dispenser, _ interface{}) (interface{}, error) {
183 if !d.Next() { // consume option name
184 return nil, d.ArgErr()
185 }
caddytest/integration/caddyfile_adapt/global_options.txt
+2
@@ -2,6 +2,7 @@
2 debug
3 http_port 8080
4 https_port 8443
5 + grace_period 5s
6 default_sni localhost
7 order root first
8 storage file_system {
@@ -42,6 +43,7 @@
43 "http": {
44 "http_port": 8080,
45 "https_port": 8443,
46 + "grace_period": 5000000000,
47 "servers": {
48 "srv0": {
49 "listen": [