diff OrthancServer/OrthancRestApi/OrthancRestModalities.cpp @ 3345:f687e11aeb13

more explicit HTTP errors
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 05 Apr 2019 17:49:29 +0200
parents 595bfee4391a
children 872bd3b6ec72
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp	Fri Apr 05 17:04:28 2019 +0200
+++ b/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp	Fri Apr 05 17:49:29 2019 +0200
@@ -442,10 +442,24 @@
     ServerContext& context = OrthancRestApi::GetContext(call);
     Json::Value request;
 
-    if (call.ParseJsonRequest(request) &&
-        request.type() == Json::objectValue &&
-        request.isMember(KEY_LEVEL) && request[KEY_LEVEL].type() == Json::stringValue &&
-        (!request.isMember(KEY_QUERY) || request[KEY_QUERY].type() == Json::objectValue))
+    if (!call.ParseJsonRequest(request) ||
+        request.type() != Json::objectValue)
+    {
+      throw OrthancException(ErrorCode_BadFileFormat, "Must provide a JSON object");
+    }
+    else if (!request.isMember(KEY_LEVEL) ||
+             request[KEY_LEVEL].type() != Json::stringValue)
+    {
+      throw OrthancException(ErrorCode_BadFileFormat,
+                             "The JSON body must contain field " + std::string(KEY_LEVEL));
+    }
+    else if (request.isMember(KEY_QUERY) &&
+             request[KEY_QUERY].type() != Json::objectValue)
+    {
+      throw OrthancException(ErrorCode_BadFileFormat,
+                             "The field " + std::string(KEY_QUERY) + " must contain a JSON object");
+    }
+    else
     {
       std::auto_ptr<QueryRetrieveHandler>  handler(new QueryRetrieveHandler(context));
 
@@ -958,7 +972,8 @@
         request[KEY_RESOURCES].type() != Json::arrayValue ||
         request[KEY_LEVEL].type() != Json::stringValue)
     {
-      throw OrthancException(ErrorCode_BadFileFormat);
+      throw OrthancException(ErrorCode_BadFileFormat, "Must provide a JSON body containing fields " +
+                             std::string(KEY_RESOURCES) + " and " + std::string(KEY_LEVEL));
     }
 
     ResourceType level = StringToResourceType(request[KEY_LEVEL].asCString());
@@ -1236,6 +1251,10 @@
       answers.ToJson(result, true);
       call.GetOutput().AnswerJson(result);
     }
+    else
+    {
+      throw OrthancException(ErrorCode_BadFileFormat, "Must provide a JSON object");
+    }
   }