]> granicus.if.org Git - icinga2/commitdiff
Update error messages
authorJean Flach <jean-marcel.flach@netways.de>
Tue, 27 Oct 2015 14:26:19 +0000 (15:26 +0100)
committerJean Flach <jean-marcel.flach@netways.de>
Tue, 27 Oct 2015 14:26:19 +0000 (15:26 +0100)
Removes verboseError from httprequest and uses
HttpUtility::GetLastParameter() instead to find out whether verbose
errors are enabled. Also parsing an invalid URL will now not lead to a
stacktrace anymore.

refs #10194

lib/remote/actionshandler.cpp
lib/remote/configfileshandler.cpp
lib/remote/configpackageshandler.cpp
lib/remote/configstageshandler.cpp
lib/remote/httprequest.cpp
lib/remote/httprequest.hpp
lib/remote/httpserverconnection.cpp

index d7ac3b353c0dba23b496bc4e2d58826b5dc2dac2..df879d12ce81b0d778264472bf65bbca40ac7f48 100644 (file)
@@ -66,7 +66,7 @@ bool ActionsHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& reques
                } catch (const std::exception& ex) {
                        HttpUtility::SendJsonError(response, 400,
                            "Type/Filter was required but not provided or was invalid.",
-                           request.GetVerboseErrors() ? DiagnosticInformation(ex) : "");
+                           HttpUtility::GetLastParameter(params, "verboseErrors") ? DiagnosticInformation(ex) : "");
                        return true;
                }
        } else {
@@ -86,7 +86,7 @@ bool ActionsHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& reques
                        Dictionary::Ptr fail = new Dictionary();
                        fail->Set("code", 500);
                        fail->Set("status", "Action execution failed.");
-                       if (request.GetVerboseErrors())
+                       if (HttpUtility::GetLastParameter(params, "verboseErrors"))
                                fail->Set("diagnostic information", DiagnosticInformation(ex));
                        results->Add(fail);
                }
index 5969e39fc33740a7a86a3969a3c2219da76ad306..5e586a9402de27a10919ad9bf46d5b7f18df17b1 100644 (file)
@@ -88,7 +88,7 @@ bool ConfigFilesHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& re
                response.WriteBody(content.CStr(), content.GetLength());
        } catch (const std::exception& ex) {
                HttpUtility::SendJsonError(response, 500, "Could not read file.",
-                   request.GetVerboseErrors() ? DiagnosticInformation(ex) : "");
+                   HttpUtility::GetLastParameter(params, "verboseErrors") ? DiagnosticInformation(ex) : "");
        }
 
        return true;
index d6906f639e582a0acb3aae4177286ce6b0a41137..dbbc379126aa1d6c3b20295f071305e88a9b93d5 100644 (file)
@@ -90,7 +90,7 @@ void ConfigPackagesHandler::HandlePost(const ApiUser::Ptr& user, HttpRequest& re
                ConfigPackageUtility::CreatePackage(packageName);
        } catch (const std::exception& ex) {
                HttpUtility::SendJsonError(response, 500, "Could not create package.",
-                       request.GetVerboseErrors() ? DiagnosticInformation(ex) : "");
+                       HttpUtility::GetLastParameter(params, "verboseErrors") ? DiagnosticInformation(ex) : "");
        }
 
        result1->Set("code", 200);
@@ -131,7 +131,7 @@ void ConfigPackagesHandler::HandleDelete(const ApiUser::Ptr& user, HttpRequest&
        } catch (const std::exception& ex) {
                code = 500;
                status = "Failed to delete package.";
-               if (request.GetVerboseErrors())
+               if (HttpUtility::GetLastParameter(params, "verboseErrors"))
                        result1->Set("diagnostic information", DiagnosticInformation(ex));
        }
 
index 5c241aedce337542a5537800e7b6e1283617b233..9ec205647a92375b9dce17ce3d5918d062ad39b2 100644 (file)
@@ -118,7 +118,7 @@ void ConfigStagesHandler::HandlePost(const ApiUser::Ptr& user, HttpRequest& requ
        } catch (const std::exception& ex) {
                return HttpUtility::SendJsonError(response, 500,
                                "Stage creation failed.",
-                               request.GetVerboseErrors() ? DiagnosticInformation(ex) : "");
+                               HttpUtility::GetLastParameter(params, "verboseErrors") ? DiagnosticInformation(ex) : "");
        }
 
        Dictionary::Ptr result1 = new Dictionary();
@@ -164,7 +164,7 @@ void ConfigStagesHandler::HandleDelete(const ApiUser::Ptr& user, HttpRequest& re
        } catch (const std::exception& ex) {
                return HttpUtility::SendJsonError(response, 500,
                    "Failed to delete stage.",
-                   request.GetVerboseErrors() ? DiagnosticInformation(ex) : "");
+                   HttpUtility::GetLastParameter(params, "verboseErrors") ? DiagnosticInformation(ex) : "");
        }
 
        Dictionary::Ptr result1 = new Dictionary();
index d9eacb781a9b12377e4e326e61b2d0745383f24c..5c5f5634be0ec744b347403ab19b44f8f8e00207 100644 (file)
@@ -34,8 +34,7 @@ HttpRequest::HttpRequest(const Stream::Ptr& stream)
       ProtocolVersion(HttpVersion11),
       Headers(new Dictionary()),
       m_Stream(stream),
-      m_State(HttpRequestStart),
-      verboseErrors(false)
+      m_State(HttpRequestStart)
 { }
 
 bool HttpRequest::Parse(StreamReadContext& src, bool may_wait)
@@ -61,7 +60,6 @@ bool HttpRequest::Parse(StreamReadContext& src, bool may_wait)
 
                        RequestMethod = tokens[0];
                        RequestUrl = new class Url(tokens[1]);
-                       verboseErrors = (RequestUrl->GetQueryElement("verboseErrors") == "true");
 
                        if (tokens[2] == "HTTP/1.0")
                                ProtocolVersion = HttpVersion10;
index 6542a7028e489818368d5e2c21162da2ffabe2d5..9eb1a0b215566f63783e2c2ed016f4e245677042 100644 (file)
@@ -69,15 +69,11 @@ public:
        void WriteBody(const char *data, size_t count);
        void Finish(void);
 
-       inline bool GetVerboseErrors(void)
-       { return verboseErrors; }
-
 private:
        Stream::Ptr m_Stream;
        boost::shared_ptr<ChunkReadContext> m_ChunkContext;
        HttpRequestState m_State;
        FIFO::Ptr m_Body;
-       bool verboseErrors;
 
        void FinishHeaders(void);
 };
index d75b50807a2f417a9336fd2e97f6cbd0810c37a6..5160ef1dd98cafceef636a34e76312d280607de9 100644 (file)
@@ -86,6 +86,15 @@ bool HttpServerConnection::ProcessMessage(void)
 
        try {
                res = m_CurrentRequest.Parse(m_Context, false);
+       } catch (const std::invalid_argument& ex) {
+               HttpResponse response(m_Stream, m_CurrentRequest);
+               response.SetStatus(400, "Bad request");
+               String msg = String("<h1>Bad request</h1><p><pre>") + ex.what() + "</pre></p>";
+               response.WriteBody(msg.CStr(), msg.GetLength());
+               response.Finish();
+
+               m_Stream->Shutdown();
+               return false;
        } catch (const std::exception& ex) {
                HttpResponse response(m_Stream, m_CurrentRequest);
                response.SetStatus(400, "Bad request");