Browse Source
cmd: Fix validate command when JSON contains "@id" fields
Also, don't run admin server when validating...
master
Matthew Holt
5 years ago
No known key found for this signature in database
GPG Key ID: 2A349DD577D586A5
3 changed files with
22 additions and
13 deletions
-
admin.go
-
caddy.go
-
cmd/commandfuncs.go
|
|
@ -734,6 +734,20 @@ traverseLoop: |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
// RemoveMetaFields removes meta fields like "@id" from a JSON message.
|
|
|
|
func RemoveMetaFields(rawJSON []byte) []byte { |
|
|
|
return idRegexp.ReplaceAllFunc(rawJSON, func(in []byte) []byte { |
|
|
|
// matches with a comma on both sides (when "@id" property is
|
|
|
|
// not the first or last in the object) need to keep exactly
|
|
|
|
// one comma for correct JSON syntax
|
|
|
|
comma := []byte{','} |
|
|
|
if bytes.HasPrefix(in, comma) && bytes.HasSuffix(in, comma) { |
|
|
|
return comma |
|
|
|
} |
|
|
|
return []byte{} |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
// AdminHandler is like http.Handler except ServeHTTP may return an error.
|
|
|
|
//
|
|
|
|
// If any handler encounters an error, it should be returned for proper
|
|
|
|
|
|
@ -153,16 +153,7 @@ func changeConfig(method, path string, input []byte, forceReload bool) error { |
|
|
|
// (an alternate way to do this would be to delete them from
|
|
|
|
// rawCfg as they are indexed, then iterate the index we made
|
|
|
|
// and add them back after encoding as JSON)
|
|
|
|
newCfg = idRegexp.ReplaceAllFunc(newCfg, func(in []byte) []byte { |
|
|
|
// matches with a comma on both sides (when "@id" property is
|
|
|
|
// not the first or last in the object) need to keep exactly
|
|
|
|
// one comma for correct JSON syntax
|
|
|
|
comma := []byte{','} |
|
|
|
if bytes.HasPrefix(in, comma) && bytes.HasSuffix(in, comma) { |
|
|
|
return comma |
|
|
|
} |
|
|
|
return []byte{} |
|
|
|
}) |
|
|
|
newCfg = RemoveMetaFields(newCfg) |
|
|
|
|
|
|
|
// load this new config; if it fails, we need to revert to
|
|
|
|
// our old representation of caddy's actual config
|
|
|
@ -295,9 +286,11 @@ func run(newCfg *Config, start bool) error { |
|
|
|
var err error |
|
|
|
|
|
|
|
// start the admin endpoint (and stop any prior one)
|
|
|
|
err = replaceAdmin(newCfg) |
|
|
|
if err != nil { |
|
|
|
return fmt.Errorf("starting caddy administration endpoint: %v", err) |
|
|
|
if start { |
|
|
|
err = replaceAdmin(newCfg) |
|
|
|
if err != nil { |
|
|
|
return fmt.Errorf("starting caddy administration endpoint: %v", err) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if newCfg == nil { |
|
|
|
|
|
@ -465,6 +465,8 @@ func cmdValidateConfig(fl Flags) (int, error) { |
|
|
|
input = adaptedConfig |
|
|
|
} |
|
|
|
|
|
|
|
input = caddy.RemoveMetaFields(input) |
|
|
|
|
|
|
|
var cfg *caddy.Config |
|
|
|
err = json.Unmarshal(input, &cfg) |
|
|
|
if err != nil { |
|
|
|