import demistomock as demisto # noqa: F401
from CommonServerPython import * # noqa: F401
import urllib.parse
import base64
def decode(
value: str | None,
encoding: str,
) -> str | None:
if value is not None:
if encoding == "url":
value = urllib.parse.unquote(value)
elif encoding == "base64":
value = base64.b64decode(value.encode()).decode()
elif encoding != "raw":
raise DemistoException(f"Invalid encoding scheme - {encoding}")
return value
def evaluate(
id: str,
value_dt: str,
eval_dt: str | None,
eval_key: str | None,
context: dict[str, Any],
) -> CommandResults:
value = demisto.dt(context, value_dt)
if eval_dt:
if eval_key:
value = {eval_key: value}
value = demisto.dt(value, eval_dt)
if not value:
ok = False
elif isinstance(value, str):
ok = value.lower() != "false"
else:
ok = True
return CommandResults(
outputs_key_field="id",
outputs_prefix="EvaluateContextValue",
outputs={"id": id, "ok": ok},
readable_output=f"The conditions evaluated to {json.dumps(ok)}. id = {id}.",
)
def main():
try:
args = demisto.args()
dt_encoding = args.get("dt_encoding") or "raw"
value_dt = decode(args.get("value_dt"), dt_encoding) or ""
eval_dt = decode(args.get("eval_dt") or "", dt_encoding)
context = demisto.context()
if playbook_id := args.get("playbook_id"):
context = context.get(f"subplaybook-{playbook_id}", {})
return_results(
evaluate(
id=args.get("id"),
value_dt=value_dt,
eval_dt=eval_dt,
eval_key=args.get("eval_key"),
context=context,
)
)
except Exception as err:
demisto.error(traceback.format_exc()) # print the traceback
return_error(f"Failed to execute EvaluateContextValue script. Error: {err!s}")
""" ENTRY POINT """
if __name__ in ("__main__", "__builtin__", "builtins"):
main()