summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorman Soetbeer <norman.soetbeer@gmail.com>2023-10-11 22:24:29 +0200
committerGitHub <noreply@github.com>2023-10-11 20:24:29 +0000
commit0e204b730aa2b1fa0835336b1117eff8c420f713 (patch)
treee1cb44e7d54e347e57ea9c5b3c95dc529b1d1d22
parentfae195ac7eb9f4b0e9436384cd0529a11355e367 (diff)
admin: Respond with 4xx on non-existing config path (#5870)
Co-authored-by: Matt Holt <mholt@users.noreply.github.com>
-rw-r--r--admin.go16
-rw-r--r--admin_test.go6
2 files changed, 20 insertions, 2 deletions
diff --git a/admin.go b/admin.go
index 335b8e8..0a9bfc4 100644
--- a/admin.go
+++ b/admin.go
@@ -1196,15 +1196,27 @@ traverseLoop:
}
case http.MethodPut:
if _, ok := v[part]; ok {
- return fmt.Errorf("[%s] key already exists: %s", path, part)
+ return APIError{
+ HTTPStatus: http.StatusConflict,
+ Err: fmt.Errorf("[%s] key already exists: %s", path, part),
+ }
}
v[part] = val
case http.MethodPatch:
if _, ok := v[part]; !ok {
- return fmt.Errorf("[%s] key does not exist: %s", path, part)
+ return APIError{
+ HTTPStatus: http.StatusNotFound,
+ Err: fmt.Errorf("[%s] key does not exist: %s", path, part),
+ }
}
v[part] = val
case http.MethodDelete:
+ if _, ok := v[part]; !ok {
+ return APIError{
+ HTTPStatus: http.StatusNotFound,
+ Err: fmt.Errorf("[%s] key does not exist: %s", path, part),
+ }
+ }
delete(v, part)
default:
return fmt.Errorf("unrecognized method %s", method)
diff --git a/admin_test.go b/admin_test.go
index 04aa886..9137a88 100644
--- a/admin_test.go
+++ b/admin_test.go
@@ -76,6 +76,12 @@ func TestUnsyncedConfigAccess(t *testing.T) {
expect: `{"foo": "jet", "bar": {"aa": "bb"}, "list": ["a", "b", "c"]}`,
},
{
+ method: "DELETE",
+ path: "/bar/qq",
+ expect: `{"foo": "jet", "bar": {"aa": "bb"}, "list": ["a", "b", "c"]}`,
+ shouldErr: true,
+ },
+ {
method: "POST",
path: "/list",
payload: `"e"`,