Fixed OpenAPI body parser auto-casting

This commit is contained in:
frikky
2021-09-05 23:47:04 +02:00
parent 3ea8e5ad72
commit 9e9d114d87
6 changed files with 56 additions and 20 deletions
+48 -14
View File
@@ -757,6 +757,9 @@ class AppBase:
#return value.json()
return {"success": False}
def set_file(self, infiles):
return self.set_files(infiles)
# Sets files in the backend
def set_files(self, infiles):
full_execution = self.full_execution
@@ -1009,6 +1012,34 @@ class AppBase:
return data.strip()
if "split" in thistype:
return data.split()
if "replace" in thistype:
print("Running replace!")
splitvalues = data.split(",")
if len(splitvalues) > 2:
for i in range(len(splitvalues)):
if i != 0:
if splitvalues[i] == " ":
splitvalues[i] = " "
continue
splitvalues[i] = splitvalues[i].strip()
if splitvalues[i] == "\"\"":
splitvalues[i] = ""
if splitvalues[i] == "\" \"":
splitvalues[i] = " "
if len(splitvalues[i]) > 2:
if splitvalues[i][0] == "\"" and splitvalues[i][len(splitvalues[i])-1] == "\"":
splitvalues[i] = splitvalues[i][1:-1]
if splitvalues[i][0] == "'" and splitvalues[i][len(splitvalues[i])-1] == "'":
splitvalues[i] = splitvalues[i][1:-1]
replacementvalue = splitvalues[0]
return replacementvalue.replace(splitvalues[1], splitvalues[2], -1)
else:
return f"replace({data})"
if "join" in thistype:
print(f"SHOULD JOIN: {data}")
try:
@@ -1104,8 +1135,7 @@ class AppBase:
except TypeError:
return data, False
wrappers = ["int", "number", "lower", "upper", "trim", "strip", "split", "parse", "len", "length", "lenght",
"join"]
wrappers = ["int", "number", "lower", "upper", "trim", "strip", "split", "parse", "len", "length", "lenght", "join", "replace"]
if not any(wrapper in data for wrapper in wrappers):
return data, False
@@ -2051,34 +2081,38 @@ class AppBase:
print("KeyError body OpenAPI: %s" % e)
pass
print(f"""HANDLING {action["parameters"][counter]["value"]}""")
try:
newvalue = json.loads(action["parameters"][counter]["value"])
deletekeys = []
for key, value in newvalue.items():
print(key, value)
if isinstance(value, str) and len(value) == 0:
deletekeys.append(key)
continue
if value == "${%s}" % key:
print("Deleting %s because key = value")
deletekeys.append(key)
continue
for deletekey in deletekeys:
del newvalue[deletekey]
print("Post delete: %s" % newvalue)
for key, value in newvalue.items():
try:
value = json.loads(value)
newvalue[key] = value
except json.decoder.JSONDecodeError as e:
print("Inner overwrite issue: %s" % e)
action["parameters"][counter]["value"] = json.dumps(newvalue)
except json.decoder.JSONDecodeError as e:
print("Failed JSON replacement for OpenAPI keys (2) {e}")
#if "\n" in action["parameters"][counter]["value"]:
# print("MODIFYING BODY!!")
# newbody = ""
# for line in action["parameters"][counter]["value"].split("\n"):
# if ": \"\"" in line:
# print("Skipping line %s" % line)
# continue
# newbody += line
# print("New body: %s" % newbody)
break
#print(action["parameters"])