]> granicus.if.org Git - icinga2/commitdiff
API: Fix error handling for invalid JSON request body
authorMichael Friedrich <michael.friedrich@netways.de>
Tue, 10 May 2016 13:16:35 +0000 (15:16 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Thu, 12 May 2016 09:09:49 +0000 (11:09 +0200)
fixes #11757

28 files changed:
lib/remote/actionshandler.cpp
lib/remote/actionshandler.hpp
lib/remote/configfileshandler.cpp
lib/remote/configfileshandler.hpp
lib/remote/configpackageshandler.cpp
lib/remote/configpackageshandler.hpp
lib/remote/configstageshandler.cpp
lib/remote/configstageshandler.hpp
lib/remote/consolehandler.cpp
lib/remote/consolehandler.hpp
lib/remote/createobjecthandler.cpp
lib/remote/createobjecthandler.hpp
lib/remote/deleteobjecthandler.cpp
lib/remote/deleteobjecthandler.hpp
lib/remote/eventshandler.cpp
lib/remote/eventshandler.hpp
lib/remote/httphandler.cpp
lib/remote/httphandler.hpp
lib/remote/infohandler.cpp
lib/remote/infohandler.hpp
lib/remote/modifyobjecthandler.cpp
lib/remote/modifyobjecthandler.hpp
lib/remote/objectqueryhandler.cpp
lib/remote/objectqueryhandler.hpp
lib/remote/statushandler.cpp
lib/remote/statushandler.hpp
lib/remote/typequeryhandler.cpp
lib/remote/typequeryhandler.hpp

index 1ab952327fd88c81672e99a410256d7d2e2c5061..998c765d7f9da58c23aaa6b122a72fa40fcde01e 100644 (file)
@@ -31,7 +31,7 @@ using namespace icinga;
 
 REGISTER_URLHANDLER("/v1/actions", ActionsHandler);
 
-bool ActionsHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool ActionsHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestUrl->GetPath().size() != 3)
                return false;
@@ -50,8 +50,6 @@ bool ActionsHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& reques
 
        QueryDescription qd;
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        const std::vector<String>& types = action->GetTypes();
        std::vector<Value> objs;
 
index 1e7354a3312563f37f616baf4080a07a9e39ccb6..41d5a5da0913bacd49afb8401f125cc3e064a014 100644 (file)
@@ -30,7 +30,8 @@ class I2_REMOTE_API ActionsHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(ActionsHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 };
 
 }
index 7de396d6986005b966351797c39a0f300b289050..aee9b722698f01ed1d1aa65a13ee3e2670076c06 100644 (file)
@@ -29,13 +29,11 @@ using namespace icinga;
 
 REGISTER_URLHANDLER("/v1/config/files", ConfigFilesHandler);
 
-bool ConfigFilesHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool ConfigFilesHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestMethod != "GET")
                return false;
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        const std::vector<String>& urlPath = request.RequestUrl->GetPath();
 
        if (urlPath.size() >= 4)
index f74cdda8ef97fb4d25cfad492f8923f45685426f..d330b981b5001b4cfc6254738e7e67402712cf4b 100644 (file)
@@ -30,7 +30,8 @@ class I2_REMOTE_API ConfigFilesHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(ConfigFilesHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 };
 
 }
index 3ab277b9652524d61ee81c9770b5830778d5a5c6..dde0350f9bf550453de9b9bb6bb5537f084380e9 100644 (file)
@@ -28,7 +28,7 @@ using namespace icinga;
 
 REGISTER_URLHANDLER("/v1/config/packages", ConfigPackagesHandler);
 
-bool ConfigPackagesHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool ConfigPackagesHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestUrl->GetPath().size() > 4)
                return false;
@@ -36,9 +36,9 @@ bool ConfigPackagesHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest&
        if (request.RequestMethod == "GET")
                HandleGet(user, request, response);
        else if (request.RequestMethod == "POST")
-               HandlePost(user, request, response);
+               HandlePost(user, request, response, params);
        else if (request.RequestMethod == "DELETE")
-               HandleDelete(user, request, response);
+               HandleDelete(user, request, response, params);
        else
                return false;
 
@@ -68,12 +68,10 @@ void ConfigPackagesHandler::HandleGet(const ApiUser::Ptr& user, HttpRequest& req
        HttpUtility::SendJsonBody(response, result);
 }
 
-void ConfigPackagesHandler::HandlePost(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+void ConfigPackagesHandler::HandlePost(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        FilterUtility::CheckPermission(user, "config/modify");
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        if (request.RequestUrl->GetPath().size() >= 4)
                params->Set("package", request.RequestUrl->GetPath()[3]);
 
@@ -106,12 +104,10 @@ void ConfigPackagesHandler::HandlePost(const ApiUser::Ptr& user, HttpRequest& re
        HttpUtility::SendJsonBody(response, result);
 }
 
-void ConfigPackagesHandler::HandleDelete(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+void ConfigPackagesHandler::HandleDelete(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        FilterUtility::CheckPermission(user, "config/modify");
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        if (request.RequestUrl->GetPath().size() >= 4)
                params->Set("package", request.RequestUrl->GetPath()[3]);
 
index 41483ce8c31a0265a05e78cbfbaa7cab79b70f99..1e0fda6b1e53200b9e048590ef493730f3c21d02 100644 (file)
@@ -30,12 +30,16 @@ class I2_REMOTE_API ConfigPackagesHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(ConfigPackagesHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 
 private:
-       void HandleGet(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response);
-       void HandlePost(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response);
-       void HandleDelete(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response);
+       void HandleGet(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response);
+       void HandlePost(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params);
+       void HandleDelete(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params);
 
 };
 
index 5e85d015d67370483da056cba0ef0111b5aa7a56..390a176d294a939fb4609e9627d1f1e928e43d9b 100644 (file)
@@ -30,29 +30,27 @@ using namespace icinga;
 
 REGISTER_URLHANDLER("/v1/config/stages", ConfigStagesHandler);
 
-bool ConfigStagesHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool ConfigStagesHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestUrl->GetPath().size() > 5)
                return false;
 
        if (request.RequestMethod == "GET")
-               HandleGet(user, request, response);
+               HandleGet(user, request, response, params);
        else if (request.RequestMethod == "POST")
-               HandlePost(user, request, response);
+               HandlePost(user, request, response, params);
        else if (request.RequestMethod == "DELETE")
-               HandleDelete(user, request, response);
+               HandleDelete(user, request, response, params);
        else
                return false;
 
        return true;
 }
 
-void ConfigStagesHandler::HandleGet(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+void ConfigStagesHandler::HandleGet(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        FilterUtility::CheckPermission(user, "config/query");
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        if (request.RequestUrl->GetPath().size() >= 4)
                params->Set("package", request.RequestUrl->GetPath()[3]);
 
@@ -89,12 +87,10 @@ void ConfigStagesHandler::HandleGet(const ApiUser::Ptr& user, HttpRequest& reque
        HttpUtility::SendJsonBody(response, result);
 }
 
-void ConfigStagesHandler::HandlePost(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+void ConfigStagesHandler::HandlePost(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        FilterUtility::CheckPermission(user, "config/modify");
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        if (request.RequestUrl->GetPath().size() >= 4)
                params->Set("package", request.RequestUrl->GetPath()[3]);
 
@@ -138,12 +134,10 @@ void ConfigStagesHandler::HandlePost(const ApiUser::Ptr& user, HttpRequest& requ
        HttpUtility::SendJsonBody(response, result);
 }
 
-void ConfigStagesHandler::HandleDelete(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+void ConfigStagesHandler::HandleDelete(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        FilterUtility::CheckPermission(user, "config/modify");
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        if (request.RequestUrl->GetPath().size() >= 4)
                params->Set("package", request.RequestUrl->GetPath()[3]);
 
index 3f33cd8a70cfcc593d7d4c616a1a40d225fda1c4..eabb9edd800a14f32ff7cdbcc64243e2a40dc602 100644 (file)
@@ -30,12 +30,16 @@ class I2_REMOTE_API ConfigStagesHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(ConfigStagesHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 
 private:
-       void HandleGet(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response);
-       void HandlePost(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response);
-       void HandleDelete(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response);
+       void HandleGet(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params);
+       void HandlePost(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params);
+       void HandleDelete(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params);
 
 };
 
index a5c3efd0ad3b9a04b7458893b7afeed3a7cf8e58..7e8c656773793bc3a74b100044c05cedc5ccabd6 100644 (file)
@@ -67,7 +67,7 @@ static void InitScriptFrameCleanup(void)
 
 INITIALIZE_ONCE(InitScriptFrameCleanup);
 
-bool ConsoleHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool ConsoleHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestUrl->GetPath().size() > 3)
                return false;
@@ -76,10 +76,9 @@ bool ConsoleHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& reques
                return false;
 
        QueryDescription qd;
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
 
        String methodName = request.RequestUrl->GetPath()[2];
-       
+
        FilterUtility::CheckPermission(user, "console");
 
        String session = HttpUtility::GetLastParameter(params, "session");
index 6e884108008a06f21af8f3a9f6b52b42dff8c0e2..e2627760c822ee0407c3dc5efe05a37369f265e2 100644 (file)
@@ -43,7 +43,8 @@ class I2_REMOTE_API ConsoleHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(ConsoleHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 
        static std::vector<String> GetAutocompletionSuggestions(const String& word, ScriptFrame& frame);
 
index 2aca205c470722fee7bb720f60ea72a3afe8c172..2a15976f309ac78a496546ffe0994d3c765175b3 100644 (file)
@@ -30,7 +30,7 @@ using namespace icinga;
 
 REGISTER_URLHANDLER("/v1/objects", CreateObjectHandler);
 
-bool CreateObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool CreateObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestUrl->GetPath().size() != 4)
                return false;
@@ -48,7 +48,6 @@ bool CreateObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& r
        FilterUtility::CheckPermission(user, "objects/create/" + type->GetName());
 
        String name = request.RequestUrl->GetPath()[3];
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
        Array::Ptr templates = params->Get("templates");
        Dictionary::Ptr attrs = params->Get("attrs");
 
index 52cc512908500180926fec3256db21901b340709..df3ec398e582a0fe678a1a7ca88bf690e20a4a4d 100644 (file)
@@ -30,7 +30,8 @@ class I2_REMOTE_API CreateObjectHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(CreateObjectHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 };
 
 }
index 234e8f60e3bd5c72f263934388cb5632591111db..4e3356187a36e0978eff5b4c9992229aed8c5329 100644 (file)
@@ -32,7 +32,7 @@ using namespace icinga;
 
 REGISTER_URLHANDLER("/v1/objects", DeleteObjectHandler);
 
-bool DeleteObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool DeleteObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestUrl->GetPath().size() < 3 || request.RequestUrl->GetPath().size() > 4)
                return false;
@@ -51,8 +51,6 @@ bool DeleteObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& r
        qd.Types.insert(type->GetName());
        qd.Permission = "objects/delete/" + type->GetName();
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        params->Set("type", type->GetName());
 
        if (request.RequestUrl->GetPath().size() >= 4) {
index 794455f7051f0616eb9b7b1955557241aaa4572c..d1a941879a78932ad58d699430980bbebe7fd77d 100644 (file)
@@ -30,7 +30,8 @@ class I2_REMOTE_API DeleteObjectHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(DeleteObjectHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 };
 
 }
index 6aed8d25d0207f6ca3ebe748450ebe067e43e5c4..9129b625d541f91018521b7d8a805379aa63a861 100644 (file)
@@ -31,7 +31,7 @@ using namespace icinga;
 
 REGISTER_URLHANDLER("/v1/events", EventsHandler);
 
-bool EventsHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool EventsHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestUrl->GetPath().size() != 2)
                return false;
@@ -44,8 +44,6 @@ bool EventsHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request
                return true;
        }
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        Array::Ptr types = params->Get("types");
 
        if (!types) {
index 924f7b36b06d9ec707cdfe364d7cf2ca81db6e05..9eed187a266aa26de0cef3f46b9a3e05406c8586 100644 (file)
@@ -31,7 +31,8 @@ class I2_REMOTE_API EventsHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(EventsHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 };
 
 }
index 6e64ae7d3084069ba778720ded40c7ca23a30a7b..24db6ce4404f8cf697c1e831a47b7b42e21291c5 100644 (file)
@@ -20,6 +20,7 @@
 #include "remote/httphandler.hpp"
 #include "remote/httputility.hpp"
 #include "base/singleton.hpp"
+#include "base/exception.hpp"
 #include <boost/algorithm/string/join.hpp>
 
 using namespace icinga;
@@ -94,13 +95,23 @@ void HttpHandler::ProcessRequest(const ApiUser::Ptr& user, HttpRequest& request,
 
        std::reverse(handlers.begin(), handlers.end());
 
+       Dictionary::Ptr params;
+
+       try {
+               params = HttpUtility::FetchRequestParameters(request);
+       } catch (const std::exception& ex) {
+               HttpUtility::SendJsonError(response, 400, "Invalid request body: " + DiagnosticInformation(ex, false));
+               return;
+       }
+
        bool processed = false;
        BOOST_FOREACH(const HttpHandler::Ptr& handler, handlers) {
-               if (handler->HandleRequest(user, request, response)) {
+               if (handler->HandleRequest(user, request, response, params)) {
                        processed = true;
                        break;
                }
        }
+
        if (!processed) {
                String path = boost::algorithm::join(request.RequestUrl->GetPath(), "/");
                HttpUtility::SendJsonError(response, 404, "The requested path '" + path +
index fa9187d56d5f5aec2e1d217d95f1be73d973b970..de01969e22746a9b0c1e55fd49b6132e71e5dfb2 100644 (file)
@@ -40,7 +40,7 @@ class I2_REMOTE_API HttpHandler : public Object
 public:
        DECLARE_PTR_TYPEDEFS(HttpHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) = 0;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params) = 0;
 
        static void Register(const Url::Ptr& url, const HttpHandler::Ptr& handler);
        static void ProcessRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response);
index 11b1536e479d48a46a6aca46290b8eb4741a2ac7..058ca51de322e010082becb87b296c27e085be76 100644 (file)
@@ -24,7 +24,7 @@ using namespace icinga;
 
 REGISTER_URLHANDLER("/", InfoHandler);
 
-bool InfoHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool InfoHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestUrl->GetPath().size() > 2)
                return false;
index 1a68609e42817805250a9edb6773bd00e1220d3b..4b867e4aac22d2ea8db71fd4b208a26ba49cc4e8 100644 (file)
@@ -30,7 +30,8 @@ class I2_REMOTE_API InfoHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(InfoHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 };
 
 }
index f648a19f23090a55d7c8f95e5727639557e3c73e..b97a7d176465167be61d0f8a33681a7a26953e3e 100644 (file)
@@ -30,7 +30,7 @@ using namespace icinga;
 
 REGISTER_URLHANDLER("/v1/objects", ModifyObjectHandler);
 
-bool ModifyObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool ModifyObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestUrl->GetPath().size() < 3 || request.RequestUrl->GetPath().size() > 4)
                return false;
@@ -49,8 +49,6 @@ bool ModifyObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& r
        qd.Types.insert(type->GetName());
        qd.Permission = "objects/modify/" + type->GetName();
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        params->Set("type", type->GetName());
 
        if (request.RequestUrl->GetPath().size() >= 4) {
index e71e0eb2bce82321422fb90876c29d939a0f7000..2f11a0932f3765842c5f5b6dd6cedeb110b66241 100644 (file)
@@ -30,7 +30,8 @@ class I2_REMOTE_API ModifyObjectHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(ModifyObjectHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 };
 
 }
index 111d284bc0eb8174577156c49dc00ce4b93e14dd..e7bf646c395771c26193f1ad095b984f7d3d6a2a 100644 (file)
@@ -104,7 +104,7 @@ Dictionary::Ptr ObjectQueryHandler::SerializeObjectAttrs(const Object::Ptr& obje
        return resultAttrs;
 }
 
-bool ObjectQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool ObjectQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestUrl->GetPath().size() < 3 || request.RequestUrl->GetPath().size() > 4)
                return false;
@@ -123,8 +123,6 @@ bool ObjectQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& re
        qd.Types.insert(type->GetName());
        qd.Permission = "objects/query/" + type->GetName();
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        Array::Ptr uattrs = params->Get("attrs");
        Array::Ptr ujoins = params->Get("joins");
        Array::Ptr umetas = params->Get("meta");
index 548466b834d9dd20a41e226b780496858a24d1f6..5676baea5551fdcbfc9714048672bb3f062ad6d8 100644 (file)
@@ -30,7 +30,8 @@ class I2_REMOTE_API ObjectQueryHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(ObjectQueryHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 
 private:
        static Dictionary::Ptr SerializeObjectAttrs(const Object::Ptr& object, const String& attrPrefix,
index cce71fbef25c11a53fe112d4256e116499bb8705..f8966b5f49b41a078fe8ae9cf79950a7b90df5ce 100644 (file)
@@ -72,7 +72,7 @@ public:
        }
 };
 
-bool StatusHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool StatusHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestUrl->GetPath().size() > 3)
                return false;
@@ -85,8 +85,6 @@ bool StatusHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request
        qd.Provider = new StatusTargetProvider();
        qd.Permission = "status/query";
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        params->Set("type", "Status");
 
        if (request.RequestUrl->GetPath().size() >= 3)
index 2bef57a142d5af856a2e086f02dc3a20755e9fbd..96f5c185c2627468cad04ca777b6f06799a7c744 100644 (file)
@@ -30,7 +30,8 @@ class I2_REMOTE_API StatusHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(StatusHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 };
 
 }
index ba8e5225c71567fd88329685e4bf598746aef00f..7af46510e63d2cbd73413c06883e802e21c18486 100644 (file)
@@ -75,7 +75,7 @@ public:
        }
 };
 
-bool TypeQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response)
+bool TypeQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response, const Dictionary::Ptr& params)
 {
        if (request.RequestUrl->GetPath().size() > 3)
                return false;
@@ -87,8 +87,6 @@ bool TypeQueryHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& requ
        qd.Types.insert("Type");
        qd.Provider = new TypeTargetProvider();
 
-       Dictionary::Ptr params = HttpUtility::FetchRequestParameters(request);
-
        if (params->Contains("type"))
                params->Set("name", params->Get("type"));
 
index fbe18f82bc5811c1c831d6a0261cef70303232b1..67deeec35de1a8273a9d4cb66aee0b6d2364ecaf 100644 (file)
@@ -30,7 +30,8 @@ class I2_REMOTE_API TypeQueryHandler : public HttpHandler
 public:
        DECLARE_PTR_TYPEDEFS(TypeQueryHandler);
 
-       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request, HttpResponse& response) override;
+       virtual bool HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
+           HttpResponse& response, const Dictionary::Ptr& params) override;
 };
 
 }