]> granicus.if.org Git - icinga2/commitdiff
API: Fix error message handling for invalid attributes in PUT requests
authorMichael Friedrich <michael.friedrich@netways.de>
Tue, 10 May 2016 11:42:05 +0000 (13:42 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Tue, 10 May 2016 11:43:36 +0000 (13:43 +0200)
refs #11396

lib/remote/createobjecthandler.cpp

index a680feaef9d236a744419afd0a537a48f5562892..2aca205c470722fee7bb720f60ea72a3afe8c172 100644 (file)
@@ -62,14 +62,29 @@ bool CreateObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& r
        if (params->Contains("ignore_on_error"))
                ignoreOnError = HttpUtility::GetLastParameter(params, "ignore_on_error");
 
-       String config = ConfigObjectUtility::CreateObjectConfig(type, name, ignoreOnError, templates, attrs);
-
        Array::Ptr results = new Array();
        results->Add(result1);
 
        Dictionary::Ptr result = new Dictionary();
        result->Set("results", results);
 
+       String config;
+
+       try {
+               config = ConfigObjectUtility::CreateObjectConfig(type, name, ignoreOnError, templates, attrs);
+       } catch (const std::exception& ex) {
+               errors->Add(DiagnosticInformation(ex));
+
+               result1->Set("errors", errors);
+               result1->Set("code", 500);
+               result1->Set("status", "Object could not be created.");
+
+               response.SetStatus(500, "Object could not be created");
+               HttpUtility::SendJsonBody(response, result);
+
+               return true;
+       }
+
        if (!ConfigObjectUtility::CreateObject(type, name, config, errors)) {
                result1->Set("errors", errors);
                result1->Set("code", 500);