From eb59c0cea6164cc7f3b6c6651b091c7163d68461 Mon Sep 17 00:00:00 2001 From: frikky Date: Sun, 24 May 2020 08:57:26 +0200 Subject: [PATCH] Finished app activation with search engine --- backend/go-app/codegen.go | 1 + backend/go-app/main.go | 50 +++++++++++++------------------------- backend/go-app/walkoff.go | 18 ++++++++++++-- frontend/src/AppCreator.js | 32 ++++++++++++++++-------- frontend/src/Apps.js | 44 ++++++++++++++++++++------------- 5 files changed, 83 insertions(+), 62 deletions(-) diff --git a/backend/go-app/codegen.go b/backend/go-app/codegen.go index d37954a9..abe03fa8 100644 --- a/backend/go-app/codegen.go +++ b/backend/go-app/codegen.go @@ -361,6 +361,7 @@ func generateYaml(swagger *openapi3.Swagger, newmd5 string) (WorkflowApp, []stri api.Tested = false api.PrivateID = newmd5 api.Generated = true + api.Activated = true // Setting up security schemes extraParameters := []WorkflowAppActionParameter{} diff --git a/backend/go-app/main.go b/backend/go-app/main.go index 54cd69ba..ba9a5477 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -5194,24 +5194,21 @@ func handleSwaggerValidation(body []byte) (ParsedOpenApi, error) { if strings.HasPrefix(version.Swagger, "3.") || strings.HasPrefix(version.OpenAPI, "3.") { //log.Println("Handling v3 API") - _, err := openapi3.NewSwaggerLoader().LoadSwaggerFromData(body) + swaggerv3, err := openapi3.NewSwaggerLoader().LoadSwaggerFromData(body) if err != nil { return ParsedOpenApi{}, err } - hasher := md5.New() - hasher.Write(body) - idstring = hex.EncodeToString(hasher.Sum(nil)) - - //log.Printf("Swagger v3 validation success with ID %s!", idstring) - //log.Printf("Paths: %d", len(swagger.Paths)) - - if !isJson { - //log.Printf("FIXME: NEED TO TRANSFORM FROM YAML TO JSON for %s", idstring) + swaggerdata, err = json.Marshal(swaggerv3) + if err != nil { + log.Printf("Failed unmarshaling v3 data: %s", err) + return ParsedOpenApi{}, err } - //return nil - //return ParsedOpenApi{}, err + hasher := md5.New() + hasher.Write(swaggerdata) + idstring = hex.EncodeToString(hasher.Sum(nil)) + } else { //strings.HasPrefix(version.Swagger, "2.") || strings.HasPrefix(version.OpenAPI, "2.") { // Convert //log.Println("Handling v2 API") @@ -5245,24 +5242,19 @@ func handleSwaggerValidation(body []byte) (ParsedOpenApi, error) { hasher := md5.New() hasher.Write(swaggerdata) idstring = hex.EncodeToString(hasher.Sum(nil)) - if !isJson { - //log.Printf("FIXME: NEED TO TRANSFORM FROM YAML TO JSON for %s?", idstring) - } - //log.Printf("Swagger v2 -> v3 validation success with ID %s!", idstring) - - ctx := context.Background() - err = setOpenApiDatastore(ctx, idstring, parsed) - if err != nil { - log.Printf("Failed uploading openapi2 to datastore: %s", err) - return ParsedOpenApi{}, err - } - } if len(swaggerdata) > 0 { body = swaggerdata } + //parsed := ParsedOpenApi{} + if !isJson { + //yaml.l + log.Printf("Parsing from YAML to json!") + body = swaggerdata + } + // Parsing it to swagger 3 parsed = ParsedOpenApi{ ID: idstring, @@ -5695,14 +5687,6 @@ func verifySwagger(resp http.ResponseWriter, request *http.Request) { return } - log.Println(len(user.PrivateApps)) - c, err := request.Cookie("session_token") - if err == nil { - //log.Printf("Should've deleted cache for %s with token %s", user.Username, c.Value) - //err = memcache.Delete(request.Context(), c.Value) - //err = memcache.Delete(request.Context(), user.ApiKey) - } - parsed := ParsedOpenApi{ ID: api.ID, Body: string(body), @@ -5836,7 +5820,7 @@ func runInit(ctx context.Context) { if err != nil { log.Printf("Failed loading repo %s into memory: %s", err) } else { - log.Printf("Finished getting data.. Now looking for updates") + log.Printf("Finished git clone. Looking for updates to the repo.") dir, err := fs.ReadDir("") if err != nil { log.Printf("Failed reading folder: %s", err) diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index b62ce5dd..67d4835d 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -2704,7 +2704,6 @@ func getWorkflowAppConfig(resp http.ResponseWriter, request *http.Request) { } location := strings.Split(request.URL.String(), "/") - log.Printf("%#v", location) var fileId string if location[1] == "api" { if len(location) <= 4 { @@ -2732,14 +2731,22 @@ func getWorkflowAppConfig(resp http.ResponseWriter, request *http.Request) { return } + log.Printf("Getting app %s", fileId) parsedApi, err := getOpenApiDatastore(ctx, fileId) if err != nil { + log.Printf("OpenApi doesn't exist for: %s - err: %s", fileId, err) resp.WriteHeader(401) resp.Write([]byte(`{"success": false}`)) return } - parsedApi.Success = true + //log.Printf("Parsed API: %#v", parsedApi) + if len(parsedApi.ID) > 0 { + parsedApi.Success = true + } else { + parsedApi.Success = false + } + data, err := json.Marshal(parsedApi) if err != nil { resp.WriteHeader(422) @@ -3393,6 +3400,13 @@ func iterateOpenApiGithub(fs billy.Filesystem, dir []os.FileInfo, extra string, continue } else { log.Printf("Added %s:%s to the database from OpenAPI repo", api.Name, api.AppVersion) + + // Set OpenAPI datastore + err = setOpenApiDatastore(ctx, parsedOpenApi.ID, parsedOpenApi) + if err != nil { + log.Printf("Failed uploading openapi to datastore in loop: %s", err) + continue + } } } else { //log.Printf("Skipped upload of %s (%s)", api.Name, api.ID) diff --git a/frontend/src/AppCreator.js b/frontend/src/AppCreator.js index 5e85376b..24ab8353 100644 --- a/frontend/src/AppCreator.js +++ b/frontend/src/AppCreator.js @@ -81,7 +81,7 @@ const AppCreator = (props) => { const [actionsModalOpen, setActionsModalOpen] = useState(false); const [authenticationOption, setAuthenticationOption] = useState(authenticationOptions[0]); const [parameterName, setParameterName] = useState(""); - const [parameterLocation, setParameterLocation] = useState(apikeySelection[0]); + const [parameterLocation, setParameterLocation] = useState(apikeySelection.length > 0 ? apikeySelection[0] : ""); const [urlPath, setUrlPath] = useState(""); //const [urlPathQueries, setUrlPathQueries] = useState([{"name": "test", "required": false}]); const [urlPathQueries, setUrlPathQueries] = useState([]); @@ -161,7 +161,7 @@ const AppCreator = (props) => { .then((responseJson) => { setIsAppLoaded(true) if (!responseJson.success) { - alert.error("Failed to verify") + alert.error("Failed to get the app") } else { const data = JSON.parse(responseJson.body) console.log("LOADED IMAGE: ", data.image) @@ -263,9 +263,12 @@ const AppCreator = (props) => { break } else if (value.type === "apiKey") { setAuthenticationOption("API key") - setParameterName(value.name) + setParameterName(value.name) + + value.in = value.in.charAt(0).toUpperCase() + value.in.slice(1); setParameterLocation(value.in) if (!apikeySelection.includes(value.in)) { + console.log("APIKEY SELECT: ", apikeySelection) alert.error("Might be error in setting up API key authentication") } break @@ -593,6 +596,9 @@ const AppCreator = (props) => { setActions(actions) } + console.log("Option: ", authenticationOption) + console.log("Location: ", parameterLocation) + console.log("Name: ", parameterName) const apiKey = authenticationOption === "API key" ?

API key

@@ -605,6 +611,7 @@ const AppCreator = (props) => { id="standard-required" margin="normal" variant="outlined" + defaultValue={parameterName} helperText={
Can't be empty. Can't contain any of the following characters: !#$%&'^+-._~|]+$
} onChange={e => setParameterName(e.target.value)} InputProps={{ @@ -628,13 +635,18 @@ const AppCreator = (props) => { name: 'age', id: 'outlined-age-simple', }} - > - > - {apikeySelection.map(data => ( - - {data} - - ))} + > + {apikeySelection.map(data => { + if (data === undefined) { + return null + } + + return ( + + {data} + + )} + )}
diff --git a/frontend/src/Apps.js b/frontend/src/Apps.js index e5c3b5bf..8fdde37b 100644 --- a/frontend/src/Apps.js +++ b/frontend/src/Apps.js @@ -262,7 +262,7 @@ const Apps = (props) => { const dividerColor = "rgb(225, 228, 232)" const uploadViewPaperStyle = { minWidth: "100%", - maxWidth: "100%", + maxWidth: 662.5, color: "white", backgroundColor: surfaceColor, display: "flex", @@ -285,9 +285,10 @@ const Apps = (props) => { var description = selectedApp.description - const url = "/apps/edit/"+selectedApp.id + const editUrl = "/apps/edit/"+selectedApp.id + const activateUrl = "/apps/new?id="+selectedApp.id var editButton = selectedApp.activated && selectedApp.private_id !== undefined && selectedApp.private_id.length > 0 && selectedApp.generated ? - + : null var activateButton = selectedApp.generated && !selectedApp.activated ? - + : null - - var deleteButton = (selectedApp.private_id !== undefined && selectedApp.private_id.length > 0 && selectedApp.generated) || (selectedApp.downloaded != undefined && selectedApp.downloaded == true) ? + var deleteButton = ((selectedApp.private_id !== undefined && selectedApp.private_id.length > 0 && selectedApp.generated) || (selectedApp.downloaded != undefined && selectedApp.downloaded == true)) && activateButton === null ? : null + var imageline = selectedApp.large_image === undefined || selectedApp.large_image.length === 0 ? + {selectedApp.title} + : + {selectedApp.title} //fetch(globalUrl+"/api/v1/get_openapi/"+urlParams.get("id"), { var baseInfo = newAppname.length > 0 ?
-

{newAppname}

-

{description}

+
+
+ {imageline} +
+
+

{newAppname}

+

{description}

+
+
+ {activateButton} + {editButton} + {deleteButton} - {selectedApp.link.length > 0 ?

URL: {selectedApp.link}

: null} -

ID: {selectedApp.id}

- {selectedApp.privateId !== undefined && selectedApp.privateId.length > 0 ?

PrivateID: {selectedApp.privateId}

: null} + {selectedApp.link.length > 0 ?

URL: {selectedApp.link}

: null} +

ID: {selectedApp.id}

+ {selectedApp.privateId !== undefined && selectedApp.privateId.length > 0 ?

PrivateID: {selectedApp.privateId}

: null}
Actions @@ -387,10 +401,6 @@ const Apps = (props) => { })}
: null} - - {activateButton} - {editButton} - {deleteButton}
: null @@ -490,7 +500,7 @@ const Apps = (props) => { setLoadAppsModalOpen(true) }} > - Download from URL + Download more apps