mirror of
https://github.com/caddyserver/caddy.git
synced 2024-11-25 09:14:53 +08:00
cmd: Fix validate command when JSON contains "@id" fields
Also, don't run admin server when validating...
This commit is contained in:
parent
2e0615270d
commit
f935458e3e
14
admin.go
14
admin.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
|
||||
|
|
19
caddy.go
19
caddy.go
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue
Block a user