From 12ffc1833854904376de45394a2c2af47c60ea2c Mon Sep 17 00:00:00 2001 From: frikky Date: Mon, 1 Jun 2020 18:55:19 +0200 Subject: [PATCH] Fixed App overwrites and bad app function names --- backend/go-app/codegen.go | 66 +++++++++++++++------------------ backend/go-app/main.go | 25 +++++++++++-- backend/go-app/walkoff.go | 2 +- docker-compose.yml | 4 +- frontend/src/AngularWorkflow.js | 43 ++++++++++----------- frontend/src/AppCreator.js | 37 ++++++++++++------ 6 files changed, 102 insertions(+), 75 deletions(-) diff --git a/backend/go-app/codegen.go b/backend/go-app/codegen.go index 5f64be9a..503d5f76 100644 --- a/backend/go-app/codegen.go +++ b/backend/go-app/codegen.go @@ -510,39 +510,38 @@ func generateYaml(swagger *openapi3.Swagger, newmd5 string) (*openapi3.Swagger, for actualPath, path := range swagger.Paths { // FIXME: Add everything from here: // https://godoc.org/github.com/getkin/kin-openapi/openapi3#PathItem - firstQuery := true if path.Get != nil { - action, curCode := handleGet(swagger, api, extraParameters, path, actualPath, firstQuery) + action, curCode := handleGet(swagger, api, extraParameters, path, actualPath) api.Actions = append(api.Actions, action) pythonFunctions = append(pythonFunctions, curCode) } if path.Connect != nil { - action, curCode := handleConnect(swagger, api, extraParameters, path, actualPath, firstQuery) + action, curCode := handleConnect(swagger, api, extraParameters, path, actualPath) api.Actions = append(api.Actions, action) pythonFunctions = append(pythonFunctions, curCode) } if path.Head != nil { - action, curCode := handleHead(swagger, api, extraParameters, path, actualPath, firstQuery) + action, curCode := handleHead(swagger, api, extraParameters, path, actualPath) api.Actions = append(api.Actions, action) pythonFunctions = append(pythonFunctions, curCode) } if path.Delete != nil { - action, curCode := handleDelete(swagger, api, extraParameters, path, actualPath, firstQuery) + action, curCode := handleDelete(swagger, api, extraParameters, path, actualPath) api.Actions = append(api.Actions, action) pythonFunctions = append(pythonFunctions, curCode) } if path.Post != nil { - action, curCode := handlePost(swagger, api, extraParameters, path, actualPath, firstQuery) + action, curCode := handlePost(swagger, api, extraParameters, path, actualPath) api.Actions = append(api.Actions, action) pythonFunctions = append(pythonFunctions, curCode) } if path.Patch != nil { - action, curCode := handlePatch(swagger, api, extraParameters, path, actualPath, firstQuery) + action, curCode := handlePatch(swagger, api, extraParameters, path, actualPath) api.Actions = append(api.Actions, action) pythonFunctions = append(pythonFunctions, curCode) } if path.Put != nil { - action, curCode := handlePut(swagger, api, extraParameters, path, actualPath, firstQuery) + action, curCode := handlePut(swagger, api, extraParameters, path, actualPath) api.Actions = append(api.Actions, action) pythonFunctions = append(pythonFunctions, curCode) } @@ -736,7 +735,7 @@ func fixFunctionName(functionName, actualPath string) string { return functionName } -func handleConnect(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string, firstQuery bool) (WorkflowAppAction, string) { +func handleConnect(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string) (WorkflowAppAction, string) { // What to do with this, hmm functionName := fixFunctionName(path.Connect.Summary, actualPath) @@ -756,7 +755,7 @@ func handleConnect(swagger *openapi3.Swagger, api WorkflowApp, extraParameters [ // Parameters: []WorkflowAppActionParameter{}, // FIXME - add data for POST stuff - firstQuery = true + firstQuery := true optionalQueries := []string{} parameters := []string{} optionalParameters := []WorkflowAppActionParameter{} @@ -818,11 +817,10 @@ func handleConnect(swagger *openapi3.Swagger, api WorkflowApp, extraParameters [ if firstQuery { baseUrl = fmt.Sprintf("%s?%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } else { baseUrl = fmt.Sprintf("%s&%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } + firstQuery = false } } @@ -843,7 +841,7 @@ func handleConnect(swagger *openapi3.Swagger, api WorkflowApp, extraParameters [ return action, curCode } -func handleGet(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string, firstQuery bool) (WorkflowAppAction, string) { +func handleGet(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string) (WorkflowAppAction, string) { // What to do with this, hmm functionName := fixFunctionName(path.Get.Summary, actualPath) @@ -863,7 +861,7 @@ func handleGet(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wor // Parameters: []WorkflowAppActionParameter{}, // FIXME - add data for POST stuff - firstQuery = true + firstQuery := true optionalQueries := []string{} // FIXME - remove this when authentication is properly introduced @@ -930,11 +928,12 @@ func handleGet(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wor if firstQuery { baseUrl = fmt.Sprintf("%s?%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } else { + log.Printf("NOT FIRST QUERY!: %s", baseUrl) baseUrl = fmt.Sprintf("%s&%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false + log.Printf("AFTER: %s", baseUrl) } + firstQuery = false } } @@ -955,7 +954,7 @@ func handleGet(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wor return action, curCode } -func handleHead(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string, firstQuery bool) (WorkflowAppAction, string) { +func handleHead(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string) (WorkflowAppAction, string) { // What to do with this, hmm functionName := fixFunctionName(path.Head.Summary, actualPath) @@ -975,7 +974,7 @@ func handleHead(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wo // Parameters: []WorkflowAppActionParameter{}, // FIXME - add data for POST stuff - firstQuery = true + firstQuery := true optionalQueries := []string{} parameters := []string{} optionalParameters := []WorkflowAppActionParameter{} @@ -1037,11 +1036,10 @@ func handleHead(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wo if firstQuery { baseUrl = fmt.Sprintf("%s?%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } else { baseUrl = fmt.Sprintf("%s&%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } + firstQuery = false } } @@ -1062,7 +1060,7 @@ func handleHead(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wo return action, curCode } -func handleDelete(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string, firstQuery bool) (WorkflowAppAction, string) { +func handleDelete(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string) (WorkflowAppAction, string) { // What to do with this, hmm functionName := fixFunctionName(path.Delete.Summary, actualPath) @@ -1082,7 +1080,7 @@ func handleDelete(swagger *openapi3.Swagger, api WorkflowApp, extraParameters [] // Parameters: []WorkflowAppActionParameter{}, // FIXME - add data for POST stuff - firstQuery = true + firstQuery := true optionalQueries := []string{} parameters := []string{} optionalParameters := []WorkflowAppActionParameter{} @@ -1144,11 +1142,10 @@ func handleDelete(swagger *openapi3.Swagger, api WorkflowApp, extraParameters [] if firstQuery { baseUrl = fmt.Sprintf("%s?%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } else { baseUrl = fmt.Sprintf("%s&%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } + firstQuery = false } } @@ -1169,7 +1166,7 @@ func handleDelete(swagger *openapi3.Swagger, api WorkflowApp, extraParameters [] return action, curCode } -func handlePost(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string, firstQuery bool) (WorkflowAppAction, string) { +func handlePost(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string) (WorkflowAppAction, string) { // What to do with this, hmm //log.Printf("PATH: %s", actualPath) functionName := fixFunctionName(path.Post.Summary, actualPath) @@ -1192,7 +1189,7 @@ func handlePost(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wo // Parameters: []WorkflowAppActionParameter{}, // FIXME - add data for POST stuff - firstQuery = true + firstQuery := true optionalQueries := []string{} parameters := []string{} optionalParameters := []WorkflowAppActionParameter{} @@ -1256,11 +1253,10 @@ func handlePost(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wo if firstQuery { baseUrl = fmt.Sprintf("%s?%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } else { baseUrl = fmt.Sprintf("%s&%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } + firstQuery = false } } @@ -1281,7 +1277,7 @@ func handlePost(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wo return action, curCode } -func handlePatch(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string, firstQuery bool) (WorkflowAppAction, string) { +func handlePatch(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string) (WorkflowAppAction, string) { // What to do with this, hmm functionName := fixFunctionName(path.Patch.Summary, actualPath) @@ -1301,7 +1297,7 @@ func handlePatch(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []W // Parameters: []WorkflowAppActionParameter{}, // FIXME - add data for POST stuff - firstQuery = true + firstQuery := true optionalQueries := []string{} parameters := []string{} optionalParameters := []WorkflowAppActionParameter{} @@ -1363,11 +1359,10 @@ func handlePatch(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []W if firstQuery { baseUrl = fmt.Sprintf("%s?%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } else { baseUrl = fmt.Sprintf("%s&%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } + firstQuery = false } } @@ -1388,7 +1383,7 @@ func handlePatch(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []W return action, curCode } -func handlePut(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string, firstQuery bool) (WorkflowAppAction, string) { +func handlePut(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []WorkflowAppActionParameter, path *openapi3.PathItem, actualPath string) (WorkflowAppAction, string) { // What to do with this, hmm functionName := fixFunctionName(path.Put.Summary, actualPath) @@ -1408,7 +1403,7 @@ func handlePut(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wor // Parameters: []WorkflowAppActionParameter{}, // FIXME - add data for POST stuff - firstQuery = true + firstQuery := true optionalQueries := []string{} parameters := []string{} optionalParameters := []WorkflowAppActionParameter{} @@ -1471,11 +1466,10 @@ func handlePut(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wor if firstQuery { baseUrl = fmt.Sprintf("%s?%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } else { baseUrl = fmt.Sprintf("%s&%s={%s}", baseUrl, param.Value.Name, param.Value.Name) - firstQuery = false } + firstQuery = false } } diff --git a/backend/go-app/main.go b/backend/go-app/main.go index c608949e..bac7e31a 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -1906,6 +1906,7 @@ func checkAdminLogin(resp http.ResponseWriter, request *http.Request) { if err != nil { resp.WriteHeader(401) resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "%s"}`, err))) + return } if count == 0 { @@ -5536,8 +5537,26 @@ func verifySwagger(resp http.ResponseWriter, request *http.Request) { return } - log.Printf("Functions: %d", swagger.Paths) - log.Printf("Actions: %d", len(api.Actions)) + // FIXME: CHECK IF SAME NAME AS NORMAL APP + // Can't overwrite existing normal app + workflowApps, err := getAllWorkflowApps(ctx) + if err != nil { + log.Printf("Failed getting all workflow apps from database to verify: %s", err) + resp.WriteHeader(401) + resp.Write([]byte(`{"success": false, "reason": "Failed to verify existence"}`)) + return + } + + // Same name only? + lowerName := strings.ToLower(swagger.Info.Title) + for _, app := range workflowApps { + if app.Downloaded && !app.Generated && strings.ToLower(app.Name) == lowerName { + resp.WriteHeader(401) + resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "Normal app with name %s already exists. Delete it first."}`, swagger.Info.Title))) + return + } + } + api.Owner = user.Id err = dumpApi(basePath, api) @@ -5843,7 +5862,7 @@ func init() { log.Printf("Running INIT process") dbclient, err = datastore.NewClient(ctx, gceProject) if err != nil { - log.Printf("DBclient error during init: %s", err) + panic(fmt.Sprintf("DBclient error during init: %s", err)) } go runInit(ctx) diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index 36a3d6b0..eea5078a 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -1355,12 +1355,12 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) { curapp := WorkflowApp{} // FIXME - can this work with ONLY AppID? for _, app := range workflowApps { - log.Printf("Name Version: %s_%s, other: %s_%s", app.Name, app.AppVersion, action.AppName, action.AppVersion) if app.ID == action.AppID { curapp = app break } + // Has to NOT be generated //if app.Name == action.AppName && app.AppVersion == action.AppVersion { // curapp = app // break diff --git a/docker-compose.yml b/docker-compose.yml index 0fbc7c41..72dccb0c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ version: '3' services: frontend: - #build: ./frontend + build: ./frontend image: frikky/shuffle:frontend container_name: shuffle-frontend hostname: shuffle-frontend @@ -26,7 +26,7 @@ services: volumes: - ${DB_LOCATION}:/etc/shuffle backend: - #build: ./backend + build: ./backend image: frikky/shuffle:backend container_name: shuffle-backend hostname: ${BACKEND_HOSTNAME} diff --git a/frontend/src/AngularWorkflow.js b/frontend/src/AngularWorkflow.js index 05092d87..86fb1b6c 100644 --- a/frontend/src/AngularWorkflow.js +++ b/frontend/src/AngularWorkflow.js @@ -807,12 +807,13 @@ const AngularWorkflow = (props) => { // FIXME - check if they have value before overriding like this for no reason. // Would save a lot of time (400~ ms -> 30ms) - //setSelectedAction({}) + //console.log("ACTION: ", selectedAction) + //console.log("APP: ", selectedApp) + setSelectedAction({}) //setSelectedApp({}) //setSelectedTrigger({}) //setSelectedEdge({}) - // setSelectedTriggerIndex(-1) //setSelectedActionEnvironment({}) //setSelectedEdge({}) @@ -2635,7 +2636,7 @@ const AngularWorkflow = (props) => { value={selectedActionName} fullWidth onChange={setNewSelectedAction} - style={{backgroundColor: inputColor, color: "white", height: "50px"}} + style={{backgroundColor: inputColor, color: "white", height: 50}} SelectDisplayProps={{ style: { marginLeft: 10, @@ -2643,24 +2644,24 @@ const AngularWorkflow = (props) => { } }} > - {selectedApp.actions.map(data => { - var newActionname = data.name - if (data.label !== undefined && data.label !== null && data.label.length > 0) { - newActionname = data.label - } - // ROFL FIXME - loop - newActionname = newActionname.replace("_", " ") - newActionname = newActionname.replace("_", " ") - newActionname = newActionname.replace("_", " ") - newActionname = newActionname.replace("_", " ") - newActionname = newActionname.charAt(0).toUpperCase()+newActionname.substring(1) - return ( - - {newActionname} + {selectedApp.actions.map(data => { + var newActionname = data.name + if (data.label !== undefined && data.label !== null && data.label.length > 0) { + newActionname = data.label + } + // ROFL FIXME - loop + newActionname = newActionname.replace("_", " ") + newActionname = newActionname.replace("_", " ") + newActionname = newActionname.replace("_", " ") + newActionname = newActionname.replace("_", " ") + newActionname = newActionname.charAt(0).toUpperCase()+newActionname.substring(1) + return ( + + {newActionname} - - ) - })} + + ) + })}
@@ -4521,7 +4522,7 @@ const AngularWorkflow = (props) => {
Actions
- {executionData.status !== undefined && executionData.status !== "ABORTED" && executionData.status !== "FINISHED" ? : null} + {executionData.status !== undefined && executionData.status !== "ABORTED" && executionData.status !== "FINISHED" && executionData.status !== "FAILURE" ? : null}
{executionData.results === undefined || executionData.results === null || executionData.results.length === 0 && executionData.status === "EXECUTING" ? diff --git a/frontend/src/AppCreator.js b/frontend/src/AppCreator.js index 5abdc6c3..29e98a56 100644 --- a/frontend/src/AppCreator.js +++ b/frontend/src/AppCreator.js @@ -43,6 +43,7 @@ const actionListStyle = { } const boxStyle = { + color: "white", flex: "1", marginLeft: "10px", marginRight: "10px", @@ -672,8 +673,10 @@ const AppCreator = (props) => { }) .then((responseJson) => { if (!responseJson.success) { - setErrorCode(responseJson.reason) - alert.error("Failed to verify: ") + if (responseJson.reason !== undefined) { + setErrorCode(responseJson.reason) + alert.error("Failed to verify: "+responseJson.reason) + } } else { alert.success("Successfully uploaded openapi") if (window.location.pathname.includes("/new")) { @@ -940,6 +943,9 @@ const AppCreator = (props) => { const setActionField = (field, value) => { currentAction[field] = value setCurrentAction(currentAction) + //if (updater !== value) { + // setUpdater(value) + //} } const bodyInfo = actionBodyRequest.includes(currentActionMethod) ? @@ -1114,6 +1120,7 @@ const AppCreator = (props) => { open={actionsModalOpen} fullWidth onClose={() => { + console.log("CLOSED?") setUrlPath("") setCurrentAction({ "name": "", @@ -1139,7 +1146,7 @@ const AppCreator = (props) => { Name { variant="outlined" defaultValue={currentAction["name"]} onChange={e => { + setActionField("name", e.target.value) + }} + onBlur={e => { // Fix basic issues in frontend. Python functions run a-zA-Z0-9_ - const regex = /[A-Z-a-z0-9 _]/g; + console.log(e.target.value) + const regex = /[A-Za-z0-9 _]/g; const found = e.target.value.match(regex); + console.log("FOUND: ", found) if (found !== null) { setActionField("name", found.join("")) } @@ -1165,7 +1177,7 @@ const AppCreator = (props) => { }, }} /> -
+
Description { {bodyInfo} - - + @@ -1462,7 +1475,7 @@ const AppCreator = (props) => { margin="normal" variant="outlined" value={name} - onChange={e => setName(e.target.value)} + onChange={e => setName(e.target.value)} color="primary" InputProps={{ style:{ @@ -1570,7 +1583,7 @@ const AppCreator = (props) => { }}> Save - {errorCode} + {errorCode.length > 0 ? `Error: ${errorCode}` : null}