Browse Source

Catch wrong datatype on POST to REST-API (/api/ctrl)

pull/1452/head
Stefan Pokorny 1 year ago
parent
commit
544b6666fc
  1. 43
      src/web/RestApi.h
  2. 6
      src/web/lang.h

43
src/web/RestApi.h

@ -63,10 +63,11 @@ class RestApi {
void ctrlRequest(JsonObject obj) { void ctrlRequest(JsonObject obj) {
DynamicJsonDocument json(128); DynamicJsonDocument json(128);
JsonObject dummy = json.as<JsonObject>(); JsonObject dummy = json.as<JsonObject>();
if(obj[F("path")] == "ctrl")
setCtrl(obj, dummy, "*"); if(obj[F("path")] == "ctrl")
else if(obj[F("path")] == "setup") setCtrl(obj, dummy, "*");
setSetup(obj, dummy, "*"); else if(obj[F("path")] == "setup")
setSetup(obj, dummy, "*");
} }
private: private:
@ -155,31 +156,35 @@ class RestApi {
DynamicJsonDocument json(1000); DynamicJsonDocument json(1000);
DeserializationError err = deserializeJson(json, reinterpret_cast<const char*>(mTmpBuf), mTmpSize); DeserializationError err = deserializeJson(json, reinterpret_cast<const char*>(mTmpBuf), mTmpSize);
JsonObject obj = json.as<JsonObject>();
AsyncJsonResponse* response = new AsyncJsonResponse(false, 200); AsyncJsonResponse* response = new AsyncJsonResponse(false, 200);
JsonObject root = response->getRoot(); JsonObject root = response->getRoot();
root[F("success")] = (err) ? false : true; if (json.is<JsonObject>()) {
if(!err) { JsonObject obj = json.as<JsonObject>();
String path = request->url().substring(5);
if(path == "ctrl")
root[F("success")] = setCtrl(obj, root, request->client()->remoteIP().toString().c_str()); root[F("success")] = (err) ? false : true;
else if(path == "setup")
root[F("success")] = setSetup(obj, root, request->client()->remoteIP().toString().c_str()); String path = request->url().substring(5);
else { if(path == "ctrl")
root[F("success")] = false; root[F("success")] = setCtrl(obj, root, request->client()->remoteIP().toString().c_str());
root[F("error")] = F(PATH_NOT_FOUND) + path; else if(path == "setup")
} root[F("success")] = setSetup(obj, root, request->client()->remoteIP().toString().c_str());
else {
root[F("success")] = false;
root[F("error")] = F(PATH_NOT_FOUND) + path;
}
} else { } else {
switch (err.code()) { switch (err.code()) {
case DeserializationError::Ok: break; case DeserializationError::Ok: root[F("error")] = F(INVALID_DATATYPE); break;
case DeserializationError::IncompleteInput: root[F("error")] = F(INCOMPLETE_INPUT); break; case DeserializationError::IncompleteInput: root[F("error")] = F(INCOMPLETE_INPUT); break;
case DeserializationError::InvalidInput: root[F("error")] = F(INVALID_INPUT); break; case DeserializationError::InvalidInput: root[F("error")] = F(INVALID_INPUT); break;
case DeserializationError::NoMemory: root[F("error")] = F(NOT_ENOUGH_MEM); break; case DeserializationError::NoMemory: root[F("error")] = F(NOT_ENOUGH_MEM); break;
default: root[F("error")] = F(DESER_FAILED); break; default: root[F("error")] = F(DESER_FAILED); break;
} }
}
}
response->setLength(); response->setLength();
request->send(response); request->send(response);
delete[] mTmpBuf; delete[] mTmpBuf;

6
src/web/lang.h

@ -42,6 +42,12 @@
#define INVALID_INPUT "Invalid input" #define INVALID_INPUT "Invalid input"
#endif #endif
#ifdef LANG_DE
#define INVALID_DATATYPE "Ungültiger Datentyp"
#else /*LANG_EN*/
#define INVALID_DATATYPE "Invalid datatype"
#endif
#ifdef LANG_DE #ifdef LANG_DE
#define NOT_ENOUGH_MEM "nicht genügend Speicher" #define NOT_ENOUGH_MEM "nicht genügend Speicher"
#else /*LANG_EN*/ #else /*LANG_EN*/

Loading…
Cancel
Save