summaryrefslogtreecommitdiff
path: root/caddyconfig
diff options
context:
space:
mode:
authorMatthew Holt <mholt@users.noreply.github.com>2019-09-02 12:21:41 -0600
committerMatthew Holt <mholt@users.noreply.github.com>2019-09-02 12:21:41 -0600
commit8e821b5039bd6983814a6b1d11894a649c44f74a (patch)
treeb2bb642a5c8168e1da767936ddc31d1d485056ff /caddyconfig
parent9d8bff28c2ba0560d98b545c85ddc7504813dca7 (diff)
caddyconfig: Add JSON5 and JSON-C adapters (closes #2735)
Diffstat (limited to 'caddyconfig')
-rw-r--r--caddyconfig/json5/json5.go43
-rw-r--r--caddyconfig/jsonc/jsonc.go49
2 files changed, 92 insertions, 0 deletions
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)