From fd4a87bfe66637a7c4d458ec16e77da2fc93716a Mon Sep 17 00:00:00 2001 From: frikky Date: Fri, 28 May 2021 13:07:38 +0200 Subject: [PATCH] Fixed authentication caching --- backend/app_sdk/app_base.py | 20 +++++++++---- backend/app_sdk/build.sh | 2 +- backend/go-app/main.go | 4 +-- docker-compose.yml | 1 + frontend/src/components/ParsedAction.jsx | 36 +++++++++++++++++++----- frontend/src/views/Admin.jsx | 5 +++- frontend/src/views/AngularWorkflow.jsx | 2 +- frontend/src/views/Workflows.jsx | 2 +- 8 files changed, 54 insertions(+), 18 deletions(-) diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index 8fd981ee..9bb25faa 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -1362,7 +1362,6 @@ class AppBase: return str(baseresult)+str(appendresult), False print("[INFO] After fourth parser return as JSON") - data, is_loop = recurse_json(basejson, parsersplit[1:]) parseditem = data print("DATA: %s" % data) @@ -1405,12 +1404,23 @@ class AppBase: continue # Handles for loops etc. - value, is_loop = get_json_value(fullexecution, to_be_replaced) + # FIXME: Should it dump to string here? Doesn't that defeat the purpose? + # Trying without string dumping. + value, is_loop = get_json_value(fullexecution, to_be_replaced) + print("\n\nType of value: %s. Value: %s" % (type(value), value)) if isinstance(value, str): parameter["value"] = parameter["value"].replace(to_be_replaced, value) - elif isinstance(value, dict): - parameter["value"] = parameter["value"].replace(to_be_replaced, json.dumps(value)) + elif isinstance(value, dict) or isinstance(value, list): + # Changed from JSON dump to str() 28.05.2021 + # This makes it so the parameters gets lists and dicts straight up + #parameter["value"] = parameter["value"].replace(to_be_replaced, json.dumps(value)) + + try: + parameter["value"] = parameter["value"].replace(to_be_replaced, str(value)) + except: + parameter["value"] = parameter["value"].replace(to_be_replaced, json.dumps(value)) + print("Failed parsing value as string?") else: print("Unknown type %s" % type(value)) try: @@ -1418,7 +1428,7 @@ class AppBase: except json.decoder.JSONDecodeError as e: parameter["value"] = parameter["value"].replace(to_be_replaced, value) - print("VALUE: %s" % value) + print("VALUE: %s" % parameter["value"]) if parameter["variant"] == "WORKFLOW_VARIABLE": diff --git a/backend/app_sdk/build.sh b/backend/app_sdk/build.sh index f0551ae7..c9c21b67 100644 --- a/backend/app_sdk/build.sh +++ b/backend/app_sdk/build.sh @@ -1,6 +1,6 @@ #!/bin/bash NAME=shuffle-app_sdk -VERSION=0.8.90 +VERSION=0.8.95 docker rmi docker.pkg.github.com/frikky/shuffle/$NAME:$VERSION --force docker build . -t frikky/shuffle:app_sdk -t frikky/$NAME:$VERSION -t docker.pkg.github.com/frikky/shuffle/$NAME:$VERSION -t ghcr.io/frikky/$NAME:$VERSION diff --git a/backend/go-app/main.go b/backend/go-app/main.go index e315afbd..6abe992c 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -5552,9 +5552,9 @@ func makeWorkflowPublic(resp http.ResponseWriter, request *http.Request) { // Check workflow.Sharing == private / public / org too if user.Id != workflow.Owner || len(user.Id) == 0 { if workflow.OrgId == user.ActiveOrg.Id && user.Role == "admin" { - log.Printf("[INFO] User %s is accessing workflow %s as admin", user.Username, workflow.ID) + log.Printf("[AUDIT] User %s is accessing workflow %s as admin (public)", user.Username, workflow.ID) } else { - log.Printf("[WARNING] Wrong user (%s) for workflow %s (get workflow)", user.Username, workflow.ID) + log.Printf("[WARNING] Wrong user (%s) for workflow %s (public)", user.Username, workflow.ID) resp.WriteHeader(401) resp.Write([]byte(`{"success": false}`)) return diff --git a/docker-compose.yml b/docker-compose.yml index bae6d5bf..9d8cd8a1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -101,6 +101,7 @@ services: - 9200:9200 networks: - shuffle + restart: unless-stopped # OLD DATABASE: #database: # #build: ./backend/database diff --git a/frontend/src/components/ParsedAction.jsx b/frontend/src/components/ParsedAction.jsx index ba331a27..1535cfc5 100644 --- a/frontend/src/components/ParsedAction.jsx +++ b/frontend/src/components/ParsedAction.jsx @@ -112,16 +112,28 @@ const ParsedAction = (props) => { return response.json() }) .then((responseJson) => { - if (setApp && responseJson.actions !== undefined && responseJson.actions !== null) { + console.log("RESPONSE: ", responseJson) + + const parsedapp = responseJson.app !== undefined && responseJson.app !== null ? JSON.parse(atob(responseJson.app)) : {} + console.log("PARSED: ", parsedapp) + //data = parsedapp.body === undefined ? parsedapp : parsedapp.body + + if (setApp && parsedapp.actions !== undefined && parsedapp.actions !== null) { + console.log("Inside first if") if (selectedApp.versions !== undefined && selectedApp.versions !== null) { - responseJson.versions = selectedApp.versions + parsedapp.versions = selectedApp.versions } if (selectedApp.loop_versions !== undefined && selectedApp.loop_versions !== null) { - responseJson.loop_versions = selectedApp.loop_versions + parsedapp.loop_versions = selectedApp.loop_versions } - var foundAction = responseJson.actions.find(action => action.name.toLowerCase() === selectedAction.name.toLowerCase()) + // Find authentication, and if it works? + // If authentication has less OR more fields, it has to change + //console.log(selected + + console.log("Inside first if2") + var foundAction = parsedapp.actions.find(action => action.name.toLowerCase() === selectedAction.name.toLowerCase()) console.log("FOUNDACTION: ", foundAction) if (foundAction !== null && foundAction !== undefined) { var foundparams = [] @@ -134,20 +146,23 @@ const ParsedAction = (props) => { } else { foundAction.parameters[paramkey] = foundParam } - //foundparams.push(param.name) } } else { alert.error("Couldn't find action "+selectedAction.name) } + + selectedAction.errors = [] + selectedAction.is_valid = true + // Updating params for the new action selectedAction.parameters = foundAction.parameters selectedAction.app_id = appId - selectedAction.app_version = responseJson.app_version + selectedAction.app_version = parsedapp.app_version setSelectedAction(selectedAction) - setSelectedApp(responseJson) + setSelectedApp(parsedapp) } }) .catch(error => { @@ -665,6 +680,9 @@ const ParsedAction = (props) => { disabled={disabled} style={{backgroundColor: theme.palette.inputColor, borderRadius: theme.palette.borderRadius,}} InputProps={{ + classes: { + notchedOutline: classes.notchedOutline, + }, style:{ color: "white", minHeight: 50, @@ -1273,6 +1291,7 @@ const ParsedAction = (props) => { defaultValue={selectedAction.app_version} onChange={(event) => { const newversion = selectedApp.versions.find(tmpApp => tmpApp.version == event.target.value) + console.log("NEWVERSION: ", newversion) if (newversion !== undefined && newversion !== null) { getApp(newversion.id, true) } @@ -1303,6 +1322,9 @@ const ParsedAction = (props) => { { if (responseJson["success"] === false) { alert.error("Failed deleting auth") } else { - getAppAuthentication() + // Need to wait because query in ES is too fast + setTimeout(() => { + getAppAuthentication() + }, 1000); alert.success("Successfully deleted authentication!") } }), diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index bc0d4f50..e5975a77 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -1585,7 +1585,7 @@ const AngularWorkflow = (props) => { const onNodeSelect = (event, newAppAuth) => { const data = event.target.data() if (data.isButton) { - console.log("BUTTON CLICKED: ", data) + //console.log("BUTTON CLICKED: ", data) if (data.buttonType === "delete") { console.log("DELETE!") const parentNode = cy.getElementById(data.attachedTo) diff --git a/frontend/src/views/Workflows.jsx b/frontend/src/views/Workflows.jsx index 18945796..7cceee48 100644 --- a/frontend/src/views/Workflows.jsx +++ b/frontend/src/views/Workflows.jsx @@ -89,7 +89,7 @@ export const GetIconInfo = (action) => { {"key": "execute", "values": ["execute", "run", "play", "raise",]}, {"key": "extract", "values": ["extract", "unpack", "decompress"]}, {"key": "inflate", "values": ["inflate", "pack", "compress",]}, - {"key": "edit", "values": ["update", "create", "edit", "put", "patch", "change", "parse", "replace", "filter", "conver", "map"]}, + {"key": "edit", "values": ["update", "create", "edit", "put", "patch", "change", "parse", "replace", "filter", "conver", "map", "format", "escape"]}, {"key": "compare", "values": ["compare", "convert", "to", "filter", "translate", ]}, {"key": "list", "values": ["list", "head", "options"]}, ]