From 8e821b5039bd6983814a6b1d11894a649c44f74a Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Mon, 2 Sep 2019 12:21:41 -0600 Subject: caddyconfig: Add JSON5 and JSON-C adapters (closes #2735) --- caddyconfig/json5/json5.go | 43 ++++++++++++++++++++++++++++++++++++++++ caddyconfig/jsonc/jsonc.go | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 caddyconfig/json5/json5.go create mode 100644 caddyconfig/jsonc/jsonc.go (limited to 'caddyconfig') diff --git a/caddyconfig/json5/json5.go b/caddyconfig/json5/json5.go new file mode 100644 index 0000000..2c86301 --- /dev/null +++ b/caddyconfig/json5/json5.go @@ -0,0 +1,43 @@ +// Copyright 2015 Matthew Holt and The Caddy Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package json5adapter + +import ( + "encoding/json" + + "github.com/caddyserver/caddy/v2/caddyconfig" + "github.com/ilibs/json5" +) + +func init() { + caddyconfig.RegisterAdapter("json5", Adapter{}) +} + +// Adapter adapts JSON5 to Caddy JSON. +type Adapter struct{} + +// Adapt converts the JSON5 config in body to Caddy JSON. +func (a Adapter) Adapt(body []byte, options map[string]interface{}) (result []byte, warnings []caddyconfig.Warning, err error) { + var decoded interface{} + err = json5.Unmarshal(body, &decoded) + if err != nil { + return + } + result, err = json.Marshal(decoded) + return +} + +// Interface guard +var _ caddyconfig.Adapter = (*Adapter)(nil) diff --git a/caddyconfig/jsonc/jsonc.go b/caddyconfig/jsonc/jsonc.go new file mode 100644 index 0000000..4f72c05 --- /dev/null +++ b/caddyconfig/jsonc/jsonc.go @@ -0,0 +1,49 @@ +// Copyright 2015 Matthew Holt and The Caddy Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package jsoncadapter + +import ( + "encoding/json" + + "github.com/caddyserver/caddy/v2/caddyconfig" + "github.com/muhammadmuzzammil1998/jsonc" +) + +func init() { + caddyconfig.RegisterAdapter("jsonc", Adapter{}) +} + +// Adapter adapts JSON-C to Caddy JSON. +type Adapter struct{} + +// Adapt converts the JSON-C config in body to Caddy JSON. +func (a Adapter) Adapt(body []byte, options map[string]interface{}) (result []byte, warnings []caddyconfig.Warning, err error) { + result = jsonc.ToJSON(body) + + // any errors in the JSON will be + // reported during config load, but + // we can at least warn here that + // it is not valid JSON + if !json.Valid(result) { + warnings = append(warnings, caddyconfig.Warning{ + Message: "Resulting JSON is invalid.", + }) + } + + return +} + +// Interface guard +var _ caddyconfig.Adapter = (*Adapter)(nil) -- cgit v1.2.3