diff --git a/backend/go-app/main.go b/backend/go-app/main.go index b50ba5b1..54b29c62 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -5458,7 +5458,7 @@ func echoOpenapiData(resp http.ResponseWriter, request *http.Request) { if err != nil { log.Printf("Api authentication failed in validate swagger: %s", err) resp.WriteHeader(401) - resp.Write([]byte(`{"success": false}`)) + resp.Write([]byte(`{"success": false, "reason": "Failed authentication"}`)) return } @@ -5504,6 +5504,12 @@ func echoOpenapiData(resp http.ResponseWriter, request *http.Request) { return } + if newresp.StatusCode >= 400 { + resp.WriteHeader(201) + resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "%s"}`, urlbody))) + return + } + resp.WriteHeader(200) resp.Write(urlbody) } @@ -5734,6 +5740,8 @@ func validateSwagger(resp http.ResponseWriter, request *http.Request) { err = gyaml.Unmarshal(body, &swagger) if err != nil { log.Printf("Yaml error: %s", err) + } else { + log.Printf("Found valid yaml!") } resp.WriteHeader(422) diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index 86c25561..bb1d97e8 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -3817,9 +3817,6 @@ func getWorkflowApps(resp http.ResponseWriter, request *http.Request) { } } - log.Printf("User: %d", len(user.PrivateApps)) - log.Printf("All: %d", len(workflowapps)) - // Double unmarshal because of user apps newbody, err := json.Marshal(newapps) //newbody, err := json.Marshal(workflowapps) diff --git a/frontend/src/views/Apps.jsx b/frontend/src/views/Apps.jsx index 1bdbb68c..105e5dda 100644 --- a/frontend/src/views/Apps.jsx +++ b/frontend/src/views/Apps.jsx @@ -349,8 +349,10 @@ const Apps = (props) => { return ( ) @@ -515,7 +517,6 @@ const Apps = (props) => { ] //fetch(globalUrl+"/api/v1/get_openapi/"+urlParams.get("id"), - console.log("User: ", props.userdata) var baseInfo = newAppname.length > 0 ?
@@ -544,7 +545,9 @@ const Apps = (props) => { return ( @@ -1030,7 +1033,7 @@ const Apps = (props) => { setValidation(true) fetch(globalUrl+"/api/v1/get_openapi_uri", { - method: 'POST', + method: 'POST', headers: { 'Accept': 'application/json', }, @@ -1038,19 +1041,34 @@ const Apps = (props) => { credentials: "include", }) .then((response) => { + setValidation(false) + if (response.status !== 200) { + return response.json() + } + return response.text() }) - .then((responseText) => { - validateOpenApi(responseText) - setValidation(false) - }) + .then((responseJson) => { + if (typeof(responseJson) !== "string" && !responseJson.success) { + console.log(responseJson.reason) + if (responseJson.reason !== undefined) { + setOpenApiError(responseJson.reason) + } else { + setOpenApiError("Undefined issue with OpenAPI validation") + } + return + } + + validateOpenApi(responseJson) + }) .catch(error => { alert.error(error.toString()) + setOpenApiError(error.toString()) }); } const escapeApiData = (apidata) => { - console.log(apidata) + //console.log(apidata) try { return JSON.stringify(JSON.parse(apidata)) } catch(error) { @@ -1062,7 +1080,7 @@ const Apps = (props) => { return JSON.stringify(YAML.parse(apidata)) } catch(error) { console.log("YAML DECODE ERROR - TRY SOMETHING ELSE?: "+error) - setOpenApiError(error) + setOpenApiError(error.toString()) } return "" @@ -1076,6 +1094,7 @@ const Apps = (props) => { return } + setValidation(true) fetch(globalUrl+"/api/v1/validate_openapi", { method: 'POST', headers: { @@ -1085,10 +1104,10 @@ const Apps = (props) => { credentials: "include", }) .then((response) => { + setValidation(false) return response.json() }) - .then((responseJson) => { - setValidation(false) + .then((responseJson) => { if (responseJson.success) { setAppValidation(responseJson.id) } else { @@ -1099,7 +1118,9 @@ const Apps = (props) => { } }) .catch(error => { + setValidation(false) alert.error(error.toString()) + setOpenApiError(error.toString()) }); } @@ -1245,7 +1266,9 @@ const Apps = (props) => { const modalView = openApiModal ? {setOpenApiModal(false)}} + onClose={() => { + setOpenApiModal(false) + }} PaperProps={{ style: { backgroundColor: surfaceColor, @@ -1269,13 +1292,16 @@ const Apps = (props) => { height: "50px", fontSize: "1em", }, - endAdornment: }} - onChange={e => setOpenApi(e.target.value)} - helperText={
Must point to a version 2 or 3 specification.
} + onChange={e => { + setOpenApi(e.target.value) + }} + helperText={Must point to a version 2 or 3 OpenAPI specification.} placeholder="OpenAPI URI" fullWidth /> @@ -1285,7 +1311,7 @@ const Apps = (props) => {
https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v2.0/json/uber.json */} -

Or paste the yaml/JSON directly below

+ Or paste the YAML or JSON specification { color: "white", fontSize: "1em", }, - endAdornment: + }}>Validate OpenAPI }} onChange={e => setOpenApiData(e.target.value)} - helperText={
Must point to a version 2 or 3 specification.
} + helperText={Must point to a version 2 or 3 specification.} placeholder="OpenAPI text" fullWidth /> @@ -1311,13 +1337,19 @@ const Apps = (props) => { {circularLoader} - - + diff --git a/frontend/src/views/Workflows.jsx b/frontend/src/views/Workflows.jsx index 66bae799..a358a376 100644 --- a/frontend/src/views/Workflows.jsx +++ b/frontend/src/views/Workflows.jsx @@ -530,8 +530,10 @@ const Workflows = (props) => { return ( ) @@ -542,17 +544,17 @@ const Workflows = (props) => { - + {webhooks > 0 ? - + {data.title} : null} {schedules > 0 ? - + {data.title} : null}