diff --git a/backend/go-app/codegen.go b/backend/go-app/codegen.go index 67507d14..5f64be9a 100644 --- a/backend/go-app/codegen.go +++ b/backend/go-app/codegen.go @@ -247,8 +247,6 @@ func makePythoncode(swagger *openapi3.Swagger, name, url, method string, paramet queryString := "" queryData := "" - log.Printf("URL START: %s", url) - // FIXME - this might break - need to check if ? or & should be set as query parameterData := "" if len(optionalQueries) > 0 { @@ -337,7 +335,6 @@ func makePythoncode(swagger *openapi3.Swagger, name, url, method string, paramet // Extra param for url if it's changeable // Extra param for authentication scheme(s) - log.Printf("URL OTHER: %s", url) data := fmt.Sprintf(` async def %s(self%s%s%s%s%s): headers={} url=f"%s%s" @@ -362,23 +359,21 @@ func makePythoncode(swagger *openapi3.Swagger, name, url, method string, paramet bodyAddin, ) - log.Printf("DATA: %s", data) - //log.Println(data) //log.Println(functionname) return functionname, data } -func generateYaml(swagger *openapi3.Swagger, newmd5 string) (WorkflowApp, []string, error) { +func generateYaml(swagger *openapi3.Swagger, newmd5 string) (*openapi3.Swagger, WorkflowApp, []string, error) { api := WorkflowApp{} //log.Printf("%#v", swagger.Info) if len(swagger.Info.Title) == 0 { - return WorkflowApp{}, []string{}, errors.New("Swagger.Info.Title can't be empty.") + return swagger, WorkflowApp{}, []string{}, errors.New("Swagger.Info.Title can't be empty.") } if len(swagger.Servers) == 0 { - return WorkflowApp{}, []string{}, errors.New("Swagger.Servers can't be empty. Add 'servers':[{'url':'hostname.com'}'") + return swagger, WorkflowApp{}, []string{}, errors.New("Swagger.Servers can't be empty. Add 'servers':[{'url':'hostname.com'}'") } api.Name = swagger.Info.Title @@ -512,12 +507,7 @@ func generateYaml(swagger *openapi3.Swagger, newmd5 string) (WorkflowApp, []stri // This is the python code to be generated // Could just as well be go at this point lol pythonFunctions := []string{} - for actualPath, path := range swagger.Paths { - - //log.Printf("%#v", path) - //log.Printf("%#v", actualPath) - // FIXME: Add everything from here: // https://godoc.org/github.com/getkin/kin-openapi/openapi3#PathItem firstQuery := true @@ -556,9 +546,19 @@ func generateYaml(swagger *openapi3.Swagger, newmd5 string) (WorkflowApp, []stri api.Actions = append(api.Actions, action) pythonFunctions = append(pythonFunctions, curCode) } + + // Has to be here because its used differently above. + // FIXING this is done during export instead? + //log.Printf("OLDPATH: %s", actualPath) + //if strings.Contains(actualPath, "?") { + // actualPath = strings.Split(actualPath, "?")[0] + //} + + //log.Printf("NEWPATH: %s", actualPath) + //newPaths[actualPath] = path } - return api, pythonFunctions, nil + return swagger, api, pythonFunctions, nil } // FIXME - have this give a real version? @@ -1184,7 +1184,7 @@ func handlePost(swagger *openapi3.Swagger, api WorkflowApp, extraParameters []Wo } if path.Post.RequestBody != nil { - log.Printf("FUNCTION: %#v", path.Post.RequestBody) + log.Printf("RequestBody: %#v", path.Post.RequestBody) } action.Returns.Schema.Type = "string" diff --git a/backend/go-app/main.go b/backend/go-app/main.go index bfb523e8..c608949e 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -5528,7 +5528,7 @@ func verifySwagger(resp http.ResponseWriter, request *http.Request) { } //log.Printf("Should generate yaml") - api, pythonfunctions, err := generateYaml(swagger, newmd5) + swagger, api, pythonfunctions, err := generateYaml(swagger, newmd5) if err != nil { log.Printf("Failed building and generating yaml: %s", err) resp.WriteHeader(500) @@ -5536,8 +5536,7 @@ func verifySwagger(resp http.ResponseWriter, request *http.Request) { return } - log.Printf("PATHS: %#v", swagger.Paths["/comments/put"]) - log.Printf("Functions: %d", len(swagger.Paths)) + log.Printf("Functions: %d", swagger.Paths) log.Printf("Actions: %d", len(api.Actions)) api.Owner = user.Id @@ -5694,6 +5693,9 @@ func verifySwagger(resp http.ResponseWriter, request *http.Request) { resp.Write([]byte(fmt.Sprintf(`{"success": true, "reason": "%"}`, err))) } + // Backup every single one + setOpenApiDatastore(ctx, api.ID, parsed) + err = increaseStatisticsField(ctx, "total_apps_created", newmd5, 1) if err != nil { log.Printf("Failed to increase success execution stats: %s", err) diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index b09713c7..36a3d6b0 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -1355,15 +1355,16 @@ 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 } - if app.Name == action.AppName && app.AppVersion == action.AppVersion { - curapp = app - break - } + //if app.Name == action.AppName && app.AppVersion == action.AppVersion { + // curapp = app + // break + //} } // Check to see if the whole app is valid @@ -1377,11 +1378,11 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) { // Check tosee if the appaction is valid curappaction := WorkflowAppAction{} for _, curAction := range curapp.Actions { + log.Printf("Same? %s - %s", action.Name, curAction.Name) if action.Name == curAction.Name { curappaction = curAction break } - log.Println(action.Name, curAction.Name) } // Check to see if the action is valid @@ -3376,7 +3377,7 @@ func iterateOpenApiGithub(fs billy.Filesystem, dir []os.FileInfo, extra string, } //log.Printf("Should generate yaml") - api, _, err := generateYaml(swagger, parsedOpenApi.ID) + swagger, api, _, err := generateYaml(swagger, parsedOpenApi.ID) if err != nil { log.Printf("Failed building and generating yaml in loop (%s): %s", filename, err) continue diff --git a/frontend/src/AngularWorkflow.js b/frontend/src/AngularWorkflow.js index a6f51927..05092d87 100644 --- a/frontend/src/AngularWorkflow.js +++ b/frontend/src/AngularWorkflow.js @@ -2639,27 +2639,28 @@ const AngularWorkflow = (props) => { SelectDisplayProps={{ style: { marginLeft: 10, + maxHeight: 200, } }} > - {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} - - ) - })} + + ) + })}
diff --git a/frontend/src/AppCreator.js b/frontend/src/AppCreator.js index c073d10d..5abdc6c3 100644 --- a/frontend/src/AppCreator.js +++ b/frontend/src/AppCreator.js @@ -16,6 +16,8 @@ import DialogActions from '@material-ui/core/DialogActions'; import TextField from '@material-ui/core/TextField'; import Tooltip from '@material-ui/core/Tooltip'; import CheckCircleIcon from '@material-ui/icons/CheckCircle'; +import Breadcrumbs from '@material-ui/core/Breadcrumbs'; +import AppsIcon from '@material-ui/icons/Apps'; import ErrorOutline from '@material-ui/icons/ErrorOutline'; import { useAlert } from "react-alert"; @@ -587,7 +589,7 @@ const AppCreator = (props) => { "required": required, "content": { "example": { - "example": "test", + "example": item.body, }, }, } @@ -1426,6 +1428,17 @@ const AppCreator = (props) => { // Random names for type & autoComplete. Didn't research :^) const landingpageDataBrowser =
+ + +

+ + Apps +

+ +

+ {name} +

+

General information

Click here to learn more about app creation diff --git a/frontend/src/Apps.js b/frontend/src/Apps.js index 5994986d..9198a301 100644 --- a/frontend/src/Apps.js +++ b/frontend/src/Apps.js @@ -2,6 +2,7 @@ import React, { useEffect} from 'react'; import { useInterval } from 'react-powerhooks'; +import AppsIcon from '@material-ui/icons/Apps'; import Grid from '@material-ui/core/Grid'; import Select from '@material-ui/core/Select'; import Paper from '@material-ui/core/Paper'; @@ -17,6 +18,7 @@ import Switch from '@material-ui/core/Switch'; import Input from '@material-ui/core/Input'; import YAML from 'yaml' import {Link} from 'react-router-dom'; +import Breadcrumbs from '@material-ui/core/Breadcrumbs'; import CloudDownload from '@material-ui/icons/CloudDownload'; import EditIcon from '@material-ui/icons/Edit'; @@ -137,13 +139,13 @@ const Apps = (props) => { alert.info("Downloading..") fetch(globalUrl+"/api/v1/apps/"+id+"/config", { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - 'Accept': 'application/json', - }, - credentials: "include", - }) + method: 'GET', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + credentials: "include", + }) .then((response) => { if (response.status !== 200) { window.location.pathname = "/apps" @@ -155,12 +157,22 @@ const Apps = (props) => { if (!responseJson.success) { alert.error("Failed to download file") } else { - const data = YAML.stringify(YAML.parse(responseJson.body)) + const inputdata = YAML.parse(responseJson.body) + const newpaths = {} + Object.keys(inputdata["paths"]).forEach(function(key) { + newpaths[key.split("?")[0]] = inputdata.paths[key] + }) - var name = inputdata.name + inputdata.paths = newpaths + console.log("INPUT: ", inputdata) + var name = inputdata.info.title name = name.replace(/ /g, "_", -1) name = name.toLowerCase() + delete inputdata.id + delete inputdata.editing + + const data = YAML.stringify(inputdata) var blob = new Blob( [ data ], { type: 'application/octet-stream' }) @@ -193,7 +205,6 @@ const Apps = (props) => { boxColor = "green" } - console.log("IMG: ", data.large_image) var imageline = data.large_image.length === 0 ? {data.title} : @@ -498,9 +509,22 @@ const Apps = (props) => { const appView = isLoggedIn ?
-
-

Upload

-
+
+ + +

+ + App upload +

+ + {selectedApp.activated && selectedApp.private_id !== undefined && selectedApp.private_id.length > 0 && selectedApp.generated ? + +

+ {selectedApp.name} +

+ + : null} +
@@ -988,11 +1012,7 @@ const Apps = (props) => {
// Maybe use gridview or something, idk - return ( -
- {loadedCheck} -
- ) + return loadedCheck } export default Apps