From f3b45de994d241a071a64fbea1cee8d88d56e4bf Mon Sep 17 00:00:00 2001 From: frikky Date: Sun, 31 Jan 2021 10:05:34 +0100 Subject: [PATCH 01/37] Fixed broken conditions link --- .env | 4 ++-- frontend/src/views/AngularWorkflow.jsx | 2 +- frontend/src/views/AppCreator.jsx | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.env b/.env index 45389f1f..0fe788c9 100644 --- a/.env +++ b/.env @@ -29,7 +29,7 @@ BACKEND_PORT=5001 FRONTEND_PORT=3001 FRONTEND_PORT_HTTPS=3443 OUTER_HOSTNAME=shuffle-backend -DB_LOCATION=./shuffle-database +DB_LOCATION=./shuffle-database-demo # Proxy configurations. SHUFFLE_PASS_WORKER_PROXY must be FALSE to not pass the proxy information to sub-apps. # PS: It will skip proxy for @@ -39,7 +39,7 @@ SHUFFLE_PASS_WORKER_PROXY=TRUE SHUFFLE_BASE_IMAGE_REGISTRY=ghcr.io SHUFFLE_BASE_IMAGE_NAME=frikky -SHUFFLE_BASE_IMAGE_TAG_SUFFIX="-0.8.3" +SHUFFLE_BASE_IMAGE_TAG_SUFFIX="-0.8.5" # Used for auto-cleanup of containers. REALLY important at scale. SHUFFLE_CONTAINER_AUTO_CLEANUP=false diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 7ce3669f..f4aca36c 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -4754,7 +4754,7 @@ const AngularWorkflow = (props) => {

Branch: Conditions - {selectedEdgeIndex}

- What are conditions? + What are conditions?
diff --git a/frontend/src/views/AppCreator.jsx b/frontend/src/views/AppCreator.jsx index 5b4cb70f..5ee0d1ec 100644 --- a/frontend/src/views/AppCreator.jsx +++ b/frontend/src/views/AppCreator.jsx @@ -1702,7 +1702,7 @@ const AppCreator = (props) => {
New action
- Learn more about actions + Learn more about actions
Name {

Actions ({actions.length})

Actions are the tasks performed by an app. Read more about actions and apps - here. +
here.
{loopActions}
From 8671f7a31ef504ba5e6ec9fc475f90fa1484f192 Mon Sep 17 00:00:00 2001 From: frikky Date: Sun, 31 Jan 2021 11:56:42 +0100 Subject: [PATCH 02/37] Removed most debug logs from App SDK --- backend/app_sdk/app_base.py | 44 +++++++++++++++++++++++-------------- backend/app_sdk/build.sh | 2 +- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index e0c9ec6a..495bd503 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -40,10 +40,22 @@ class AppBase: if action_result["status"] == "EXECUTING": action_result["status"] = "FAILURE" + # FIXME: Add cleanup of parameters to not send to frontend here + params = {} + #action = action_result["action"] + #try: + # for item in action["authentication"]: + # for action["parameters"] + # print("AUTH: ", key, value) + # params[item["key"]] = item["value"] + #except KeyError: + # print("No authentication specified!") + # pass + # I wonder if this actually works self.logger.info("Before last stream result") url = "%s%s" % (self.base_url, stream_path) - print("URL: %s" % url) + print("[INFO] URL (URL): %s" % url) try: ret = requests.post(url, headers=headers, json=action_result) self.logger.info("Result: %d" % ret.status_code) @@ -130,7 +142,7 @@ class AppBase: octothorpe_count = param["value"].count(".#") if octothorpe_count > self.result_wrapper_count: self.result_wrapper_count = octothorpe_count - print("NEW OCTOTHORPE WRAPPER: %d" % octothorpe_count) + print("[INFO] NEW OCTOTHORPE WRAPPER: %d" % octothorpe_count) # This whole thing is hard. # item = [{"data": "1.2.3.4", "dataType": "ip"}] @@ -720,7 +732,7 @@ class AppBase: else: tmp = json.loads(parsedlist)[lastsplit[0]] - print(tmp) + #print(tmp) return tmp except IndexError as e: return default_error @@ -751,8 +763,8 @@ class AppBase: # Do stuff here. innervalue = parse_nested_param(data, maxDepth(data)-0) outervalue = parse_nested_param(data, maxDepth(data)-1) - print("INNER: ", innervalue) - print("OUTER: ", outervalue) + #print("INNER: ", innervalue) + #print("OUTER: ", outervalue) if outervalue != innervalue: #print("Outer: ", outervalue, " inner: ", innervalue) @@ -769,7 +781,7 @@ class AppBase: print("Parsed value from %s: %s" % (thistype, parsed_value)) return (parsed_value, True) - print("DATA: %s\n" % data) + #print("DATA: %s\n" % data) return (parse_wrapper(data)[0], True) @@ -829,12 +841,12 @@ class AppBase: return data if len(parsedlist) > 0 and not non_string: - print("Returning parsed list: ", parsedlist) + #print("Returning parsed list: ", parsedlist) return " ".join(parsedlist) elif len(parsedlist) == 1 and non_string: return parsedlist[0] else: - print("Casting back to string because multi: ", parsedlist) + #print("Casting back to string because multi: ", parsedlist) newlist = [] for item in parsedlist: try: @@ -848,13 +860,13 @@ class AppBase: # Parses JSON loops and such down to the item you're looking for def recurse_json(basejson, parsersplit): match = "#(\d+):?-?([0-9a-z]+)?#?" - print("Split: %s\n%s" % (parsersplit, basejson)) + #print("Split: %s\n%s" % (parsersplit, basejson)) try: outercnt = 0 # Loops over split values for value in parsersplit: - print("VALUE: %s\n" % value) + #print("VALUE: %s\n" % value) actualitem = re.findall(match, value, re.MULTILINE) if value == "#": newvalue = [] @@ -875,7 +887,7 @@ class AppBase: return newvalue, True elif len(actualitem) > 0: - print("[INFO] In recursion v2: ", actualitem) + #print("[INFO] In recursion v2: ", actualitem) is_loop = True newvalue = [] @@ -884,7 +896,7 @@ class AppBase: # Means it's a single item -> continue if seconditem == "": - print("[INFO] In first - handling %s" % firstitem) + #print("[INFO] In first - handling %s" % firstitem) tmpitem = basejson[int(firstitem)] try: newvalue, is_loop = recurse_json(tmpitem, parsersplit[outercnt+1:]) @@ -1031,7 +1043,7 @@ class AppBase: baseresult = baseresult.replace(" True,", " true,") baseresult = baseresult.replace(" False", " false,") - print("[INFP] After third parser return - Formatted: ", baseresult) + print("[INFO] After third parser return - Formatted: ", baseresult) basejson = {} try: basejson = json.loads(baseresult) @@ -1685,8 +1697,8 @@ class AppBase: # "id": "body_replacement", #}) - print("[INFO] APP_SDK DONE: Starting NORMAL execution of function") - print("[INFO] Running with params (0): %s" % params) + #print("[INFO] APP_SDK DONE: Starting NORMAL execution of function") + #print("[INFO] Running with params (0): %s" % params) newres = await func(**params) print("[INFO] Returned from execution:", newres) if isinstance(newres, tuple): @@ -1725,7 +1737,7 @@ class AppBase: print("[INFO] POST NEWRES RESULT: ", result) else: - print("[INFO] APP_SDK DONE: Starting MULTI execution (length: %d) with values %s" % (minlength, multi_parameters)) + #print("[INFO] APP_SDK DONE: Starting MULTI execution (length: %d) with values %s" % (minlength, multi_parameters)) # 1. Use number of executions based on the arrays being similar # 2. Find the right value from the parsed multi_params diff --git a/backend/app_sdk/build.sh b/backend/app_sdk/build.sh index 5f09b969..96204598 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.54 +VERSION=0.8.56 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 From 7c0b0c8c2b6f89f5cac3b844f1a69124428f5314 Mon Sep 17 00:00:00 2001 From: frikky Date: Mon, 1 Feb 2021 01:44:43 +0100 Subject: [PATCH 03/37] Rollback .env --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index 0fe788c9..bd8738f6 100644 --- a/.env +++ b/.env @@ -29,7 +29,7 @@ BACKEND_PORT=5001 FRONTEND_PORT=3001 FRONTEND_PORT_HTTPS=3443 OUTER_HOSTNAME=shuffle-backend -DB_LOCATION=./shuffle-database-demo +DB_LOCATION=./shuffle-database # Proxy configurations. SHUFFLE_PASS_WORKER_PROXY must be FALSE to not pass the proxy information to sub-apps. # PS: It will skip proxy for From 11ddf604ec0902da767bc5dd26560575ce3a29f3 Mon Sep 17 00:00:00 2001 From: frikky Date: Wed, 3 Feb 2021 03:03:50 +0100 Subject: [PATCH 04/37] Fixed frontend vulnerabilities --- backend/app_sdk/app_base.py | 1 + frontend/package.json | 4 ++-- frontend/src/views/AppCreator.jsx | 4 ++-- frontend/src/views/Apps.jsx | 5 +++++ functions/onprem/worker/worker.go | 4 ++-- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index 495bd503..021f58ed 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -1476,6 +1476,7 @@ class AppBase: #json_replacement = tmpitem.replace(actualitem[0][0], replacement, 1) #print("AFTER POST replacement: %s" % json_replacement) + #json_replacement = replacement try: json_replacement = json.loads(replacement) except json.decoder.JSONDecodeError as e: diff --git a/frontend/package.json b/frontend/package.json index bb24de65..0b99f34c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -36,7 +36,7 @@ "react-alert": "^5.5.0", "react-alert-template-basic": "^1.0.0", "react-beforeunload": "^2.2.1", - "react-chartjs-2": "^2.8.0", + "react-chartjs-2": "^2.11.1", "react-cookie": "^4.0.1", "react-cytoscapejs": "^1.2.0", "react-device-detect": "^1.9.10", @@ -52,7 +52,7 @@ "react-powerhooks": "0.0.7", "react-router": "^4.3.1", "react-router-dom": "^4.3.1", - "react-scripts": "^3.4.1", + "react-scripts": "^4.0.1", "reactstrap": "^7.1.0", "shellwords": "^0.1.1", "simplebar": "^4.2.3", diff --git a/frontend/src/views/AppCreator.jsx b/frontend/src/views/AppCreator.jsx index 5ee0d1ec..bc5128e7 100644 --- a/frontend/src/views/AppCreator.jsx +++ b/frontend/src/views/AppCreator.jsx @@ -1702,7 +1702,7 @@ const AppCreator = (props) => {
New action
-
Learn more about actions + Learn more about actions
Name {

Actions ({actions.length})

Actions are the tasks performed by an app. Read more about actions and apps - here. + here.
{loopActions}
diff --git a/frontend/src/views/Apps.jsx b/frontend/src/views/Apps.jsx index 15289670..9d6263e8 100644 --- a/frontend/src/views/Apps.jsx +++ b/frontend/src/views/Apps.jsx @@ -168,6 +168,10 @@ const Apps = (props) => { }) function sortByKey(array, key) { + if (array === undefined || array === null) { + return [] + } + return array.sort(function(a, b) { var x = a[key]; var y = b[key]; @@ -222,6 +226,7 @@ const Apps = (props) => { return response.json() }) .then((responseJson) => { + console.log("Apps: ", responseJson) responseJson = sortByKey(responseJson, "large_image") setApps(responseJson) diff --git a/functions/onprem/worker/worker.go b/functions/onprem/worker/worker.go index 1c36bdb2..e49e313e 100644 --- a/functions/onprem/worker/worker.go +++ b/functions/onprem/worker/worker.go @@ -839,7 +839,7 @@ func shutdown(executionId, workflowId string) { log.Printf("[INFO] Failed abort request: %s", err) } - sleepDuration := 0 + sleepDuration := 1 log.Printf("[INFO] Finished shutdown (after %d seconds).", sleepDuration) // Allows everything to finish in subprocesses time.Sleep(time.Duration(sleepDuration) * time.Second) @@ -2754,7 +2754,7 @@ func main() { if firstRequest { firstRequest = false - workflowExecution.StartedAt = int64(time.Now().Unix()) + //workflowExecution.StartedAt = int64(time.Now().Unix()) cacheKey := fmt.Sprintf("workflowexecution-%s", workflowExecution.ExecutionId) requestCache = cache.New(5*time.Minute, 10*time.Minute) From 681be88a3c81fe07eff4e7181d83013d368f5abe Mon Sep 17 00:00:00 2001 From: frikky Date: Sat, 6 Feb 2021 13:09:55 +0100 Subject: [PATCH 05/37] Added categories to workflows --- backend/go-app/main.go | 6 +-- backend/go-app/walkoff.go | 68 +++++++++++++++++++++++--- frontend/src/views/AngularWorkflow.jsx | 15 +++--- frontend/src/views/AppCreator.jsx | 20 ++++++-- frontend/src/views/Apps.jsx | 2 +- frontend/src/views/Workflows.jsx | 9 ++-- functions/onprem/orborus/orborus.go | 2 +- 7 files changed, 95 insertions(+), 27 deletions(-) diff --git a/backend/go-app/main.go b/backend/go-app/main.go index b7e9a7fd..1ffd334f 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -2877,8 +2877,8 @@ func fixUserOrg(ctx context.Context, user *User) *User { // Used for testing only. Shouldn't impact production. func handleCors(resp http.ResponseWriter, request *http.Request) bool { - //allowedOrigins := "http://localhost:3000" - allowedOrigins := "http://localhost:3002" + allowedOrigins := "http://localhost:3000" + //allowedOrigins := "http://localhost:3002" resp.Header().Set("Vary", "Origin") resp.Header().Set("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me, Authorization") @@ -4628,7 +4628,7 @@ func findAvailablePorts(startRange int64, endRange int64) string { func handleSendalert(resp http.ResponseWriter, request *http.Request) { user, err := handleApiAuthentication(resp, request) if err != nil { - log.Printf("Api authentication failed in getworkflows: %s", err) + log.Printf("Api authentication failed in sendalert: %s", err) resp.WriteHeader(401) resp.Write([]byte(`{"success": false}`)) return diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index c77f4345..a23a15a3 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -190,6 +190,10 @@ type WorkflowApp struct { Name string `json:"name" datastore:"name" yaml:"name"` Url string `json:"url" datastore:"url" yaml:"url"` } `json:"contact_info" datastore:"contact_info" yaml:"contact_info" required:false` + ReferenceInfo struct { + DocumentationUrl string `json:"documentation_url" datastore:"documentation_url"` + GithubUrl string `json:"github_url" datastore:"github_url"` + } Actions []WorkflowAppAction `json:"actions" yaml:"actions" required:true datastore:"actions,noindex"` Authentication Authentication `json:"authentication" yaml:"authentication" required:false datastore:"authentication"` Tags []string `json:"tags" yaml:"tags" required:false datastore:"activated"` @@ -317,6 +321,7 @@ type Action struct { AuthenticationId string `json:"authentication_id" datastore:"authentication_id"` Example string `json:"example,omitempty" datastore:"example"` AuthNotRequired bool `json:"auth_not_required,omitempty" datastore:"auth_not_required" yaml:"auth_not_required"` + Category string `json:"category" datastore:"category"` } // Added environment for location to execute @@ -406,8 +411,26 @@ type Workflow struct { Name string `json:"name" datastore:"name"` Value string `json:"value" datastore:"value,noindex"` } `json:"execution_variables,omitempty" datastore:"execution_variables"` - ExecutionEnvironment string `json:"execution_environment" datastore:"execution_environment"` - PreviouslySaved bool `json:"first_save" datastore:"first_save"` + ExecutionEnvironment string `json:"execution_environment" datastore:"execution_environment"` + PreviouslySaved bool `json:"first_save" datastore:"first_save"` + Categories Categories `json:"categories" datastore:"categories"` +} + +type Category struct { + Name string `json:"name" datastore:"name"` + Description string `json:"description" datastore:"description"` + Count int64 `json:"count" datastore:"count"` +} + +type Categories struct { + SIEM Category `json:"siem" datastore:"siem"` + Communication Category `json:"communication" datastore:"communication"` + Assets Category `json:"assets" datastore:"assets"` + Cases Category `json:"cases" datastore:"cases"` + Network Category `json:"network" datastore:"network"` + Intel Category `json:"intel" datastore:"intel"` + EDR Category `json:"edr" datastore:"edr"` + Other Category `json:"other" datastore:"other"` } type ActionResult struct { @@ -1641,13 +1664,16 @@ func getWorkflows(resp http.ResponseWriter, request *http.Request) { q = q.Limit(35) _, err = dbclient.GetAll(ctx, q, &workflows) if err != nil { - log.Printf("Failed getting workflows for user %s: %s", user.Username, err) + log.Printf("Failed getting workflows for user %s: %s (0)", user.Username, err) resp.WriteHeader(401) resp.Write([]byte(`{"success": false}`)) return } } else { - log.Printf("Failed getting workflows for user %s: %s", user.Username, err) + log.Printf("Failed getting workflows for user %s: %s (1)", user.Username, err) + //DeleteKey(ctx, "workflow", "5694357e-8063-4580-8529-301cc72df951") + + //log.Printf("Workflows: %#v", workflows) resp.WriteHeader(401) resp.Write([]byte(`{"success": false}`)) return @@ -2066,6 +2092,32 @@ func updateAppAuth(auth AppAuthenticationStorage, workflowId, nodeId string, add return nil } +func handleCategoryIncrease(workflow Workflow, action Action) Categories { + if action.Category == "" { + log.Printf("Should find app's categories as it's empty during save") + return workflow.Categories + } + + newCategory := "cases" + log.Printf("Adding %s category", newCategory) + switch category := newCategory; { + case category == "cases": + workflow.Categories.Cases.Count += 1 + default: + log.Printf("Can't handle category %s", category) + } + + //Categories Categories `json:"categories" datastore:"categories"` + //found := false + //for _, category := range workflow.Categories { + // if category == newCategory { + // log.Printf("Category %s already exists", category) + // return workflow + //} + //workflow.Categories = handleCategoryIncrease(workflow, action.Category) + return workflow.Categories +} + // Saves a workflow to an ID func saveWorkflow(resp http.ResponseWriter, request *http.Request) { cors := handleCors(resp, request) @@ -2166,6 +2218,7 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) { // FIXME - this shouldn't be necessary with proper API checks newActions := []Action{} allNodes := []string{} + workflow.Categories = Categories{} //log.Printf("Action: %#v", action.Authentication) for _, action := range workflow.Actions { @@ -2193,6 +2246,7 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) { action.Errors = []string{} } + workflow.Categories = handleCategoryIncrease(workflow, action) newActions = append(newActions, action) } @@ -2203,7 +2257,7 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) { workflowapps, apperr := getAllWorkflowApps(ctx, 500) allAuths, err := getAllWorkflowAppAuth(ctx, user.ActiveOrg.Id) if err == nil && len(workflowapps) > 0 && apperr == nil { - log.Printf("Setting actions") + //log.Printf("Setting actions") actionFixing := []Action{} appsAdded := []string{} for _, action := range newActions { @@ -2533,7 +2587,7 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) { // FIXME - might be a sploit to run someone elses app if getAllWorkflowApps // doesn't check sharing=true // Have to do it like this to add the user's apps - log.Println("Apps set starting") + //log.Println("Apps set starting") //log.Printf("EXIT ON ERROR: %#v", workflow.Configuration.ExitOnError) workflowApps := []WorkflowApp{} //memcacheName = "all_apps" @@ -4625,7 +4679,7 @@ func deleteWorkflowApp(resp http.ResponseWriter, request *http.Request) { user.PrivateApps = privateApps err = setUser(ctx, &user) if err != nil { - log.Printf("[ERROR]Failed removing %s app for user %s: %s", app.Name, user.Username, err) + log.Printf("[ERROR] Failed removing %s app for user %s: %s", app.Name, user.Username, err) resp.WriteHeader(401) resp.Write([]byte(fmt.Sprintf(`{"success": true"}`))) return diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index f4aca36c..598bef39 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -433,7 +433,7 @@ const AngularWorkflow = (props) => { const abortExecution = () => { setExecutionRunning(false) - alert.info("Aborting execution") + //alert.info("Aborting execution") fetch(globalUrl+"/api/v1/workflows/"+props.match.params.key+"/executions/"+executionRequest.execution_id+"/abort", { method: 'GET', headers: { @@ -1859,13 +1859,6 @@ const AngularWorkflow = (props) => { height: "100%", } - const scrollStyle = { - marginTop: 10, - overflow: "scroll", - height: "100%", - overflowX: "auto", - overflowY: "auto", - } const paperAppStyle = { borderRadius: borderRadius, @@ -2429,8 +2422,11 @@ const AngularWorkflow = (props) => { authentication: [], execution_variable: undefined, example: example, + category: app.categories !== null && app.categories !== undefined && app.categories.length > 0 ? app.categories[0] : "" } + // FIXME: overwrite category if the ACTION chosen has a different category + // const image = "url("+app.large_image+")" // FIXME - find the cytoscape offset position @@ -2489,6 +2485,8 @@ const AngularWorkflow = (props) => { } workflow.actions.push(newAppData) + + console.log(workflow.categories) setWorkflow(workflow) if (newAppPopup) { @@ -2605,7 +2603,6 @@ const AngularWorkflow = (props) => { return null } - console.log("APP: ", app) return( ) diff --git a/frontend/src/views/AppCreator.jsx b/frontend/src/views/AppCreator.jsx index bc5128e7..f23d42ba 100644 --- a/frontend/src/views/AppCreator.jsx +++ b/frontend/src/views/AppCreator.jsx @@ -195,7 +195,7 @@ const AppCreator = (props) => { const alert = useAlert() var upload = "" - const increaseAmount = 30 + const increaseAmount = 50 const actionNonBodyRequest = ["GET", "HEAD", "DELETE", "CONNECT"] const actionBodyRequest = ["POST", "PUT", "PATCH",] const authenticationOptions = ["No authentication", "API key", "Bearer auth", "Basic auth", ] @@ -1230,6 +1230,11 @@ const AppCreator = (props) => { newAction.errors.push("Can't have the same name") actions.push(newAction) + + if (actions.length > actionAmount) { + setActionAmount(actions.length) + } + setActions(actions) setUpdate(Math.random()) } @@ -1539,6 +1544,11 @@ const AppCreator = (props) => { actions[actionIndex] = currentAction } + + if (actions.length > actionAmount) { + setActionAmount(actions.length) + } + setActions(actions) } @@ -1973,6 +1983,7 @@ const AppCreator = (props) => { setUrlPathQueries([]) setUrlPath("") setFileUploadEnabled(false) + }}> Submit @@ -2053,8 +2064,10 @@ const AppCreator = (props) => { setCurrentActionMethod(actionNonBodyRequest[0]) setActionsModalOpen(true) }}>New action + {/* + {actionAmount} {actions.length} {actionAmount > 0 && actionAmount < actions.length ? null : - } + */}
@@ -2136,7 +2150,7 @@ const AppCreator = (props) => {

- {name} + {name} ({actions === null || actions === undefined ? 0 : actions.length})

diff --git a/frontend/src/views/Apps.jsx b/frontend/src/views/Apps.jsx index 9d6263e8..5ae1ee01 100644 --- a/frontend/src/views/Apps.jsx +++ b/frontend/src/views/Apps.jsx @@ -169,7 +169,7 @@ const Apps = (props) => { function sortByKey(array, key) { if (array === undefined || array === null) { - return [] + return array } return array.sort(function(a, b) { diff --git a/frontend/src/views/Workflows.jsx b/frontend/src/views/Workflows.jsx index 83616e2b..f28ad54a 100644 --- a/frontend/src/views/Workflows.jsx +++ b/frontend/src/views/Workflows.jsx @@ -191,18 +191,21 @@ const Workflows = (props) => { }) .then((response) => { if (response.status !== 200) { - console.log("Status not 200 for workflows :O!") + console.log("Status not 200 for workflows :O!: ", response.status) + alert.info("Failed getting workflows.") + setWorkflowDone(true) + return } return response.json() }) - .then((responseJson) => { + .then((responseJson) => { setSelectedExecution({}) setWorkflowExecutions([]) if (responseJson !== undefined) { setWorkflows(responseJson) - setWorkflowDone(true) + setWorkflowDone(true) } else { if (isLoggedIn) { alert.error("An error occurred while loading workflows") diff --git a/functions/onprem/orborus/orborus.go b/functions/onprem/orborus/orborus.go index f4f7f50a..fbfdf0eb 100644 --- a/functions/onprem/orborus/orborus.go +++ b/functions/onprem/orborus/orborus.go @@ -258,7 +258,7 @@ func initializeImages() { log.Printf("[WARNING] SHUFFLE_APP_SDK_VERSION not defined. Defaulting to %s", appSdkVersion) } if workerVersion == "" { - workerVersion = "0.8.54" + workerVersion = "0.8.56" log.Printf("[WARNING] SHUFFLE_WORKER_VERSION not defined. Defaulting to %s", workerVersion) } From 43a3b0f1d64e42eaa90ad24efb5741c857b48225 Mon Sep 17 00:00:00 2001 From: frikky Date: Sat, 6 Feb 2021 13:37:24 +0100 Subject: [PATCH 06/37] Fixed app syncronization issue when making new from workflow --- frontend/src/views/AngularWorkflow.jsx | 30 ++++++++++++++++---------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 598bef39..9594cce5 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -338,7 +338,7 @@ const AngularWorkflow = (props) => { .then((response) => { if (response.status !== 200) { console.log("Status not 200 for setting app auth :O!") - } + } return response.json() }) @@ -346,7 +346,10 @@ const AngularWorkflow = (props) => { if (!responseJson.success) { alert.error("Failed to set app auth: "+responseJson.reason) } else { + getAppAuthentication(true) setAuthenticationModalOpen(false) + + // Needs a refresh with the new authentication.. alert.success("Successfully saved new app auth") } }) @@ -930,7 +933,7 @@ const AngularWorkflow = (props) => { "Http", ] - const getAppAuthentication = () => { + const getAppAuthentication = (reset) => { fetch(globalUrl+"/api/v1/apps/authentication", { method: 'GET', headers: { @@ -958,6 +961,10 @@ const AngularWorkflow = (props) => { newauth.push(responseJson.data[key]) } + if (reset === true) { + console.log("APP RESET = reset cy") + cy.on('select', 'node', (e) => onNodeSelect(e, newauth)) + } setAppAuthentication(newauth) } else { alert.error("Failed getting authentications") @@ -992,7 +999,7 @@ const AngularWorkflow = (props) => { //tmpapps = tmpapps.concat(getExtraApps()) //tmpapps = tmpapps.concat(responseJson) setApps(responseJson) - getAppAuthentication() + //getAppAuthentication() setFilteredApps(responseJson.filter(app => !internalIds.includes(app.name))) setPrioritizedApps(responseJson.filter(app => internalIds.includes(app.name))) @@ -1118,7 +1125,7 @@ const AngularWorkflow = (props) => { setSelectedTrigger({}) } - const onNodeSelect = (event) => { + const onNodeSelect = (event, newAppAuth) => { const data = event.target.data() setLastSaved(false) const branch = workflow.branches.filter(branch => branch.source_id === data.id || branch.destination_id === data.id) @@ -1149,7 +1156,8 @@ const AngularWorkflow = (props) => { findAuthId = curaction.authentication_id } - var tmpAuth = JSON.parse(JSON.stringify(appAuthentication)) + var tmpAuth = JSON.parse(JSON.stringify(newAppAuth)) + console.log("Checking authentication: ", tmpAuth) for (var key in tmpAuth) { var item = tmpAuth[key] @@ -1168,6 +1176,7 @@ const AngularWorkflow = (props) => { } curaction.authentication = authenticationOptions + console.log("Authentication: ", authenticationOptions) if (curaction.selectedAuthentication === null || curaction.selectedAuthentication === undefined || curaction.selectedAuthentication.length === "") { curaction.selectedAuthentication = {} } @@ -1562,7 +1571,7 @@ const AngularWorkflow = (props) => { cy.fit(null, 200) - cy.on('select', 'node', (e) => onNodeSelect(e)) + cy.on('select', 'node', (e) => onNodeSelect(e, appAuthentication)) cy.on('select', 'edge', (e) => onEdgeSelect(e)) cy.on('unselect', (e) => onUnselect(e)) @@ -2485,8 +2494,6 @@ const AngularWorkflow = (props) => { } workflow.actions.push(newAppData) - - console.log(workflow.categories) setWorkflow(workflow) if (newAppPopup) { @@ -7075,8 +7082,9 @@ const AngularWorkflow = (props) => { const handleSubmitCheck = () => { console.log("NEW AUTH: ", authenticationOption) if (authenticationOption.label.length === 0) { - alert.info("Label can't be empty") - return + authenticationOption.label = `Auth for ${selectedApp.name}` + //alert.info("Label can't be empty") + //return } for (var key in selectedApp.authentication.parameters) { @@ -7106,7 +7114,6 @@ const AngularWorkflow = (props) => { setNewAppAuth(newAuthOption) //appAuthentication.push(newAuthOption) //setAppAuthentication(appAuthentication) - getAppAuthentication() setUpdate(authenticationOption.id) /* @@ -7141,6 +7148,7 @@ const AngularWorkflow = (props) => { fullWidth color="primary" placeholder={"Auth july 2020"} + defaultValue={`Auth for ${selectedApp.name}`} onChange={(event) => { authenticationOption.label = event.target.value }} From 1760db0bd8b0bb85a64b6fcbd606946a939a5e50 Mon Sep 17 00:00:00 2001 From: frikky Date: Sat, 6 Feb 2021 17:38:54 +0100 Subject: [PATCH 07/37] Added workflow categories during saving --- backend/go-app/walkoff.go | 45 ++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index a23a15a3..f8b76e75 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -2092,30 +2092,37 @@ func updateAppAuth(auth AppAuthenticationStorage, workflowId, nodeId string, add return nil } -func handleCategoryIncrease(workflow Workflow, action Action) Categories { +// Identifies what a category defined really is +func handleCategoryIncrease(categories Categories, action Action) Categories { + log.Printf("Action: %s, category: %s", action.AppName, action.Category) if action.Category == "" { log.Printf("Should find app's categories as it's empty during save") - return workflow.Categories + return categories } - newCategory := "cases" - log.Printf("Adding %s category", newCategory) - switch category := newCategory; { - case category == "cases": - workflow.Categories.Cases.Count += 1 - default: - log.Printf("Can't handle category %s", category) + // FIXME: Make this an "autodiscover" that's controlled by the category itself + // Should just be a list that's looped against :) + newCategory := strings.ToLower(action.Category) + if strings.Contains(newCategory, "case") || strings.Contains(newCategory, "ticket") || strings.Contains(newCategory, "alert") || strings.Contains(newCategory, "mssp") { + categories.Cases.Count += 1 + } else if strings.Contains(newCategory, "siem") || strings.Contains(newCategory, "event") || strings.Contains(newCategory, "log") || strings.Contains(newCategory, "search") { + categories.SIEM.Count += 1 + } else if strings.Contains(newCategory, "sms") || strings.Contains(newCategory, "comm") || strings.Contains(newCategory, "phone") || strings.Contains(newCategory, "call") || strings.Contains(newCategory, "chat") || strings.Contains(newCategory, "mail") || strings.Contains(newCategory, "phish") { + categories.Communication.Count += 1 + } else if strings.Contains(newCategory, "intel") || strings.Contains(newCategory, "crim") || strings.Contains(newCategory, "ti") { + categories.Intel.Count += 1 + } else if strings.Contains(newCategory, "sand") || strings.Contains(newCategory, "virus") || strings.Contains(newCategory, "malware") || strings.Contains(newCategory, "scan") || strings.Contains(newCategory, "edr") || strings.Contains(newCategory, "endpoint detection") { + // Sandbox lol + categories.EDR.Count += 1 + } else if strings.Contains(newCategory, "vuln") || strings.Contains(newCategory, "fim") || strings.Contains(newCategory, "fim") || strings.Contains(newCategory, "integrity") { + categories.Assets.Count += 1 + } else if strings.Contains(newCategory, "network") || strings.Contains(newCategory, "firewall") || strings.Contains(newCategory, "waf") || strings.Contains(newCategory, "switch") { + categories.Network.Count += 1 + } else { + categories.Other.Count += 1 } - //Categories Categories `json:"categories" datastore:"categories"` - //found := false - //for _, category := range workflow.Categories { - // if category == newCategory { - // log.Printf("Category %s already exists", category) - // return workflow - //} - //workflow.Categories = handleCategoryIncrease(workflow, action.Category) - return workflow.Categories + return categories } // Saves a workflow to an ID @@ -2246,7 +2253,7 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) { action.Errors = []string{} } - workflow.Categories = handleCategoryIncrease(workflow, action) + workflow.Categories = handleCategoryIncrease(workflow.Categories, action) newActions = append(newActions, action) } From 3969c8e998818e63d39da81eb5717c5530f01100 Mon Sep 17 00:00:00 2001 From: frikky Date: Mon, 8 Feb 2021 08:41:22 +0100 Subject: [PATCH 08/37] #249: Basic fix for sensitive data export --- README.md | 9 ++- backend/app_sdk/app_base.py | 7 +- backend/go-app/app.yaml | 98 -------------------------- backend/go-app/main.go | 4 +- backend/go-app/walkoff.go | 50 ++++++++++--- frontend/src/views/AngularWorkflow.jsx | 60 ++++++++-------- frontend/src/views/AppCreator.jsx | 2 +- frontend/src/views/Apps.jsx | 9 +-- frontend/src/views/Workflows.jsx | 43 ++++++++--- 9 files changed, 122 insertions(+), 160 deletions(-) delete mode 100644 backend/go-app/app.yaml diff --git a/README.md b/README.md index f9589f40..a996646e 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,10 @@ Please consider [sponsoring](https://github.com/sponsors/frikky) the project if ## Support * [Discord](https://discord.gg/B2CBzUm) +* [Twitter](https://twitter.com/shuffleio) * [Email](mailto:frikky@shuffler.io) * [Open issue](https://github.com/frikky/Shuffle/issues/new) +* [Shuffler.io](https://shuffler.io/contact) ## Blogposts * [1. Introducing Shuffle](https://medium.com/security-operation-capybara/introducing-shuffle-an-open-source-soar-platform-part-1-58a529de7d12) @@ -68,12 +70,9 @@ Below is the folder structure with a short explanation ├── README.md # What you're reading right now ├── backend # Contains backend related code. │   ├── go-app # The backend golang webserver -│   ├── app_gen # Code for app generation outside the Shuffle platform │ └── app_sdk # The SDK used for apps -├── frontend # Contains frontend code. ReactJS and cytoscape. Horrible code :) -├── functions # Contains google cloud function code mainly. -│   ├── static_baseline.py # Static code used by stitcher.go to generate code -│   ├── stitcher.go # Attempts to stitch together an app - part of backend now +├── frontend # Contains frontend code. ReactJS, Material UI and cytoscape +├── functions # Has execution and extension resources, such as the Wazuh integration │   ├── onprem # Code for onprem solutions │  │   ├── Orborus # Distributes execution locations │  │   ├── Worker # Runs a workflow diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index 021f58ed..5320ecd9 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -62,7 +62,7 @@ class AppBase: if ret.status_code != 200: self.logger.info(ret.text) except requests.exceptions.ConnectionError as e: - self.logger.exception(e) + self.logger.exception("ConnectionError: %s" % e) return except TypeError as e: self.logger.exception(e) @@ -120,6 +120,11 @@ class AppBase: # 1. For the first array, take the total amount(y) (2x3=6) and divide it by the current array (x): 2. x/y = 3. This means do 3 of each value # 2. For the second array, take the total amount(y) (2x3=6) and divide it by the current array (x): 3. x/y = 2. # 3. What does the 3rd array do? Same, but ehhh? + # + # Example4: + # What if there are multiple loops inside a single item? + # + # paramlist = [] listitems = [] diff --git a/backend/go-app/app.yaml b/backend/go-app/app.yaml deleted file mode 100644 index 59f28320..00000000 --- a/backend/go-app/app.yaml +++ /dev/null @@ -1,98 +0,0 @@ -runtime: go111 - -env_variables: - -automatic_scaling: - max_instances: 1 - min_instances: 1 - -handlers: -- url: /api/(.*) - script: auto - secure: always -- url: /static/js/(.*) - static_files: build/static/js/\1 - upload: build/static/js/(.*) - secure: always -- url: /static/css/(.*) - static_files: build/static/css/\1 - upload: build/static/css/(.*) - secure: always -- url: /images/(.*) - static_files: build/images/\1 - upload: build/images/(.*) - secure: always -- url: /(.*\.(json|ico))$ - static_files: build/\1 - upload: build/.*\.(json|ico)$ - secure: always -- url: /manifest.json - static_files: build/manifest.json - upload: build/manifest.json - secure: always - -# lol.. wildcard doesn't work with /api/(.*) for some reason -- url: / - static_files: build/index.html - upload: build/index.html - secure: always -- url: /home - static_files: build/index.html - upload: build/index.html - secure: always -- url: /passwordreset - static_files: build/index.html - upload: build/index.html - secure: always -- url: /login - static_files: build/index.html - upload: build/index.html - secure: always -- url: /register - static_files: build/index.html - upload: build/index.html - secure: always -- url: /workflows - static_files: build/index.html - upload: build/index.html - secure: always -- url: /workflows/(.*) - static_files: build/index.html - upload: build/index.html - secure: always -- url: /info/(.*) - static_files: build/index.html - upload: build/index.html - secure: always -- url: /docs/(.*) - static_files: build/index.html - upload: build/index.html - secure: always -- url: /docs - static_files: build/index.html - upload: build/index.html - secure: always -- url: /settings - static_files: build/index.html - upload: build/index.html - secure: always -- url: /apps - static_files: build/index.html - upload: build/index.html - secure: always -- url: /contact - static_files: build/index.html - upload: build/index.html - secure: always -- url: /apps/(.*) - static_files: build/index.html - upload: build/index.html - secure: always -- url: /register/(.*) - static_files: build/index.html - upload: build/index.html - secure: always -- url: /passwordreset/(.*) - static_files: build/index.html - upload: build/index.html - secure: always diff --git a/backend/go-app/main.go b/backend/go-app/main.go index 1ffd334f..aef237d7 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -6600,7 +6600,9 @@ func verifySwagger(resp http.ResponseWriter, request *http.Request) { log.Printf("Failed to increase success execution stats: %s", err) } - cacheKey := fmt.Sprintf("workflowapps-sorted") + cacheKey := fmt.Sprintf("workflowapps-sorted-100") + requestCache.Delete(cacheKey) + cacheKey = fmt.Sprintf("workflowapps-sorted-500") requestCache.Delete(cacheKey) resp.WriteHeader(200) diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index f8b76e75..91d80d1d 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -414,6 +414,7 @@ type Workflow struct { ExecutionEnvironment string `json:"execution_environment" datastore:"execution_environment"` PreviouslySaved bool `json:"first_save" datastore:"first_save"` Categories Categories `json:"categories" datastore:"categories"` + ExampleArgument string `json:"example_argument" datastore:"example_argument,noindex"` } type Category struct { @@ -2093,13 +2094,26 @@ func updateAppAuth(auth AppAuthenticationStorage, workflowId, nodeId string, add } // Identifies what a category defined really is -func handleCategoryIncrease(categories Categories, action Action) Categories { - log.Printf("Action: %s, category: %s", action.AppName, action.Category) +func handleCategoryIncrease(categories Categories, action Action, workflowapps []WorkflowApp) Categories { if action.Category == "" { - log.Printf("Should find app's categories as it's empty during save") + appName := action.AppName + for _, app := range workflowapps { + if appName != strings.ToLower(app.Name) { + continue + } + + if len(app.Categories) > 0 { + log.Printf("[INFO] Setting category for %s: %s", app.Name, app.Categories) + action.Category = app.Categories[0] + break + } + } + + //log.Printf("Should find app's categories as it's empty during save") return categories } + //log.Printf("Action: %s, category: %s", action.AppName, action.Category) // FIXME: Make this an "autodiscover" that's controlled by the category itself // Should just be a list that's looped against :) newCategory := strings.ToLower(action.Category) @@ -2227,6 +2241,8 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) { allNodes := []string{} workflow.Categories = Categories{} + workflowapps, apperr := getAllWorkflowApps(ctx, 500) + //log.Printf("Action: %#v", action.Authentication) for _, action := range workflow.Actions { allNodes = append(allNodes, action.ID) @@ -2253,7 +2269,7 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) { action.Errors = []string{} } - workflow.Categories = handleCategoryIncrease(workflow.Categories, action) + workflow.Categories = handleCategoryIncrease(workflow.Categories, action, workflowapps) newActions = append(newActions, action) } @@ -2261,7 +2277,6 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) { log.Printf("[WORKFLOW INIT] NOT PREVIOUSLY SAVED - SET ACTION AUTH!") //AuthenticationId string `json:"authentication_id,omitempty" datastore:"authentication_id"` - workflowapps, apperr := getAllWorkflowApps(ctx, 500) allAuths, err := getAllWorkflowAppAuth(ctx, user.ActiveOrg.Id) if err == nil && len(workflowapps) > 0 && apperr == nil { //log.Printf("Setting actions") @@ -2819,8 +2834,11 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) { Errors: workflow.Errors, } - cacheKey := fmt.Sprintf("workflowapps-sorted") + cacheKey := fmt.Sprintf("workflowapps-sorted-100") requestCache.Delete(cacheKey) + cacheKey = fmt.Sprintf("workflowapps-sorted-500") + requestCache.Delete(cacheKey) + log.Printf("[INFO] Saved new version of workflow %s (%s) for org %s", workflow.Name, fileId, workflow.OrgId) resp.WriteHeader(200) newBody, err := json.Marshal(returndata) @@ -4706,7 +4724,9 @@ func deleteWorkflowApp(resp http.ResponseWriter, request *http.Request) { if err != nil { log.Printf("Failed to increase total apps loaded stats: %s", err) } - cacheKey := fmt.Sprintf("workflowapps-sorted") + cacheKey := fmt.Sprintf("workflowapps-sorted-100") + requestCache.Delete(cacheKey) + cacheKey = fmt.Sprintf("workflowapps-sorted-500") requestCache.Delete(cacheKey) //err = memcache.Delete(request.Context(), sessionToken) @@ -5273,7 +5293,9 @@ func updateWorkflowAppConfig(resp http.ResponseWriter, request *http.Request) { return } - cacheKey := fmt.Sprintf("workflowapps-sorted") + cacheKey := fmt.Sprintf("workflowapps-sorted-100") + requestCache.Delete(cacheKey) + cacheKey = fmt.Sprintf("workflowapps-sorted-500") requestCache.Delete(cacheKey) log.Printf("Changed workflow app %s", app.ID) @@ -6166,7 +6188,9 @@ func iterateOpenApiGithub(fs billy.Filesystem, dir []os.FileInfo, extra string, continue } - cacheKey := fmt.Sprintf("workflowapps-sorted") + cacheKey := fmt.Sprintf("workflowapps-sorted-100") + requestCache.Delete(cacheKey) + cacheKey = fmt.Sprintf("workflowapps-sorted-500") requestCache.Delete(cacheKey) } } else { @@ -6680,7 +6704,9 @@ func setNewWorkflowApp(resp http.ResponseWriter, request *http.Request) { } //memcache.Delete(ctx, "all_apps") - cacheKey := fmt.Sprintf("workflowapps-sorted") + cacheKey := fmt.Sprintf("workflowapps-sorted-100") + requestCache.Delete(cacheKey) + cacheKey = fmt.Sprintf("workflowapps-sorted-500") requestCache.Delete(cacheKey) resp.WriteHeader(200) @@ -6824,6 +6850,10 @@ func getAllWorkflowApps(ctx context.Context, maxLen int) ([]WorkflowApp, error) break } + if app.Name == "Shuffle Subflow" { + continue + } + found := false //log.Printf("ACTIONS: %d - %s", len(app.Actions), app.Name) for _, innerapp := range apps { diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 9594cce5..99073bc3 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -540,7 +540,7 @@ const AngularWorkflow = (props) => { currentnode.removeClass('awaiting-data-highlight') currentnode.addClass('success-highlight') - if (!visited.includes(item.action.label)) { + if (visited !== undefined && visited !== null && !visited.includes(item.action.label)) { if (executionRunning) { //alert.show("Success in node "+item.action.label) //+" with result "+item.result) @@ -1382,7 +1382,7 @@ const AngularWorkflow = (props) => { //throw BreakException return false } - }); + }) } @@ -1766,13 +1766,13 @@ const AngularWorkflow = (props) => { const stopSchedule = (trigger, triggerindex) => { alert.info("Stopping schedule") fetch(globalUrl+"/api/v1/workflows/"+props.match.params.key+"/schedule/"+trigger.id, { - method: 'DELETE', - headers: { - 'Content-Type': 'application/json', - 'Accept': 'application/json', - }, - credentials: "include", - }) + method: 'DELETE', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + credentials: "include", + }) .then((response) => { if (response.status !== 200) { console.log("Status not 200 for stream results :O!") @@ -1783,21 +1783,16 @@ const AngularWorkflow = (props) => { .then((responseJson) => { // No matter what, it's being stopped. if (!responseJson.success) { - alert.error("Failed to stop schedule: " + responseJson.reason) - - workflow.triggers[triggerindex].status = "stopped" - trigger.status = "stopped" - setSelectedTrigger(trigger) - setWorkflow(workflow) - saveWorkflow(workflow) + alert.WARNING("Failed to stop schedule: " + responseJson.reason) } else { alert.success("Successfully stopped schedule") - workflow.triggers[triggerindex].status = "stopped" - trigger.status = "stopped" - setSelectedTrigger(trigger) - setWorkflow(workflow) - saveWorkflow(workflow) } + + workflow.triggers[triggerindex].status = "stopped" + trigger.status = "stopped" + setSelectedTrigger(trigger) + setWorkflow(workflow) + saveWorkflow(workflow) }) .catch(error => { alert.error(error.toString()) @@ -2535,7 +2530,8 @@ const AngularWorkflow = (props) => { newAppname = newAppname.slice(0, maxlen)+".." } - const image = "url("+app.large_image+")" + //const image = "url("+app.large_image+")" + const image = app.large_image const newAppStyle = JSON.parse(JSON.stringify(paperAppStyle)) const pixelSize = !hover ? "2px" : "4px" newAppStyle.borderLeft = app.is_valid ? `${pixelSize} solid green` : `${pixelSize} solid orange` @@ -2555,7 +2551,7 @@ const AngularWorkflow = (props) => { {setHover(true)}} onMouseOut={() => {setHover(false)}}> -
+ {newAppname} @@ -5530,6 +5526,7 @@ const AngularWorkflow = (props) => { if (trigger.id === undefined) { return } + alert.info("Stopping webhook") fetch(globalUrl+"/api/v1/hooks/"+trigger.id+"/delete", { @@ -5548,18 +5545,23 @@ const AngularWorkflow = (props) => { return response.json() }) .then((responseJson) => { - workflow.triggers[triggerindex].status = "stopped" - trigger.status = "stopped" - setWorkflow(workflow) - setSelectedTrigger(trigger) + if (workflow.triggers[triggerindex] !== undefined) { + workflow.triggers[triggerindex].status = "stopped" + } if (responseJson.success) { //alert.success("Successfully stopped webhook") // Set the status saveWorkflow(workflow) } else { - alert.error("Failed stopping webhook: "+responseJson.reason) + if (responseJson.reason !== undefined) { + alert.error("Failed stopping webhook: "+responseJson.reason) + } } + + trigger.status = "stopped" + setWorkflow(workflow) + setSelectedTrigger(trigger) }) .catch(error => { alert.error(error.toString()) @@ -6937,7 +6939,7 @@ const AngularWorkflow = (props) => { : null const variablesModal = variablesModalOpen ? - { setNewVariableName("") diff --git a/frontend/src/views/AppCreator.jsx b/frontend/src/views/AppCreator.jsx index f23d42ba..1a3c1a7c 100644 --- a/frontend/src/views/AppCreator.jsx +++ b/frontend/src/views/AppCreator.jsx @@ -2150,7 +2150,7 @@ const AppCreator = (props) => {

- {name} ({actions === null || actions === undefined ? 0 : actions.length}) + {name} {actions === null || actions === undefined || actions.length === 0 ? null : ({actions.length})}

diff --git a/frontend/src/views/Apps.jsx b/frontend/src/views/Apps.jsx index 5ae1ee01..2555459b 100644 --- a/frontend/src/views/Apps.jsx +++ b/frontend/src/views/Apps.jsx @@ -145,6 +145,7 @@ const Apps = (props) => { const [isDropzone, setIsDropzone] = React.useState(false); const upload = React.useRef(null); const isCloud = window.location.host === "localhost:3002" || window.location.host === "shuffler.io" ? true : false + const borderRadius = 3 const { start, stop } = useInterval({ duration: 5000, @@ -330,9 +331,9 @@ const Apps = (props) => { //
//
var imageline = data.large_image.length === 0 ? - {data.title} + {data.title} : - {data.title} { + {data.title} { //console.log("IMG LOADED!: ", event.target) }} /> @@ -535,9 +536,9 @@ const Apps = (props) => { : null var imageline = selectedApp.large_image === undefined || selectedApp.large_image.length === 0 ? - {selectedApp.title} + {selectedApp.title} : - {selectedApp.title} + {selectedApp.title} const GetAppExample = () => { if (selectedAction.returns === undefined) { diff --git a/frontend/src/views/Workflows.jsx b/frontend/src/views/Workflows.jsx index f28ad54a..0f1d6107 100644 --- a/frontend/src/views/Workflows.jsx +++ b/frontend/src/views/Workflows.jsx @@ -395,23 +395,44 @@ const Workflows = (props) => { let exportFileDefaultName = data.name+'.json'; data["owner"] = "" - for (var key in data.triggers) { - const trigger = data.triggers[key] - if (trigger.app_name === "Shuffle Workflow") { - if (trigger.parameters.length > 2) { - trigger.parameters[2].value = "" + if (data.triggers !== null && data.triggers !== undefined) { + for (var key in data.triggers) { + const trigger = data.triggers[key] + if (trigger.app_name === "Shuffle Workflow") { + if (trigger.parameters.length > 2) { + trigger.parameters[2].value = "" + } + } + + if (trigger.status == "running") { + trigger.status = "stopped" } - } - - if (trigger.status == "running") { - trigger.status = "stopped" } } - for (var key in data.actions) { - data.actions[key].authentication_id = "" + if (data.actions !== null && data.actions !== undefined) { + for (var key in data.actions) { + data.actions[key].authentication_id = "" + + for (var subkey in data.actions[key].parameters) { + const param = data.actions[key].parameters[subkey] + if (param.name.includes("key") || param.name.includes("user") || param.name.includes("pass") || param.name.includes("api") || param.name.includes("auth") || param.name.includes("secret")) { + param.value = "" + } + } + } } + if (data.workflow_variables !== null && data.workflow_variables !== undefined) { + for (var key in data.workflow_variables) { + const param = data.workflow_variables[key] + if (param.name.includes("key") || param.name.includes("user") || param.name.includes("pass") || param.name.includes("api") || param.name.includes("auth") || param.name.includes("secret")) { + param.value = "" + } + } + } + + //console.log(data) //return data["org"] = [] From 3ed6d2f2d9e09893819b26f2b834849be1c2ff3c Mon Sep 17 00:00:00 2001 From: frikky Date: Mon, 8 Feb 2021 12:01:28 +0100 Subject: [PATCH 09/37] Added gomod for orborus --- frontend/src/views/AngularWorkflow.jsx | 38 +++++---- functions/onprem/orborus/go.mod | 19 +++++ functions/onprem/orborus/go.sum | 112 +++++++++++++++++++++++++ 3 files changed, 152 insertions(+), 17 deletions(-) create mode 100644 functions/onprem/orborus/go.mod create mode 100644 functions/onprem/orborus/go.sum diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 99073bc3..394331aa 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -3841,6 +3841,21 @@ const AngularWorkflow = (props) => { zIndex: 1000, } + const textFieldStyle = { + backgroundColor: inputColor, + borderRadius: borderRadius, + } + + + const innerTextfieldStyle = { + color: "white", + minHeight: 50, + marginLeft: "5px", + maxWidth: "95%", + fontSize: "1em", + borderRadius: borderRadius, + } + const appApiView = Object.getOwnPropertyNames(selectedAction).length > 0 ?
@@ -3894,15 +3909,9 @@ const AngularWorkflow = (props) => { Name { value={selectedActionName} fullWidth onChange={setNewSelectedAction} - style={{backgroundColor: inputColor, color: "white", height: 50}} + style={{backgroundColor: inputColor, color: "white", height: 50, borderRadius: borderRadius,}} SelectDisplayProps={{ style: { marginLeft: 10, maxHeight: 200, + borderRadius: borderRadius, } }} > @@ -6120,15 +6130,9 @@ const AngularWorkflow = (props) => { Date: Mon, 8 Feb 2021 12:20:09 +0100 Subject: [PATCH 10/37] Added changes to install guide --- install-guide.md | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/install-guide.md b/install-guide.md index 5f5fbd22..e0128b31 100644 --- a/install-guide.md +++ b/install-guide.md @@ -82,8 +82,13 @@ docker-compose up Related issue: #47 -## Local development installation -**Frontend - ReactJS /w cytoscape** +# Local development installation +Local development is pretty straight forward with **ReactJS** and **Golang**. This part is intended to help you run the code for development purposes. + +**PS: You have to stop the Backend Docker container to get this one working** +**PPS: Use the "Launch" branch when developing to get it set up easier** + +## Frontend - ReactJS /w cytoscape http://localhost:3000 - Requires [npm](https://nodejs.org/en/download/)/[yarn](https://yarnpkg.com/lang/en/docs/install/#debian-stable)/your preferred manager. Runs independently from backend. ```bash cd frontend @@ -91,29 +96,32 @@ npm i npm start ``` -**Backend - Golang** +## Backend - Golang http://localhost:5001 - REST API - requires [>=go1.13](https://golang.org/dl/) ```bash export DATASTORE_EMULATOR_HOST=0.0.0.0:8000 cd backend/go-app -go build go run *.go ``` -**Database - Datastore** +**WINDOWS USERS:** You'll have to to add the "export" part as an environment variable. + +## Database - Datastore Based on Google datastore ``` docker run -p 8000:8000 google/cloud-sdk gcloud beta emulators datastore start --project=shuffle --host-port 0.0.0.0:8000 --no-store-on-disk ``` -**Orborus** +## Orborus Execution of Workflows: PS: This requires some specific environment variables ``` cd functions/onprem/orborus go run orborus.go ``` -Environments: + + +Environments (modify for Windows): ``` export ORG_ID=Shuffle export ENVIRONMENT_NAME=Shuffle @@ -122,4 +130,6 @@ export DOCKER_API_VERSION=1.40 export SHUFFLE_PASS_WORKER_PROXY=${SHUFFLE_PASS_WORKER_PROXY} ``` +**WINDOWS USERS:** You'll have to to add the "export" part as an environment variable. +AND THAT's it - hopefully it worked. If it didn't please email [frikky@shuffler.io](mailto:frikky@shuffler.io) From a6763a99a0a0a75a24e80d6d3d14b8cf3d21a026 Mon Sep 17 00:00:00 2001 From: frikky Date: Mon, 8 Feb 2021 12:28:33 +0100 Subject: [PATCH 11/37] Removed proxy info --- install-guide.md | 1 - 1 file changed, 1 deletion(-) diff --git a/install-guide.md b/install-guide.md index e0128b31..d1c21169 100644 --- a/install-guide.md +++ b/install-guide.md @@ -127,7 +127,6 @@ export ORG_ID=Shuffle export ENVIRONMENT_NAME=Shuffle export BASE_URL=http://YOUR-IP:5001 export DOCKER_API_VERSION=1.40 -export SHUFFLE_PASS_WORKER_PROXY=${SHUFFLE_PASS_WORKER_PROXY} ``` **WINDOWS USERS:** You'll have to to add the "export" part as an environment variable. From a52a675a456c0042bff783808d0aafdfedae0276 Mon Sep 17 00:00:00 2001 From: amitk Date: Thu, 11 Feb 2021 22:47:27 +0530 Subject: [PATCH 12/37] https://github.com/frikky/Shuffle/issues/241 - Can't see full result in frontend when not JSON #241 --- frontend/src/views/AngularWorkflow.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 7ce3669f..191a5c81 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -6615,7 +6615,7 @@ const AngularWorkflow = (props) => { } : -
+
Result  {data.result}
From 390630751c07238cedccc1133c30d3f11c8357a9 Mon Sep 17 00:00:00 2001 From: amitk Date: Thu, 11 Feb 2021 23:37:10 +0530 Subject: [PATCH 13/37] Workflow play button not shown as finished when workflow execution is aborted --- frontend/src/views/AngularWorkflow.jsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 191a5c81..115a4543 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -566,6 +566,9 @@ const AngularWorkflow = (props) => { } break case "FAILURE": + //When status comes as failure, allow user to start workflow execution + setExecutionRunning(false) + currentnode.removeClass('not-executing-highlight') currentnode.removeClass('executing-highlight') currentnode.removeClass('success-highlight') From 83c58849cfa83efd4700acdfdeed007f4f9bb8c8 Mon Sep 17 00:00:00 2001 From: frikky Date: Fri, 12 Feb 2021 10:08:26 +0100 Subject: [PATCH 14/37] Updates to app grabbing from backend --- backend/go-app/main.go | 4 +-- backend/go-app/walkoff.go | 60 ++++++++++++++++++++++++++++++++------- 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/backend/go-app/main.go b/backend/go-app/main.go index aef237d7..80157f6e 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -2877,8 +2877,8 @@ func fixUserOrg(ctx context.Context, user *User) *User { // Used for testing only. Shouldn't impact production. func handleCors(resp http.ResponseWriter, request *http.Request) bool { - allowedOrigins := "http://localhost:3000" - //allowedOrigins := "http://localhost:3002" + //allowedOrigins := "http://localhost:3000" + allowedOrigins := "http://localhost:3002" resp.Header().Set("Vary", "Origin") resp.Header().Set("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me, Authorization") diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index 91d80d1d..8d3b0df6 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -4740,13 +4740,7 @@ func getWorkflowAppConfig(resp http.ResponseWriter, request *http.Request) { return } - user, userErr := handleApiAuthentication(resp, request) - if userErr != nil { - log.Printf("Api authentication failed in edit workflow: %s", userErr) - resp.WriteHeader(401) - resp.Write([]byte(`{"success": false}`)) - return - } + ctx := context.Background() location := strings.Split(request.URL.String(), "/") var fileId string @@ -4760,23 +4754,67 @@ func getWorkflowAppConfig(resp http.ResponseWriter, request *http.Request) { fileId = location[4] } - ctx := context.Background() app, err := getApp(ctx, fileId) if err != nil { - log.Printf("Error getting app (app config): %s", fileId) + log.Printf("[WARNING] Error getting app %s (app config): %s", fileId, err) + resp.WriteHeader(401) + resp.Write([]byte(`{"success": false, "reason": "App doesn't exist"}`)) + return + } + + //if IsValid bool `json:"is_valid" yaml:"is_valid" required:true datastore:"is_valid"` + // Sharing bool `json:"sharing" yaml:"sharing" required:false datastore:"sharing"` + log.Printf("Sharing: %s", app.Sharing) + log.Printf("Generated: %s", app.Generated) + log.Printf("Downloaded: %s", app.Downloaded) + + // FIXME - Handle sharing and such PROPERLY + if app.Sharing && app.Generated { + log.Printf("CAN SHARE APP!") + parsedApi, err := getOpenApiDatastore(ctx, fileId) + if err != nil { + log.Printf("[WARNING] OpenApi doesn't exist for: %s - err: %s", fileId, err) + resp.WriteHeader(401) + resp.Write([]byte(`{"success": false}`)) + return + } + + if len(parsedApi.ID) > 0 { + parsedApi.Success = true + } else { + parsedApi.Success = false + } + + //log.Printf("PARSEDAPI: %#v", parsedApi) + data, err := json.Marshal(parsedApi) + if err != nil { + log.Printf("[WARNING] Error parsing api json: %s", err) + resp.WriteHeader(422) + resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "Failed marshalling new parsed swagger: %s"}`, err))) + return + } + + resp.WriteHeader(200) + resp.Write(data) + return + } + + user, userErr := handleApiAuthentication(resp, request) + if userErr != nil { + log.Printf("[WARNING] Api authentication failed in get app: %s", userErr) resp.WriteHeader(401) resp.Write([]byte(`{"success": false}`)) return } if user.Id != app.Owner && user.Role != "admin" { - log.Printf("Wrong user (%s) for app %s", user.Username, app.Name) + log.Printf("[WARNING] Wrong user (%s) for app %s", user.Username, app.Name) resp.WriteHeader(401) resp.Write([]byte(`{"success": false}`)) return } - log.Printf("Getting app %s", fileId) + log.Printf("Getting app %s (OpenAPI)", fileId) parsedApi, err := getOpenApiDatastore(ctx, fileId) if err != nil { log.Printf("OpenApi doesn't exist for: %s - err: %s", fileId, err) From 225193e05fec1a6b26ca1a6d6a6043cce29299ca Mon Sep 17 00:00:00 2001 From: frikky Date: Sun, 14 Feb 2021 18:24:14 +0100 Subject: [PATCH 15/37] Fixed documentation scrolling issue --- backend/go-app/main.go | 4 +- backend/go-app/walkoff.go | 6 +- frontend/src/App.jsx | 3 + frontend/src/views/AngularWorkflow.jsx | 7 +- frontend/src/views/Docs.jsx | 314 ++++++++++++++----------- 5 files changed, 193 insertions(+), 141 deletions(-) diff --git a/backend/go-app/main.go b/backend/go-app/main.go index f0fbc5c6..1a969309 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -2877,8 +2877,8 @@ func fixUserOrg(ctx context.Context, user *User) *User { // Used for testing only. Shouldn't impact production. func handleCors(resp http.ResponseWriter, request *http.Request) bool { - //allowedOrigins := "http://localhost:3000" - allowedOrigins := "http://localhost:3002" + allowedOrigins := "http://localhost:3000" + //allowedOrigins := "http://localhost:3002" resp.Header().Set("Vary", "Origin") resp.Header().Set("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me, Authorization") diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index 4d858dc6..e203b2e8 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -4764,9 +4764,9 @@ func getWorkflowAppConfig(resp http.ResponseWriter, request *http.Request) { //if IsValid bool `json:"is_valid" yaml:"is_valid" required:true datastore:"is_valid"` // Sharing bool `json:"sharing" yaml:"sharing" required:false datastore:"sharing"` - log.Printf("Sharing: %s", app.Sharing) - log.Printf("Generated: %s", app.Generated) - log.Printf("Downloaded: %s", app.Downloaded) + //log.Printf("Sharing: %s", app.Sharing) + //log.Printf("Generated: %s", app.Generated) + //log.Printf("Downloaded: %s", app.Downloaded) // FIXME - Handle sharing and such PROPERLY if app.Sharing && app.Generated { diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 0864b984..18456036 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -30,6 +30,7 @@ import SettingsPage from "./views/SettingsPage"; import { createMuiTheme, MuiThemeProvider } from '@material-ui/core/styles'; +import ScrollToTop from "./components/ScrollToTop"; import AlertTemplate from "./components/AlertTemplate"; import { positions, Provider } from "react-alert"; @@ -74,6 +75,7 @@ const App = (message, props) => { const [isLoggedIn, setIsLoggedIn] = useState(false); const [dataset, setDataset] = useState(false); const [isLoaded, setIsLoaded] = useState(false); + const [curpath, setCurpath] = useState(typeof window === 'undefined' || window.location === undefined ? "" : window.location.pathname) useEffect(() => { if (dataset === false) { @@ -126,6 +128,7 @@ const App = (message, props) => { } />
:
+
} /> } /> diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 223525c6..a53f403d 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -83,8 +83,8 @@ import cxtmenu from 'cytoscape-cxtmenu'; import { w3cwebsocket as W3CWebSocket } from "websocket"; import { useAlert } from "react-alert"; -import { validateJson } from "./Workflows"; -import { GetParsedPaths } from "./Apps"; +import { validateJson } from "./Workflows.jsx"; +import { GetParsedPaths } from "./Apps.jsx"; const surfaceColor = "#27292D" const inputColor = "#383B40" @@ -428,7 +428,8 @@ const AngularWorkflow = (props) => { handleUpdateResults(responseJson) }) .catch(error => { - alert.error(error.toString()) + console.log("Error: ", error) + //alert.error(error.toString()) stop() }); } diff --git a/frontend/src/views/Docs.jsx b/frontend/src/views/Docs.jsx index e8c4b8b0..76258eaf 100644 --- a/frontend/src/views/Docs.jsx +++ b/frontend/src/views/Docs.jsx @@ -1,11 +1,16 @@ import React, {useState, useEffect} from 'react'; +import { useTheme } from '@material-ui/core/styles'; import Divider from '@material-ui/core/Divider'; import ReactMarkdown from 'react-markdown'; import {BrowserView, MobileView} from "react-device-detect"; import Button from '@material-ui/core/Button'; import Menu from '@material-ui/core/Menu'; import MenuItem from '@material-ui/core/MenuItem'; +import Typography from '@material-ui/core/Typography'; +import Paper from '@material-ui/core/Paper'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; import {Link} from 'react-router-dom'; @@ -20,26 +25,21 @@ const Body = { }; const dividerColor = "rgb(225, 228, 232)" - -const SideBar = { - maxWidth: 250, - flex: "1", - position: "fixed", -} - const hrefStyle = { color: "rgba(255, 255, 255, 0.40)", textDecoration: "none" } const Docs = (props) => { - const { isLoaded, globalUrl, inputColor } = props; + const { isLoaded, globalUrl, inputColor, selectedDoc, serverside, isMobile, update} = props; + const theme = useTheme(); const [data, setData] = useState(""); const [firstrequest, setFirstrequest] = useState(true); const [list, setList] = useState([]); const [listLoaded, setListLoaded] = useState(false); const [anchorEl, setAnchorEl] = React.useState(null); + const [baseUrl, setBaseUrl] = React.useState(serverside === true ? "" : window.location.href) function handleClick(event) { setAnchorEl(event.currentTarget); @@ -49,77 +49,21 @@ const Docs = (props) => { setAnchorEl(null); } - useEffect(() => { - if (firstrequest) { - setFirstrequest(false) - fetchDocList() - fetchDocs(props.match.params.key) - return - } + const SidebarPaperStyle = { + backgroundColor: theme.palette.surfaceColor, + overflowX: "hidden", + position: "relative", + padding: 30, + paddingTop: 15, + borderRadius: 5, + } - // Continue this, and find the h2 with the data in it lol - if (window.location.hash.length > 0) { - var parent = document.getElementById("markdown_wrapper") - if (parent !== null) { - var elements = parent.getElementsByTagName('h2') - - const name = window.location.hash.slice(1, window.location.hash.lenth).toLowerCase().split("%20").join(" ").split("_").join(" ").split("-").join(" ") - - console.log(name) - var found = false - for (var key in elements) { - const element = elements[key] - if (element.innerHTML === undefined) { - continue - } - - // Fix location.. - if (element.innerHTML.toLowerCase() === name) { - element.scrollIntoView({behavior: "smooth"}) - found = true - //element.scrollTo({ - // top: element.offsetTop-100, - // behavior: "smooth" - //}) - } - } - - // H# - if (!found) { - var elements = parent.getElementsByTagName('h3') - console.log(name) - var found = false - for (var key in elements) { - const element = elements[key] - if (element.innerHTML === undefined) { - continue - } - - // Fix location.. - if (element.innerHTML.toLowerCase() === name) { - element.scrollIntoView({behavior: "smooth"}) - found = true - //element.scrollTo({ - // top: element.offsetTop-100, - // behavior: "smooth" - //}) - } - } - } - } - //console.log(element) - - //console.log("NAME: ", name) - //console.log(document.body.innerHTML) - // parent = document.getElementById(parent); - - //var descendants = parent.getElementsByTagName(tagname); - - // this.scrollDiv.current.scrollIntoView({ behavior: 'smooth' }); - - //$(".parent").find("h2:contains('Statistics')").parent(); - } - }) + const SideBar = { + maxWidth: 250, + flex: "1", + position: "fixed", + marginTop: 35, + } const fetchDocList = () => { fetch(globalUrl+"/api/v1/docs", { @@ -143,16 +87,17 @@ const Docs = (props) => { const fetchDocs = (docId) => { fetch(globalUrl+"/api/v1/docs/"+docId, { - method: 'GET', + method: 'GET', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', }, - }) + }) .then((response) => response.json()) - .then((responseJson) => { + .then((responseJson) => { if (responseJson.success) { setData(responseJson.reason) + document.title = "Shuffle "+docId+" documentation" } else { setData("# Error\nThis page doesn't exist.") } @@ -160,13 +105,99 @@ const Docs = (props) => { .catch(error => {}); } + if (firstrequest) { + setFirstrequest(false) + + if (selectedDoc !== undefined) { + setData(selectedDoc.reason) + setList(selectedDoc.list) + setListLoaded(true) + } else { + fetchDocList() + fetchDocs(props.match.params.key) + } + } + + // Handles search-based changes that origin from outside this file + if (serverside !== true && window.location.href !== baseUrl) { + setBaseUrl(window.location.href) + fetchDocs(props.match.params.key) + } + + const parseElementScroll = () => { + var parent = document.getElementById("markdown_wrapper_outer") + if (parent !== null) { + //console.log("IN PARENT") + var elements = parent.getElementsByTagName('h2') + + const name = window.location.hash.slice(1, window.location.hash.lenth).toLowerCase().split("%20").join(" ").split("_").join(" ").split("-").join(" ") + + //console.log(name) + var found = false + for (var key in elements) { + const element = elements[key] + if (element.innerHTML === undefined) { + continue + } + + // Fix location.. + if (element.innerHTML.toLowerCase() === name) { + element.scrollIntoView({behavior: "smooth"}) + found = true + //element.scrollTo({ + // top: element.offsetTop-100, + // behavior: "smooth" + //}) + } + } + + // H# + if (!found) { + var elements = parent.getElementsByTagName('h3') + console.log(name) + var found = false + for (var key in elements) { + const element = elements[key] + if (element.innerHTML === undefined) { + continue + } + + // Fix location.. + if (element.innerHTML.toLowerCase() === name) { + element.scrollIntoView({behavior: "smooth"}) + found = true + //element.scrollTo({ + // top: element.offsetTop-100, + // behavior: "smooth" + //}) + } + } + } + } + //console.log(element) + + //console.log("NAME: ", name) + //console.log(document.body.innerHTML) + // parent = document.getElementById(parent); + + //var descendants = parent.getElementsByTagName(tagname); + + // this.scrollDiv.current.scrollIntoView({ behavior: 'smooth' }); + + //$(".parent").find("h2:contains('Statistics')").parent(); + } + + if (serverside !== true && window.location.hash.length > 0) { + parseElementScroll() + } + const markdownStyle = { color: "rgba(255, 255, 255, 0.65)", flex: "1", - maxWidth: 750, + maxWidth: isMobile ? "100%" : 750, overflow: "hidden", paddingBottom: 200, - marginLeft: 250, + marginLeft: isMobile ? 0 : 275, } function OuterLink(props) { @@ -182,7 +213,7 @@ const Docs = (props) => { function CodeHandler(props) { return ( -
+			
 				
 					{props.value}
 				
@@ -190,13 +221,22 @@ const Docs = (props) => {
 		)
 	}
 
+	function TextWrapper(props) {
+		console.log(props)
+		return (
+			
+				{props.value}			
+			
+		)
+	}
+
 	function Heading(props) {
 		const element = React.createElement(`h${props.level}`, {style: {marginTop: 40}}, props.children)
 		return (
-			
-				{props.level !== 1 ?  : null}
+			
+				{props.level !== 1 ?  : null}
 				{element}
-			
+			
 		)
 	}
 	//React.createElement("p", {style: {color: "red", backgroundColor: "blue"}}, this.props.paragraph)
@@ -213,26 +253,28 @@ const Docs = (props) => {
   const postDataBrowser = 
 		
-
    - {list.map((item, index) => { - const path = "/docs/"+item - const newname = item.charAt(0).toUpperCase()+item.substring(1).split("_").join(" ").split("-").join(" ") - return ( -
  • - {fetchDocs(item)}}> -

    {newname}

    - -
  • - ) - })} -
+ + + {list.map((item, index) => { + const path = "/docs/"+item + const newname = item.charAt(0).toUpperCase()+item.substring(1).split("_").join(" ").split("-").join(" ") + return ( +
  • + {fetchDocs(item)}}> + {newname} + +
  • + ) + })} +
    +
    -
    +
    { const mobileStyle = { color: "white", - marginLeft: "15px", - marginRight: "15px", - paddingBottom: "50px", + marginLeft: 15, + marginRight: 15, + paddingBottom: 50, backgroundColor: "inherit", + display: "flex", + flexDirection: "column", } const postDataMobile =
    - - - {list.map(item => { - const path = "/docs/"+item - const newname = item.charAt(0).toUpperCase()+item.substring(1).split("_").join(" ").split("-").join(" ") - return ( - {window.location.pathname = path}}>{newname} - ) - })} - -
    +
    + + + {list.map((item, index) => { + const path = "/docs/"+item + const newname = item.charAt(0).toUpperCase()+item.substring(1).split("_").join(" ").split("-").join(" ") + return ( + {window.location.pathname = path}}>{newname} + ) + })} + +
    +
    - @@ -297,7 +348,7 @@ const Docs = (props) => { // {imageModal} - const loadedCheck = isLoaded && listLoaded ? + const loadedCheck =
    {postDataBrowser} @@ -306,9 +357,6 @@ const Docs = (props) => { {postDataMobile}
    - : -
    -
    return (
    From 68f9c541cdbc6d3f68037f910b0adaa74fe44268 Mon Sep 17 00:00:00 2001 From: frikky Date: Thu, 18 Feb 2021 07:59:43 +0100 Subject: [PATCH 16/37] Bumped docker versions --- backend/app_sdk/app_base.py | 57 ++- backend/go-app/walkoff.go | 9 +- docker-compose.yml | 6 +- frontend/src/views/Admin.jsx | 25 +- functions/onprem/orborus/build.sh | 2 +- functions/onprem/worker/worker.go | 1 - functions/stitcher.go | 703 ------------------------------ 7 files changed, 69 insertions(+), 734 deletions(-) delete mode 100644 functions/stitcher.go diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index 5320ecd9..c5e52b09 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -9,7 +9,6 @@ import requests import urllib.parse class AppBase: - """ The base class for Python-based apps in Shuffle, handles logging and callbacks configurations""" __version__ = None app_name = None @@ -21,7 +20,7 @@ class AppBase: # apikey is for the user / org # authorization is for the specific workflow self.url = os.getenv("CALLBACK_URL", "https://shuffler.io") - self.base_url = os.getenv("BASE_URL", "") + self.base_url = os.getenv("BASE_URL", "https://shuffler.io") self.action = os.getenv("ACTION", "") self.authorization = os.getenv("AUTHORIZATION", "") self.current_execution_id = os.getenv("EXECUTIONID", "") @@ -29,7 +28,10 @@ class AppBase: self.result_wrapper_count = 0 if isinstance(self.action, str): - self.action = json.loads(self.action) + try: + self.action = json.loads(self.action) + except: + print("[WARNING] Failed parsing action as JSON") if len(self.base_url) == 0: self.base_url = self.url @@ -530,9 +532,19 @@ class AppBase: "status": "EXECUTING" } + try: + print("Parameters: %d" % len(action["parameters"])) + except KeyError: + action["parameters"] = [] + self.action = copy.deepcopy(action) self.logger.info("ACTION RESULT (start): %s", action_result) + headers = { + "Content-Type": "application/json", + "Authorization": "Bearer %s" % self.authorization + } + if len(self.action) == 0: print("ACTION env not defined") action_result["result"] = "Error in setup ENV: ACTION not defined" @@ -551,10 +563,6 @@ class AppBase: self.send_result(action_result, headers, stream_path) return - headers = { - "Content-Type": "application/json", - "Authorization": "Bearer %s" % self.authorization - } # Add async logger # self.console_logger.handlers[0].stream.set_execution_id() @@ -1363,6 +1371,8 @@ class AppBase: actionname = action["name"] if " " in actionname: actionname.replace(" ", "_", -1) + + #if action.generated: # actionname = actionname.lower() @@ -1919,21 +1929,38 @@ class AppBase: self.send_result(action_result, headers, stream_path) return - - #STOPCOPY - # !!! Let the above line stay - its used for some horrible codegeneration / stitching !!! # - @classmethod - async def run(cls): - """ Connect to Redis and HTTP session, await actions """ + async def run(cls, action=""): logging.basicConfig(format="{asctime} - {name} - {levelname}:{message}", style='{') logger = logging.getLogger(f"{cls.__name__}") logger.setLevel(logging.DEBUG) - print("Started execution!!") - app = cls(redis=None, logger=logger, console_logger=logger) + print("Started execution: %s!!" % cls) + print("Action: %s" % action) + #if isinstance(cls, object): + # self.action = cls # Authorization for the app/function to control the workflow # Function will crash if its wrong, which it probably should. + app = cls(redis=None, logger=logger, console_logger=logger) + + if isinstance(action, object): + app.action = action + + try: + app.authorization = action["authorization"] + app.current_execution_id = action["execution_id"] + except: + pass + + try: + app.url = action["url"] + except: + pass + + try: + app.base_url = action["base_url"] + except: + pass await app.execute_action(app.action) diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index e203b2e8..1270d3fb 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -2025,11 +2025,10 @@ func deleteWorkflow(resp http.ResponseWriter, request *http.Request) { return } - err = increaseStatisticsField(ctx, "total_workflows", fileId, -1, workflow.OrgId) - if err != nil { - log.Printf("Failed to increase total workflows: %s", err) - } - + //err = increaseStatisticsField(ctx, "total_workflows", fileId, -1, workflow.OrgId) + //if err != nil { + // log.Printf("Failed to increase total workflows: %s", err) + //} //memcacheName := fmt.Sprintf("%s_%s", user.Username, fileId) //memcache.Delete(ctx, memcacheName) //memcacheName = fmt.Sprintf("%s_workflows", user.Username) diff --git a/docker-compose.yml b/docker-compose.yml index addef547..a3bc7321 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: frontend: #build: ./frontend - image: ghcr.io/frikky/shuffle-frontend:0.8.56 + image: ghcr.io/frikky/shuffle-frontend:0.8.57 container_name: shuffle-frontend hostname: shuffle-frontend ports: @@ -45,7 +45,7 @@ services: - database orborus: #build: ./functions/onprem/orborus - image: ghcr.io/frikky/shuffle-orborus:0.8.5 + image: ghcr.io/frikky/shuffle-orborus:0.8.56 container_name: shuffle-orborus hostname: shuffle-orborus networks: @@ -54,7 +54,7 @@ services: - /var/run/docker.sock:/var/run/docker.sock environment: - SHUFFLE_APP_SDK_VERSION=0.8.51 - - SHUFFLE_WORKER_VERSION=0.8.54 + - SHUFFLE_WORKER_VERSION=0.8.56 - ORG_ID=${ORG_ID} - ENVIRONMENT_NAME=${ENVIRONMENT_NAME} - BASE_URL=http://${OUTER_HOSTNAME}:${BACKEND_PORT} diff --git a/frontend/src/views/Admin.jsx b/frontend/src/views/Admin.jsx index f590ad60..305db169 100644 --- a/frontend/src/views/Admin.jsx +++ b/frontend/src/views/Admin.jsx @@ -31,6 +31,7 @@ import { useTheme } from '@material-ui/core/styles'; import HandlePayment from './HandlePayment' import OrgHeader from '../components/OrgHeader' +import CircularProgress from '@material-ui/core/CircularProgress'; import EditIcon from '@material-ui/icons/Edit'; import SelectAllIcon from '@material-ui/icons/SelectAll'; import OpenInNewIcon from '@material-ui/icons/OpenInNew'; @@ -1374,12 +1375,24 @@ const Admin = (props) => {
    {selectedOrganization.id === undefined ? -
    - : +
    + + + Loading Organization + +
    + :
    {selectedOrganization.name.length > 0 ? - : null} + : +
    + + + Loading Organization + +
    + } Cloud syncronization What does cloud sync do? Cloud syncronization is a way of getting more out of Shuffle. Shuffle will ALWAYS make every option open source, but features relying on other users can't be done without a collaborative approach. @@ -1690,7 +1703,7 @@ const Admin = (props) => { style={{ minWidth: 180, maxWidth: 180 }} /> - {users === undefined ? null : users.map((data, index) => { + {users === undefined || users === null ? null : users.map((data, index) => { var bgColor = "#27292d" if (index % 2 === 0) { bgColor = "#1f2023" @@ -2074,7 +2087,7 @@ const Admin = (props) => { primary="Actions" /> - {authentication === undefined ? null : authentication.map((data, index) => { + {authentication === undefined || authentication === null ? null : authentication.map((data, index) => { var bgColor = "#27292d" if (index % 2 === 0) { bgColor = "#1f2023" @@ -2392,7 +2405,7 @@ const Admin = (props) => { const iconStyle = {marginRight: 10} const data = -
    +
    0 && strings.Contains(items[1], "(AppBase)") { - classname = strings.Split(items[1], "(")[0] - } else { - log.Println("Something wrong :( (horrible programming right here)") - os.Exit(3) - } - } - - if strings.Contains(line, "if __name__ ==") { - break - } - - // asyncio.run(HelloWorld.run(), debug=True) - - newfile = append(newfile, line) - } - - filedata = []byte(strings.Join(newfile, "\n")) - return classname, filedata -} - -// https://stackoverflow.com/questions/21060945/simple-way-to-copy-a-file-in-golang -func Copy(src, dst string) error { - in, err := os.Open(src) - if err != nil { - return err - } - defer in.Close() - - out, err := os.Create(dst) - if err != nil { - return err - } - defer out.Close() - - _, err = io.Copy(out, in) - if err != nil { - return err - } - return out.Close() -} -func ZipFiles(filename string, files []string) error { - newZipFile, err := os.Create(filename) - if err != nil { - return err - } - defer newZipFile.Close() - - zipWriter := zip.NewWriter(newZipFile) - defer zipWriter.Close() - - // Add files to zip - for _, file := range files { - zipfile, err := os.Open(file) - if err != nil { - return err - } - defer zipfile.Close() - - // Get the file information - info, err := zipfile.Stat() - if err != nil { - return err - } - - header, err := zip.FileInfoHeader(info) - if err != nil { - return err - } - - // Using FileInfoHeader() above only uses the basename of the file. If we want - // to preserve the folder structure we can overwrite this with the full path. - filesplit := strings.Split(file, "/") - if len(filesplit) > 1 { - header.Name = filesplit[len(filesplit)-1] - } else { - header.Name = file - } - - // Change to deflate to gain better compression - // see http://golang.org/pkg/archive/zip/#pkg-constants - header.Method = zip.Deflate - - writer, err := zipWriter.CreateHeader(header) - if err != nil { - return err - } - if _, err = io.Copy(writer, zipfile); err != nil { - return err - } - } - - return nil -} - -func getAppbase(filepath string) []string { - appBase, err := ioutil.ReadFile(filepath) - if err != nil { - log.Printf("Readerror: %s", err) - os.Exit(1) - } - - record := false - validLines := []string{} - for _, line := range strings.Split(string(appBase), "\n") { - if strings.Contains(line, "#STOPCOPY") { - log.Println("Stopping copy") - break - } - - if record { - validLines = append(validLines, line) - } - - if strings.Contains(line, "#STARTCOPY") { - log.Println("Starting copy") - record = true - } - } - - return validLines -} - -// Puts together ./static_baseline.py, onprem/app_sdk_app_base.py and the -// appcode in a generated_app folder based on appname+version -func stitcher(appname string, appversion string) string { - baselinefile := "static_baseline.py" - appfolder := "apps" - appbasefile := "onprem/app_sdk/app_base.py" - - baseline, err := ioutil.ReadFile(baselinefile) - if err != nil { - log.Printf("Readerror: %s", err) - os.Exit(1) - } - - sourceappfile := fmt.Sprintf("%s/%s/%s/src/app.py", appfolder, appname, appversion) - appfile, err := ioutil.ReadFile(sourceappfile) - if err != nil { - log.Printf("App readerror: %s", err) - os.Exit(1) - } - - classname, appfile := formatAppfile(appfile) - if len(classname) == 0 { - log.Println("Failed finding classname in file.") - os.Exit(3) - } - - runner := getRunner(classname) - appBase := getAppbase(appbasefile) - - foldername := fmt.Sprintf("generated_apps/%s_%s", appname, appversion) - err = os.Mkdir(foldername, os.ModePerm) - if err != nil { - log.Println("Failed making temporary app folder. Probably already exists. Remaking") - os.RemoveAll(foldername) - os.MkdirAll(foldername, os.ModePerm) - } - - stitched := []byte(string(baseline) + strings.Join(appBase, "\n") + string(appfile) + string(runner)) - err = ioutil.WriteFile(fmt.Sprintf("%s/main.py", foldername), stitched, os.ModePerm) - if err != nil { - log.Println("Failed writing to stitched: %s", err) - os.Exit(3) - } - - err = Copy(fmt.Sprintf("%s/%s/%s/requirements.txt", appfolder, appname, appversion), fmt.Sprintf("%s/requirements.txt", foldername)) - if err != nil { - log.Println("Failed writing to requirement: %s", err) - os.Exit(3) - } - - log.Printf("Successfully stitched files in %s/main.py", foldername) - // Zip the folder - files := []string{ - fmt.Sprintf("%s/main.py", foldername), - fmt.Sprintf("%s/requirements.txt", foldername), - } - outputfile := fmt.Sprintf("%s.zip", foldername) - - err = ZipFiles(outputfile, files) - if err != nil { - log.Fatal(err) - } - - ctx := context.Background() - - // Creates a client. - client, err := storage.NewClient(ctx) - if err != nil { - log.Printf("Failed to create client: %v", err) - os.Exit(3) - } - - // Create bucket handle - bucket := client.Bucket(bucketName) - - remotePath := fmt.Sprintf("apps/%s_%s.zip", appname, appversion) - err = createFileFromFile(bucket, remotePath, outputfile) - if err != nil { - log.Printf("Failed to upload to bucket: %v", err) - os.Exit(3) - } - - os.Remove(outputfile) - return fmt.Sprintf("gs://%s/apps/%s_%s.zip", bucketName, appname, appversion) -} - -func createFileFromFile(bucket *storage.BucketHandle, remotePath, localPath string) error { - ctx := context.Background() - // [START upload_file] - f, err := os.Open(localPath) - if err != nil { - return err - } - defer f.Close() - - wc := bucket.Object(remotePath).NewWriter(ctx) - if _, err = io.Copy(wc, f); err != nil { - return err - } - if err := wc.Close(); err != nil { - return err - } - // [END upload_file] - return nil -} - -// Deploy to google cloud function :) -func deployFunction(appname, localization, applocation string, environmentVariables map[string]string) error { - ctx := context.Background() - service, err := cloudfunctions.NewService(ctx) - if err != nil { - return err - } - - // ProjectsLocationsListCall - projectsLocationsFunctionsService := cloudfunctions.NewProjectsLocationsFunctionsService(service) - location := fmt.Sprintf("projects/%s/locations/%s", gceProject, localization) - functionName := fmt.Sprintf("%s/functions/%s", location, appname) - - cloudFunction := &cloudfunctions.CloudFunction{ - AvailableMemoryMb: 128, - EntryPoint: "authorization", - EnvironmentVariables: environmentVariables, - HttpsTrigger: &cloudfunctions.HttpsTrigger{}, - MaxInstances: 0, - Name: functionName, - Runtime: "python37", - SourceArchiveUrl: applocation, - } - - //getCall := projectsLocationsFunctionsService.Get(fmt.Sprintf("%s/functions/function-5", location)) - //resp, err := getCall.Do() - - createCall := projectsLocationsFunctionsService.Create(location, cloudFunction) - _, err = createCall.Do() - if err != nil { - log.Println("Failed creating new function. Attempting patch, as it might exist already") - - createCall := projectsLocationsFunctionsService.Patch(fmt.Sprintf("%s/functions/%s", location, appname), cloudFunction) - _, err = createCall.Do() - if err != nil { - log.Println("Failed patching function") - return err - } - - log.Printf("Successfully patched %s to %s", appname, localization) - } else { - log.Printf("Successfully deployed %s to %s", appname, localization) - } - - // FIXME - use response to define the HTTPS entrypoint. It's default to an easy one tho - - return nil -} - -func deployAppCloudFunc(appname string, appversion string) { - _ = os.Mkdir("generated_apps", os.ModePerm) - - apikey := "eyJhbGciOiJSUzI1NiIsImtpZCI6IjYwZjQwNjBlNThkNzVmZDNmNzBiZWZmODhjNzk0YTc3NTMyN2FhMzEiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJodHRwczovL3NodWZmbGVyLmlvL2FwaS92MS93b3JrZmxvd3MvMWQ5ZDhjZTItNTY2ZS00YzNmLThhMzctNWQ2YzdkMjAwMGI1L2V4ZWN1dGUiLCJhenAiOiIxMDMwNzY3ODIwNjE0MjQ2MTg0MjIiLCJlbWFpbCI6InNjaGVkdWxlckBzaHVmZmxlLTI0MTUxNy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJleHAiOjE1NjU1Mjc1NTEsImlhdCI6MTU2NTUyMzk1MSwiaXNzIjoiaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tIiwic3ViIjoiMTAzMDc2NzgyMDYxNDI0NjE4NDIyIn0.r0EDq9fjhf_5CPTiltyfk_L3uYJp577Uy0yYPcCAl2nv50_z_oUtbWGBpQLL8gcj-NGd3g4E52Qur8k6hCMIQweLS6WAb1279vGffEoCNDfkWb3Oy-yJGP1kzwLvqFJqnHLkSWYXNWvSyWnEimW8Rryx_m1BXS5wcA8l4NIr83kS7fPZrTwjnwFSeGSThwk91DVARzapQb8r0GEgOUyHZ1aBXnV98mikzSUt-5xFKe9eMdD22YJAj0Ru-DxAxs5nOqghX4PMRysWjshjOMrlR1piPWxqAmewp8YKZDCQ5gXskpeAFBDoULT971Wsx_NCohnJsFqx1JfPS9ZYMTW2oQ" - fullAppname := fmt.Sprintf("%s-%s", strings.Replace(appname, "_", "-", -1), strings.Replace(appversion, ".", "-", -1)) - locations := []string{"europe-west2"} - - // Deploys the app to all locations - bucketname := stitcher(appname, appversion) - environmentVariables := map[string]string{ - "FUNCTION_APIKEY": apikey, - } - - for _, location := range locations { - err := deployFunction(fullAppname, location, bucketname, environmentVariables) - if err != nil { - log.Printf("Failed to deploy: %s", err) - os.Exit(3) - } - } -} - -func loadYaml(fileLocation string) (WorkflowApp, error) { - action := WorkflowApp{} - - yamlFile, err := ioutil.ReadFile(fileLocation) - if err != nil { - log.Printf("yamlFile.Get err: %s", err) - return WorkflowApp{}, err - } - - //log.Printf(string(yamlFile)) - err = yaml.Unmarshal([]byte(yamlFile), &action) - if err != nil { - return WorkflowApp{}, err - } - - return action, nil -} - -// FIXME - deploy to backend (YAML config) -func deployConfigToBackend(appname string, appversion string) error { - // FIXME - no static path pls - action, err := loadYaml(fmt.Sprintf("apps/%s/%s/api.yaml", appname, appversion)) - if err != nil { - log.Println(err) - return err - } - - action.Sharing = true - - data, err := json.Marshal(action) - if err != nil { - return err - } - - url := "http://localhost:5001/api/v1/workflows/apps" - client := &http.Client{} - req, err := http.NewRequest(http.MethodPut, url, bytes.NewReader(data)) - if err != nil { - return err - } - - req.Header.Set("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjYwZjQwNjBlNThkNzVmZDNmNzBiZWZmODhjNzk0YTc3NTMyN2FhMzEiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJodHRwczovL3NodWZmbGVyLmlvL2FwaS92MS93b3JrZmxvd3MvMWQ5ZDhjZTItNTY2ZS00YzNmLThhMzctNWQ2YzdkMjAwMGI1L2V4ZWN1dGUiLCJhenAiOiIxMDMwNzY3ODIwNjE0MjQ2MTg0MjIiLCJlbWFpbCI6InNjaGVkdWxlckBzaHVmZmxlLTI0MTUxNy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJleHAiOjE1NjU1Mjc1NTEsImlhdCI6MTU2NTUyMzk1MSwiaXNzIjoiaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tIiwic3ViIjoiMTAzMDc2NzgyMDYxNDI0NjE4NDIyIn0.r0EDq9fjhf_5CPTiltyfk_L3uYJp577Uy0yYPcCAl2nv50_z_oUtbWGBpQLL8gcj-NGd3g4E52Qur8k6hCMIQweLS6WAb1279vGffEoCNDfkWb3Oy-yJGP1kzwLvqFJqnHLkSWYXNWvSyWnEimW8Rryx_m1BXS5wcA8l4NIr83kS7fPZrTwjnwFSeGSThwk91DVARzapQb8r0GEgOUyHZ1aBXnV98mikzSUt-5xFKe9eMdD22YJAj0Ru-DxAxs5nOqghX4PMRysWjshjOMrlR1piPWxqAmewp8YKZDCQ5gXskpeAFBDoULT971Wsx_NCohnJsFqx1JfPS9ZYMTW2oQ") - - ret, err := client.Do(req) - if err != nil { - return err - } - - log.Printf("Status: %s", ret.Status) - body, err := ioutil.ReadAll(ret.Body) - if err != nil { - return err - } - - if ret.StatusCode != 200 { - return errors.New(fmt.Sprintf("Status %s. App probably already exists. Raw:\n%s", ret.Status, string(body))) - } - - log.Println(string(body)) - return nil -} - -func tarDirectory(filecontext string) (io.Reader, error) { - - // Create a filereader - //dockerFileReader, err := os.Open(dockerfile) - //if err != nil { - // return err - //} - - //// Read the actual Dockerfile - //readDockerFile, err := ioutil.ReadAll(dockerFileReader) - //if err != nil { - // return err - //} - - // Make a TAR header for the file - tarHeader := &tar.Header{ - Name: filecontext, - Typeflag: tar.TypeDir, - } - - // Writes the header described for the TAR file - buf := new(bytes.Buffer) - tw := tar.NewWriter(buf) - defer tw.Close() - err := tw.WriteHeader(tarHeader) - if err != nil { - return nil, err - } - - dockerFileTarReader := bytes.NewReader(buf.Bytes()) - return dockerFileTarReader, nil -} - -func tarDir(source string, target string) (*bytes.Reader, error) { - filename := filepath.Base(source) - target = filepath.Join(target, fmt.Sprintf("%s.tar", filename)) - tarfile, err := os.Create(target) - if err != nil { - return nil, err - } - - defer tarfile.Close() - - buf := new(bytes.Buffer) - _ = buf - tarball := tar.NewWriter(tarfile) - defer tarball.Close() - - info, err := os.Stat(source) - if err != nil { - return nil, err - } - - var baseDir string - if info.IsDir() { - baseDir = filepath.Base(source) - } - - _ = filepath.Walk(source, - func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - header, err := tar.FileInfoHeader(info, info.Name()) - if err != nil { - return err - } - - if baseDir != "" { - header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source)) - } - - if err := tarball.WriteHeader(header); err != nil { - return err - } - - if info.IsDir() { - return nil - } - - file, err := os.Open(path) - if err != nil { - return err - } - defer file.Close() - _, err = io.Copy(tarball, file) - return nil - }) - - dockerFileTarReader := bytes.NewReader(buf.Bytes()) - return dockerFileTarReader, nil -} - -func buildImage(client *client.Client, tags []string, dockerBuildCtxDir string) error { - dockerBuildContext, err := tarDir(dockerBuildCtxDir, ".") - if err != nil { - log.Printf("Error in taring the docker root folder - %s", err.Error()) - return err - } - - imageBuildResponse, err := client.ImageBuild( - context.Background(), - dockerBuildContext, - types.ImageBuildOptions{ - Dockerfile: "Dockerfile", - PullParent: true, - Remove: true, - Tags: tags, - NetworkMode: "host", - }, - ) - - if err != nil { - return err - } - - // Read the STDOUT from the build process - defer imageBuildResponse.Body.Close() - _, err = io.Copy(os.Stdout, imageBuildResponse.Body) - if err != nil { - return err - } - - return nil -} - -// FIXME - deploy to dockerhub -func deployWorker(appname, appversion string) error { - // Get dockerfile from ./apps/appname/appversion/Dockerfile - client, err := client.NewEnvClient() - if err != nil { - return err - } - - tags := []string{fmt.Sprintf("%s-%s", appname, appversion)} - err = buildImage(client, tags, fmt.Sprintf("./apps/%s/%s", appname, appversion)) - if err != nil { - log.Printf("Build error: %s", err) - return err - } - - return nil -} - -// Deploys all cloud functions. Onprem thooo :( -func deployAll() { - allapps := []string{ - "hoxhunt", - "secureworks", - "servicenow", - "lastline", - "netcraft", - "misp", - "email", - "testing", - "http", - "recordedfuture", - "passivetotal", - "carbon_black", - "thehive", - "cortex", - "splunk", - } - - for _, appname := range allapps { - appversion := "1.0.0" - - err := deployConfigToBackend(appname, appversion) - if err != nil { - log.Printf("Failed uploading config: %s", err) - continue - } - - deployAppCloudFunc(appname, appversion) - } -} - -func main() { - deployAll() - return - - appname := "testing" - appversion := "1.0.0" - - err := deployConfigToBackend(appname, appversion) - if err != nil { - log.Printf("Failed uploading config: %s", err) - os.Exit(1) - } - - deployAppCloudFunc(appname, appversion) - - // FIXME - build and deploy to dockerhub as well :) - // Not able to work in remote directory propely... Even tried making an actual tar and checking it rofl - //err := deployWorker(appname, appversion) - //if err != nil { - // log.Printf("Failed to deploy docker worker: %s", err) - //} -} From 6e9717f8d3c3c98cd9e8504dca088c258dac4616 Mon Sep 17 00:00:00 2001 From: frikky Date: Thu, 18 Feb 2021 08:00:31 +0100 Subject: [PATCH 17/37] Added frontend autoscroll --- frontend/src/components/ScrollToTop.jsx | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 frontend/src/components/ScrollToTop.jsx diff --git a/frontend/src/components/ScrollToTop.jsx b/frontend/src/components/ScrollToTop.jsx new file mode 100644 index 00000000..6b3c9911 --- /dev/null +++ b/frontend/src/components/ScrollToTop.jsx @@ -0,0 +1,32 @@ +import { useEffect } from 'react'; +import { withRouter } from 'react-router-dom'; +import ReactGA from 'react-ga'; + +function ScrollToTop({setCurpath, history }) { + useEffect(() => { + const unlisten = history.listen(() => { + window.scroll({ + top: 0, + left: 0, + behavior: "smooth", + }); + + //ReactGA.event({ + // category: "referral", + // action: "new_user_referral", + // label: "", + //}) + + ReactGA.pageview(window.location.pathname) + setCurpath(window.location.pathname) + }); + return () => { + unlisten(); + } + }, []); + + return (null); +} + +// https://stackoverflow.com/questions/36904185/react-router-scroll-to-top-on-every-transition +export default withRouter(ScrollToTop); From 8fb64da39a4367575a61ceb96c8766c63d99ccc9 Mon Sep 17 00:00:00 2001 From: frikky Date: Thu, 18 Feb 2021 08:00:54 +0100 Subject: [PATCH 18/37] Added initial lambda function --- functions/extensions/aws-lambda/main.go | 66 +++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 functions/extensions/aws-lambda/main.go diff --git a/functions/extensions/aws-lambda/main.go b/functions/extensions/aws-lambda/main.go new file mode 100644 index 00000000..c78467d6 --- /dev/null +++ b/functions/extensions/aws-lambda/main.go @@ -0,0 +1,66 @@ +package main + +import ( + "context" + //"encoding/json" + //"fmt" + "github.com/aws/aws-lambda-go/lambda" + "net/http" +) + +type LambdaPayload struct { + RequestContext struct { + Elb struct { + TargetGroupArn string `json:"targetGroupArn"` + } `json:"elb"` + } `json:"requestContext"` + HTTPMethod string `json:"httpMethod"` + Path string `json:"path"` + Headers map[string]string `json:"headers"` + QueryStringParameters map[string]string `json:"queryStringParameters"` + Body string `json:"body"` + IsBase64Encoded bool `json:"isBase64Encoded"` +} + +type LambdaResponse struct { + IsBase64Encoded bool `json:"isBase64Encoded"` + StatusCode int `json:"statusCode"` + StatusDescription string `json:"statusDescription"` + Headers struct { + SetCookie string `json:"Set-cookie"` + ContentType string `json:"Content-Type"` + } `json:"headers"` + Body string `json:"body"` +} + +func lambda_handler(ctx context.Context, payload LambdaPayload) (LambdaResponse, error) { + response := &LambdaResponse{} + response.Headers.ContentType = "text/html" + response.StatusCode = http.StatusBadRequest + response.StatusDescription = http.StatusText(http.StatusBadRequest) + if payload.HTTPMethod == http.MethodGet && payload.Path == "/myfavoritecar" { + res := "TEST" + //car := &Car{} + //car.Model = "Corvette" + //car.Color = "Red" + //car.Year = 1999 + //res, err := json.Marshal(car) + //if err != nil { + // fmt.Println(err) + // response.StatusCode = http.StatusInternalServerError + // response.StatusDescription = http.StatusText(http.StatusInternalServerError) + // return *response, err + //} + response.Headers.ContentType = "application/json" + response.Body = string(res) + response.StatusCode = http.StatusOK + response.StatusDescription = http.StatusText(http.StatusOK) + return *response, nil + } else { + return *response, nil + } +} + +func main() { + lambda.Start(lambda_handler) +} From 848d4c3adb54503404e9a4ab3ca6e2c3206c7a53 Mon Sep 17 00:00:00 2001 From: frikky Date: Thu, 18 Feb 2021 11:30:26 +0100 Subject: [PATCH 19/37] Added re-execution button --- backend/app_sdk/app_base.py | 11 +++++-- backend/go-app/main.go | 14 ++++----- frontend/src/views/AngularWorkflow.jsx | 42 +++++++++++++++++--------- 3 files changed, 42 insertions(+), 25 deletions(-) diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index c5e52b09..963cfc9f 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -7,6 +7,7 @@ import json import logging import requests import urllib.parse +import http.client class AppBase: __version__ = None @@ -57,17 +58,18 @@ class AppBase: # I wonder if this actually works self.logger.info("Before last stream result") url = "%s%s" % (self.base_url, stream_path) - print("[INFO] URL (URL): %s" % url) + #print("[INFO] URL (URL): %s" % url) try: ret = requests.post(url, headers=headers, json=action_result) self.logger.info("Result: %d" % ret.status_code) if ret.status_code != 200: self.logger.info(ret.text) except requests.exceptions.ConnectionError as e: - self.logger.exception("ConnectionError: %s" % e) + #self.logger.exception("ConnectionError: %s" % e) + self.logger.exception("Expected connectionerror happened") return except TypeError as e: - self.logger.exception(e) + #self.logger.exception(e) action_result["status"] = "FAILURE" action_result["result"] = "POST error: %s" % e self.logger.info("Before typeerror stream result") @@ -75,6 +77,9 @@ class AppBase: self.logger.info("Result: %d" % ret.status_code) if ret.status_code != 200: self.logger.info(ret.text) + except http.client.RemoteDisconnected as e: + self.logger.exception("Expected connectionerror happened") + return async def cartesian_product(self, L): if L: diff --git a/backend/go-app/main.go b/backend/go-app/main.go index 1a969309..349cf5b5 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -6904,19 +6904,19 @@ func remoteOrgJobController(org Org, body []byte) error { ctx := context.Background() if !responseData.Success { - log.Printf("Should stop org job controller") + log.Printf("Should stop org job controller because no success?") - if strings.Contains(responseData.Reason, "Bad apikey") { - log.Printf("Bad apikey. Stopping sync for org?: %s", responseData.Reason) + if strings.Contains(responseData.Reason, "Bad apikey") || strings.Contains(responseData.Reason, "Error getting the organization") { + log.Printf("[WARNING] Remote error; Bad apikey or org error. Stopping sync for org: %s", responseData.Reason) if value, exists := scheduledOrgs[org.Id]; exists { // Looks like this does the trick? Hurr - log.Printf("STOPPING ORG SCHEDULE for: %s", org.Id) + log.Printf("[WARNING] STOPPING ORG SCHEDULE for: %s", org.Id) value.Lock() org, err := getOrg(ctx, org.Id) if err != nil { - log.Printf("Failed finding org %s: %s", org.Id, err) + log.Printf("[WARNING] Failed finding org %s: %s", org.Id, err) return err } @@ -6925,9 +6925,9 @@ func remoteOrgJobController(org Org, body []byte) error { org.CloudSync = false err = setOrg(ctx, *org, org.Id) if err != nil { - log.Printf("Failed setting organization when stopping sync: %s", err) + log.Printf("[WARNING] Failed setting organization when stopping sync: %s", err) } else { - log.Printf("Successfully updated the org to not sync") + log.Printf("[INFO] Successfully STOPPED org cloud sync for %s", org.Id) } return errors.New("Stopped schedule for org locally because of bad apikey.") diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index a53f403d..eeae0a0c 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -782,7 +782,7 @@ const AngularWorkflow = (props) => { return true } - const executeWorkflow = () => { + const executeWorkflow = (executionArgument, startNode) => { if (!lastSaved) { //alert.error("You might have forgotten to save before executing.") console.log("FIXME: Might have forgotten to save before executing.") @@ -804,13 +804,13 @@ const AngularWorkflow = (props) => { curelements[i].addClass("not-executing-highlight") } - if (executionText.length > 0) { - alert.success("Starting execution with an execution argument") + if (executionArgument.length > 0) { + alert.success("Starting execution WITH an execution argument") } else { alert.success("Starting execution") } - const data = {"execution_argument": executionText, "start": workflow.start} + const data = {"execution_argument": executionArgument, "start": startNode} fetch(globalUrl+"/api/v1/workflows/"+props.match.params.key+"/execute", { method: 'POST', headers: { @@ -1870,8 +1870,8 @@ const AngularWorkflow = (props) => { const paperAppStyle = { borderRadius: borderRadius, - minHeight: "100px", - maxHeight: "100px", + minHeight: 100, + maxHeight: 100, minWidth: "100%", maxWidth: "100%", marginTop: "5px", @@ -2557,7 +2557,7 @@ const AngularWorkflow = (props) => { {newAppname} - +

    {newAppname}

    @@ -6121,7 +6121,7 @@ const AngularWorkflow = (props) => { : @@ -6502,13 +6502,31 @@ const AngularWorkflow = (props) => { -

    Executing Workflow

    +
    +

    Executing Workflow

    + + + +
    {executionData.status !== undefined && executionData.status.length > 0 ?
    Status: {executionData.status}
    : null } + {executionData.execution_source !== undefined && executionData.execution_source !== null && executionData.execution_source.length > 0 && executionData.execution_source !== "default" ? +
    + Source: {executionData.execution_source} +
    + : null + } {executionData.started_at !== undefined ?
    Started: {new Date(executionData.started_at*1000).toISOString()} @@ -6521,12 +6539,6 @@ const AngularWorkflow = (props) => {
    : null } - {executionData.execution_source !== undefined && executionData.execution_source.length > 0 ? -
    - Source: {executionData.execution_source} -
    - : null - } {executionData.execution_argument !== undefined && executionData.execution_argument.length > 0 ? parsedExecutionArgument() : null } From e1c39b167069b852c5cf9a17a59b32a1187e72cf Mon Sep 17 00:00:00 2001 From: frikky Date: Thu, 18 Feb 2021 11:42:23 +0100 Subject: [PATCH 20/37] Added dropzone to workflow view --- backend/app_sdk/Dockerfile | 2 +- frontend/src/views/Workflows.jsx | 59 +++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/backend/app_sdk/Dockerfile b/backend/app_sdk/Dockerfile index 370c31f8..75ec12c4 100644 --- a/backend/app_sdk/Dockerfile +++ b/backend/app_sdk/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.7-alpine as base +FROM python:3.9.1-alpine as base FROM base as builder RUN apk --no-cache add --update alpine-sdk libffi libffi-dev musl-dev openssl-dev diff --git a/frontend/src/views/Workflows.jsx b/frontend/src/views/Workflows.jsx index 0f1d6107..05bc5196 100644 --- a/frontend/src/views/Workflows.jsx +++ b/frontend/src/views/Workflows.jsx @@ -29,6 +29,7 @@ import PublishIcon from '@material-ui/icons/Publish'; //import JSONPretty from 'react-json-pretty'; //import JSONPrettyMon from 'react-json-pretty/dist/monikai' import ReactJson from 'react-json-view' +import Dropzone from '../components/Dropzone'; import {Link} from 'react-router-dom'; import { useAlert } from "react-alert"; @@ -108,6 +109,8 @@ const Workflows = (props) => { const [deleteModalOpen, setDeleteModalOpen] = React.useState(false); const [editingWorkflow, setEditingWorkflow] = React.useState({}) const [executionLoading, setExecutionLoading] = React.useState(false) + const [isDropzone, setIsDropzone] = React.useState(false); + const { start, stop } = useInterval({ duration: 5000, startImmediate: false, @@ -180,6 +183,58 @@ const Workflows = (props) => {
    : null + const uploadFile = (e) => { + const isDropzone = e.dataTransfer === undefined ? false : e.dataTransfer.files.length > 0; + const files = isDropzone ? e.dataTransfer.files : e.target.files; + + const reader = new FileReader(); + alert.info("Starting upload. Please wait while we validate the workflows") + + try { + reader.addEventListener('load', (e) => { + var data = e.target.result; + setIsDropzone(false) + try { + data = JSON.parse(reader.result) + } catch (e) { + alert.error("Invalid JSON: "+e) + return + } + + // Initialize the workflow itself + const ret = setNewWorkflow(data.name, data.description, data.tags, {}, false) + .then((response) => { + if (response !== undefined) { + // SET THE FULL THING + data.id = response.id + + // Actually create it + const ret = setNewWorkflow(data.name, data.description, data.tags, data, false) + .then((response) => { + if (response !== undefined) { + alert.success("Successfully imported "+data.name) + } + }) + } + }) + .catch(error => { + alert.error("Import error: "+error.toString()) + }); + }) + } catch (e) { + console.log("Error in dropzone: ", e) + } + + reader.readAsText(files[0]); + } + + useEffect(() => { + if (isDropzone) { + //redirectOpenApi(); + setIsDropzone(false); + } + }, [isDropzone]); + const getAvailableWorkflows = () => { fetch(globalUrl+"/api/v1/workflows", { method: 'GET', @@ -1477,7 +1532,9 @@ const Workflows = (props) => { const loadedCheck = isLoaded && isLoggedIn && workflowDone ?
    - + 1366 ? 1366 : 1200, margin: "auto", padding: 20 }} onDrop={uploadFile}> + + {modalView} {deleteModal} {workflowDownloadModalOpen} From bd6f12c56210cceee7930a126f6d4ddd39d52e1a Mon Sep 17 00:00:00 2001 From: frikky Date: Thu, 18 Feb 2021 12:05:29 +0100 Subject: [PATCH 21/37] Added subflow execution exploration button --- backend/go-app/walkoff.go | 10 ++++++++++ frontend/src/views/AngularWorkflow.jsx | 19 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index 1270d3fb..4a59d6c6 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -3135,9 +3135,19 @@ func handleExecution(id string, workflow Workflow, request *http.Request) (Workf // This one doesn't really matter. log.Printf("[INFO] Running POST execution with body of length %d", len(string(body))) + + if body[0] == 34 && body[len(body)-1] == 34 { + body = body[1 : len(body)-1] + } if len(string(body)) < 50 { + //log.Println(body) + // String in string + //log.Println(body) + + //if string(body)[0] == "\"" && string(body)[string(body) log.Printf("Body: %s", string(body)) } + var execution ExecutionRequest err = json.Unmarshal(body, &execution) if err != nil { diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index eeae0a0c..87c7461c 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -378,7 +378,20 @@ const AngularWorkflow = (props) => { if (responseJson.length > 0) { // FIXME: Sort this by time setWorkflowExecutions(responseJson) + + const cursearch = typeof window === 'undefined' || window.location === undefined ? "" : window.location.search + const tmpView = new URLSearchParams(cursearch).get("execution_id") + if (tmpView !== undefined && tmpView !== null && tmpView.length > 0) { + //console.log("SHOW EXECUTION ", tmpView) + const execution = responseJson.find(data => data.execution_id === tmpView) + if (execution !== null && execution !== undefined) { + console.log("EXEC: ", execution) + setExecutionData(execution) + setExecutionModalView(1) + } + } } + //alert.info("Loaded executions") //setWorkflowExecutions(responseJson) }) @@ -6635,7 +6648,11 @@ const AngularWorkflow = (props) => { /> {data.action.app_name === "shuffle-subflow" ? - TBD: Load subexecution result for + {validate.valid && data.action.parameters !== undefined && data.action.parameters !== null ? + See subflow execution + : + "TBD: Load subexecution result for" + } : null } From 6d86207c8f2a41754ab87cacc94040caae4d7132 Mon Sep 17 00:00:00 2001 From: frikky Date: Thu, 18 Feb 2021 16:27:35 +0100 Subject: [PATCH 22/37] Added saving tracker to workflows --- backend/app_sdk/app_base.py | 2 +- backend/go-app/walkoff.go | 7 +- frontend/src/components/Header.js | 113 +++++++++++-------------- frontend/src/views/AngularWorkflow.jsx | 54 ++++++++++-- 4 files changed, 104 insertions(+), 72 deletions(-) diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index 963cfc9f..25d63d80 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -538,7 +538,7 @@ class AppBase: } try: - print("Parameters: %d" % len(action["parameters"])) + print(action["parameters"]) except KeyError: action["parameters"] = [] diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index 4a59d6c6..80e39e0c 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -3135,7 +3135,10 @@ func handleExecution(id string, workflow Workflow, request *http.Request) (Workf // This one doesn't really matter. log.Printf("[INFO] Running POST execution with body of length %d", len(string(body))) - + a + if body[0] == 34 && body[len(body)-1] == 34 { + body = body[1 : len(body)-1] + } if body[0] == 34 && body[len(body)-1] == 34 { body = body[1 : len(body)-1] } @@ -6621,7 +6624,7 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin if !reservedFound { buildLaterFirst = append(buildLaterFirst, buildLater) } else { - log.Printf("\n\n[WARNING] Skipping build of %s to later\n\n", workflowapp.Name) + log.Printf("[WARNING] Skipping build of %s to later", workflowapp.Name) } } } diff --git a/frontend/src/components/Header.js b/frontend/src/components/Header.js index 11dcf59c..45d3a1e0 100644 --- a/frontend/src/components/Header.js +++ b/frontend/src/components/Header.js @@ -4,10 +4,13 @@ import {BrowserView, MobileView} from "react-device-detect"; import {Link} from 'react-router-dom'; import List from '@material-ui/core/List'; +import Avatar from '@material-ui/core/Avatar'; +import Menu from '@material-ui/core/Menu'; import ListItem from '@material-ui/core/ListItem'; import MenuItem from '@material-ui/core/MenuItem'; import Select from '@material-ui/core/Select'; import Button from '@material-ui/core/Button'; +import IconButton from '@material-ui/core/IconButton'; import HomeIcon from '@material-ui/icons/Home'; import PolymerIcon from '@material-ui/icons/Polymer'; import AppsIcon from '@material-ui/icons/Apps'; @@ -27,6 +30,7 @@ const Header = props => { const [LoginHoverColor, setLoginHoverColor] = useState(hoverOutColor); const [DocsHoverColor, setDocsHoverColor] = useState(hoverOutColor); const [HelpHoverColor, setHelpHoverColor] = useState(hoverOutColor); + const [anchorEl, setAnchorEl] = React.useState(null); const hrefStyle = { color: hoverOutColor, @@ -102,6 +106,17 @@ const Header = props => { setLoginHoverColor(hoverOutColor) } + + const handleClick = (event) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + + // Should be based on some path const logoCheck = !homePage ? null : null @@ -182,74 +197,46 @@ const Header = props => {
    - - -
    - Logout -
    -
    - {logoCheck} - + { + setAnchorEl(event.currentTarget); + }}> + + + { + handleClose() + }} + > + { + event.preventDefault() + handleClose() + }}> - + Settings - - {/* - - - - - - */} + {userdata === undefined || userdata.admin === undefined || userdata.admin === null || !userdata.admin ? null : - + { + event.preventDefault() + handleClose() + }}> - + Admin - + } - {userdata === undefined || userdata.orgs === undefined || userdata.orgs === null || userdata.orgs.length <= 1 ? null : - - - - } - - + { + event.preventDefault() + handleClose() + handleClickLogout() + }}> + Logout + +
    @@ -327,7 +314,7 @@ const Header = props => { // const loadedCheck = -
    +
    {loginTextBrowser} diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 87c7461c..861c37f1 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -121,6 +121,8 @@ const AngularWorkflow = (props) => { const [bodyWidth, bodyHeight] = useWindowSize(); const appBarSize = 74 + const headerSize = 60 + var to_be_copied = "" const [cystyle, ] = useState(cytoscapestyle) const [cy, setCy] = React.useState() @@ -155,6 +157,9 @@ const AngularWorkflow = (props) => { const [showSkippedActions, setShowSkippedActions] = React.useState(false) const [lastExecution, setLastExecution] = React.useState("") + // 0 = normal, 1 = just done, 2 = normal + const [savingState, setSavingState] = React.useState(0) + const [selectedResult, setSelectedResult] = React.useState({}) const [codeModalOpen, setCodeModalOpen] = React.useState(false); @@ -646,6 +651,7 @@ const AngularWorkflow = (props) => { const saveWorkflow = (curworkflow) => { var success = false + setSavingState(2) // This might not be the right course of action, but seems logical, as items could be running already // Makes it possible to update with a version in current render @@ -654,7 +660,7 @@ const AngularWorkflow = (props) => { if (curworkflow !== undefined) { useworkflow = curworkflow } else { - alert.info("Saving workflow") + //alert.info("Saving workflow") } var cyelements = cy.elements() @@ -752,6 +758,7 @@ const AngularWorkflow = (props) => { credentials: "include", }) .then((response) => { + setSavingState(0) if (response.status !== 200) { console.log("Status not 200 for setting workflows :O!") } @@ -773,10 +780,15 @@ const AngularWorkflow = (props) => { setWorkflow(workflow) } - alert.success("Successfully saved workflow") + //alert.success("Successfully saved workflow") + setSavingState(1) + setTimeout(() => { + setSavingState(0) + }, 3000); } }) .catch(error => { + setSavingState(0) alert.error(error.toString()) }); @@ -3842,7 +3854,6 @@ const AngularWorkflow = (props) => { }) } - const headerSize = 68 const rightsidebarStyle = { position: "fixed", right: 0, @@ -5159,11 +5170,42 @@ const AngularWorkflow = (props) => { })} } + {/*subworkflow === undefined || subworkflow === null || subworkflow.id === undefined ? null : + + */} {workflow.triggers[selectedTriggerIndex].parameters[0].value.length === 0 ? null : Explore selected workflow}
    - Execution Argument: + Execution Argument
    { /> - From e7541320a14cc8c354e0fbdf6e0501bea3dbec46 Mon Sep 17 00:00:00 2001 From: frikky Date: Thu, 18 Feb 2021 17:20:51 +0100 Subject: [PATCH 23/37] #256: Added category dropdown to app editor --- backend/app_sdk/app_base.py | 30 +++++---- backend/go-app/main.go | 8 +-- backend/go-app/walkoff.go | 7 +-- frontend/src/views/AngularWorkflow.jsx | 29 +++++---- frontend/src/views/AppCreator.jsx | 84 +++++++++++++++++++------- 5 files changed, 102 insertions(+), 56 deletions(-) diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index 25d63d80..47bb2aa5 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -541,9 +541,11 @@ class AppBase: print(action["parameters"]) except KeyError: action["parameters"] = [] + except TypeError: + pass self.action = copy.deepcopy(action) - self.logger.info("ACTION RESULT (start): %s", action_result) + self.logger.info("Sending starting action result (EXECUTING)") headers = { "Content-Type": "application/json", @@ -1473,10 +1475,10 @@ class AppBase: except KeyError: pass - print("Return value: %s" % value) + #print("Return value: %s" % value) actionname = action["name"] #print("Multicheck ", actualitem) - print("ITEM LENGTH: %d, Actual item: %s" % (len(actualitem), actualitem)) + #print("ITEM LENGTH: %d, Actual item: %s" % (len(actualitem), actualitem)) if len(actualitem) > 0: multiexecution = True @@ -1636,14 +1638,14 @@ class AppBase: # With this parameter ready, add it to... a greater list of parameters. Rofl print("LENGTH OF ARR: %d" % len(resultarray)) - print("RESULTARRAY: %s" % resultarray) + #print("RESULTARRAY: %s" % resultarray) if resultarray not in multi_execution_lists: multi_execution_lists.append(resultarray) multi_parameters[parameter["name"]] = resultarray else: # Parses things like int(value) - print("Normal parsing (not looping) with data %s" % value) + print("Normal parsing (not looping)")#with data %s" % value) value = parse_wrapper_start(value) if parameter["id"] == "body_replacement": @@ -1663,7 +1665,7 @@ class AppBase: # print("PARAM: %s" % parameter) #if param.id == "body_replacement": - print("POST data value: %s" % value) + #print("POST data value: %s" % value) params[parameter["name"]] = value multi_parameters[parameter["name"]] = value @@ -1719,9 +1721,9 @@ class AppBase: #}) #print("[INFO] APP_SDK DONE: Starting NORMAL execution of function") - #print("[INFO] Running with params (0): %s" % params) + print("[INFO] Running execition\n") newres = await func(**params) - print("[INFO] Returned from execution:", newres) + print("\n[INFO] Returned from execution:", newres) if isinstance(newres, tuple): print("[INFO] Handling return as tuple") # Handles files. @@ -1940,16 +1942,16 @@ class AppBase: logger = logging.getLogger(f"{cls.__name__}") logger.setLevel(logging.DEBUG) - print("Started execution: %s!!" % cls) - print("Action: %s" % action) + #print("Started execution: %s!!" % cls) + #print("Action: %s" % action) #if isinstance(cls, object): # self.action = cls - # Authorization for the app/function to control the workflow - # Function will crash if its wrong, which it probably should. app = cls(redis=None, logger=logger, console_logger=logger) - if isinstance(action, object): + if isinstance(action, str): + print("Normal execution. Action is a string.") + elif isinstance(action, object): app.action = action try: @@ -1967,5 +1969,7 @@ class AppBase: app.base_url = action["base_url"] except: pass + else: + print("ACTION TYPE (unhandled): %s" % type(action)) await app.execute_action(app.action) diff --git a/backend/go-app/main.go b/backend/go-app/main.go index 349cf5b5..c27de623 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -6615,7 +6615,7 @@ func healthCheckHandler(resp http.ResponseWriter, request *http.Request) { // Creates osfs from folderpath with a basepath as directory base func createFs(basepath, pathname string) (billy.Filesystem, error) { - log.Printf("base: %s, pathname: %s", basepath, pathname) + log.Printf("[INFO] MemFS base: %s, pathname: %s", basepath, pathname) fs := memfs.New() err := filepath.Walk(pathname, @@ -6676,19 +6676,19 @@ func handleAppHotload(location string, forceUpdate bool) error { log.Printf("Failed memfs creation - probably bad path: %s", err) return errors.New(fmt.Sprintf("Failed to find directory %s", location)) } else { - log.Printf("Memfs creation from %s done", location) + log.Printf("[INFO] Memfs creation from %s done", location) } dir, err := fs.ReadDir("") if err != nil { - log.Printf("Failed reading folder: %s", err) + log.Printf("[WARNING] Failed reading folder: %s", err) return err } //log.Printf("Reading app folder: %#v", dir) _, _, err = iterateAppGithubFolders(fs, dir, "", "", forceUpdate) if err != nil { - log.Printf("Err: %s", err) + log.Printf("[WARNING] Githubfolders error: %s", err) return err } diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index 80e39e0c..5a241064 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -820,7 +820,7 @@ func handleGetWorkflowqueue(resp http.ResponseWriter, request *http.Request) { if len(executionRequests.Data) == 0 { executionRequests.Data = []ExecutionRequest{} } else { - log.Printf("[INFO] Executionrequests: %d", len(executionRequests.Data)) + log.Printf("[INFO] Executionrequests (%s): %d", id, len(executionRequests.Data)) } newjson, err := json.Marshal(executionRequests) @@ -3135,7 +3135,6 @@ func handleExecution(id string, workflow Workflow, request *http.Request) (Workf // This one doesn't really matter. log.Printf("[INFO] Running POST execution with body of length %d", len(string(body))) - a if body[0] == 34 && body[len(body)-1] == 34 { body = body[1 : len(body)-1] } @@ -5958,7 +5957,7 @@ func handleAppHotloadRequest(resp http.ResponseWriter, request *http.Request) { return } - log.Printf("Starting app hotloading") + log.Printf("[INFO] Starting app hotloading") // Just need to be logged in // FIXME - should have some permissions? @@ -5983,7 +5982,7 @@ func handleAppHotloadRequest(resp http.ResponseWriter, request *http.Request) { return } - log.Printf("Hotloading from %s", location) + log.Printf("[INFO] Hotloading from %s", location) err = handleAppHotload(location, true) if err != nil { log.Printf("Failed app hotload: %s", err) diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 861c37f1..4ba479b4 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -137,6 +137,7 @@ const AngularWorkflow = (props) => { const [workflow, setWorkflow] = React.useState({}); const [userSettings, setUserSettings] = React.useState({}); const [subworkflow, setSubworkflow] = React.useState({}); + const [subworkflowStartnode, setSubworkflowStartnode] = React.useState(""); const [leftViewOpen, setLeftViewOpen] = React.useState(true); const [leftBarSize, setLeftBarSize] = React.useState(350) const [executionText, setExecutionText] = React.useState(""); @@ -783,8 +784,8 @@ const AngularWorkflow = (props) => { //alert.success("Successfully saved workflow") setSavingState(1) setTimeout(() => { - setSavingState(0) - }, 3000); + setSavingState(0) + }, 2000); } }) .catch(error => { @@ -830,9 +831,9 @@ const AngularWorkflow = (props) => { } if (executionArgument.length > 0) { - alert.success("Starting execution WITH an execution argument") + //alert.success("Starting execution WITH an execution argument") } else { - alert.success("Starting execution") + //alert.success("Starting execution") } const data = {"execution_argument": executionArgument, "start": startNode} @@ -5154,6 +5155,7 @@ const AngularWorkflow = (props) => { setUpdate(Math.random()) workflow.triggers[selectedTriggerIndex].parameters[0].value = e.target.value.id setWorkflow(workflow) + setSubworkflowStartnode(e.target.value.start) }} style={{backgroundColor: inputColor, color: "white", height: "50px"}} > @@ -5170,9 +5172,9 @@ const AngularWorkflow = (props) => { })} } - {/*subworkflow === undefined || subworkflow === null || subworkflow.id === undefined ? null : + {/*subworkflow === undefined || subworkflow === null || subworkflow.id === undefined || subworkflow.actions === null || subworkflow.actions === undefined || subworkflow.actions.length === 0 ? null : { + setNewWorkflowCategories([e.target.value]) + setUpdate("added "+e.target.value) + }} + value={newWorkflowCategories.length === 0 ? "Select a category" : newWorkflowCategories[0]} + style={{backgroundColor: inputColor, color: "white", height: "50px"}} + > + {categories.map(data => ( + + {data} + + ))} + +

    Tags

    + { + newWorkflowTags.push(chip) + setNewWorkflowTags(newWorkflowTags) + setUpdate("added"+chip) + }} + onDelete={(chip, index) => { + newWorkflowTags.splice(index, 1) + setNewWorkflowTags(newWorkflowTags) + setUpdate("delete "+chip) + }} + />
    const actionView = From e7e50a266b61482d9802cc6e611591ad6f063eb8 Mon Sep 17 00:00:00 2001 From: frikky Date: Thu, 18 Feb 2021 18:29:35 +0100 Subject: [PATCH 24/37] Added description hover for action params --- frontend/src/views/AngularWorkflow.jsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 4ba479b4..d9a27e1c 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -3667,6 +3667,7 @@ const AngularWorkflow = (props) => { } tmpitem = tmpitem.charAt(0).toUpperCase()+tmpitem.substring(1) + const description = data.description === undefined ? "" : data.description return (
    @@ -3680,10 +3681,12 @@ const AngularWorkflow = (props) => { }}/> : -
    +
    }
    - {tmpitem} + + {tmpitem} +
    {selectedActionParameters[count].options !== undefined && selectedActionParameters[count].options !== null && selectedActionParameters[count].options.length > 0 ? null : From 1c12db12d17311711db4ec6be3bb5dfb92376aa2 Mon Sep 17 00:00:00 2001 From: frikky Date: Thu, 18 Feb 2021 19:01:46 +0100 Subject: [PATCH 25/37] Fixed app dragging as image --- frontend/src/views/AngularWorkflow.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index d9a27e1c..54eb4504 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -2581,7 +2581,7 @@ const AngularWorkflow = (props) => { {setHover(true)}} onMouseOut={() => {setHover(false)}}> - {newAppname} + {newAppname} @@ -3681,7 +3681,7 @@ const AngularWorkflow = (props) => { }}/> : -
    +
    }
    From 5c14a3a202d7971af40dedef473c74caa11d6614 Mon Sep 17 00:00:00 2001 From: frikky Date: Thu, 18 Feb 2021 19:51:27 +0100 Subject: [PATCH 26/37] Lots of minor fixes --- backend/app_sdk/app_base.py | 8 +-- backend/go-app/codegen.go | 13 ++-- backend/go-app/docker.go | 2 +- backend/go-app/main.go | 8 +-- backend/go-app/walkoff.go | 82 ++++++++++++++++++++++---- frontend/src/views/AngularWorkflow.jsx | 2 +- frontend/src/views/AppCreator.jsx | 18 ++++-- frontend/src/views/Apps.jsx | 2 +- 8 files changed, 103 insertions(+), 32 deletions(-) diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index 47bb2aa5..ba35c635 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -66,7 +66,7 @@ class AppBase: self.logger.info(ret.text) except requests.exceptions.ConnectionError as e: #self.logger.exception("ConnectionError: %s" % e) - self.logger.exception("Expected connectionerror happened") + self.logger.exception("Expected ConnectionError happened") return except TypeError as e: #self.logger.exception(e) @@ -78,7 +78,7 @@ class AppBase: if ret.status_code != 200: self.logger.info(ret.text) except http.client.RemoteDisconnected as e: - self.logger.exception("Expected connectionerror happened") + self.logger.exception("Expected Remotedisconnect happened") return async def cartesian_product(self, L): @@ -432,7 +432,7 @@ class AppBase: content_path = "/api/v1/files/%s/content?execution_id=%s" % (item, full_execution["execution_id"]) ret2 = requests.get("%s%s" % (self.url, content_path), headers=headers) - print("RET2 (file get): %s" % ret2.text) + print("RET2 (file get) done") if ret2.status_code == 200: tmpdata = ret1.json() returndata = { @@ -1721,7 +1721,7 @@ class AppBase: #}) #print("[INFO] APP_SDK DONE: Starting NORMAL execution of function") - print("[INFO] Running execition\n") + print("[INFO] Running normal execution\n") newres = await func(**params) print("\n[INFO] Returned from execution:", newres) if isinstance(newres, tuple): diff --git a/backend/go-app/codegen.go b/backend/go-app/codegen.go index 4b20d2fa..74776e88 100644 --- a/backend/go-app/codegen.go +++ b/backend/go-app/codegen.go @@ -418,11 +418,14 @@ func makePythoncode(swagger *openapi3.Swagger, name, url, method string, paramet fileBalance, ) - if strings.Contains(functionname, "filescan") { - //log.Printf("FUNCTION: %s", data) - log.Println(data) - log.Printf("Queries: %s", queryString) - } + // Use lowercase when checking + /* + if strings.Contains(functionname, "filter") { + //log.Printf("FUNCTION: %s", data) + log.Println(data) + log.Printf("Queries: %s", queryString) + } + */ //log.Printf(data) return functionname, data diff --git a/backend/go-app/docker.go b/backend/go-app/docker.go index 0a0b4bae..776dbea0 100644 --- a/backend/go-app/docker.go +++ b/backend/go-app/docker.go @@ -299,7 +299,7 @@ func buildImage(tags []string, dockerfileFolder string) error { return err } - log.Printf("Tags: %s", tags) + log.Printf("[INFO] Docker Tags: %s", tags) dockerfileSplit := strings.Split(dockerfileFolder, "/") // Create a buffer diff --git a/backend/go-app/main.go b/backend/go-app/main.go index c27de623..230f50ae 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -6360,13 +6360,13 @@ func verifySwagger(resp http.ResponseWriter, request *http.Request) { // FIXME: Check whether it's in use. if user.Id != app.Owner && user.Role != "admin" { - log.Printf("Wrong user (%s) for app %s when verifying swagger", user.Username, app.Name) + log.Printf("[WARNING] Wrong user (%s) for app %s when verifying swagger", user.Username, app.Name) resp.WriteHeader(401) resp.Write([]byte(`{"success": false}`)) return } - log.Printf("EDITING APP WITH ID %s", app.ID) + log.Printf("[INFO] EDITING APP WITH ID %s", app.ID) newmd5 = app.ID } @@ -6455,7 +6455,7 @@ func verifySwagger(resp http.ResponseWriter, request *http.Request) { identifier = strings.Replace(identifier, " ", "-", -1) identifier = strings.Replace(identifier, "_", "-", -1) - log.Printf("Successfully parsed %s. Proceeding to docker container", identifier) + log.Printf("[INFO] Successfully parsed %s. Proceeding to docker container", identifier) // Now that the baseline is setup, we need to make it into a cloud function // 1. Upload the API to datastore for use @@ -7517,7 +7517,7 @@ func runInit(ctx context.Context) { } } - log.Printf("Downloading OpenAPI data for search - EXTRA APPS") + log.Printf("[INFO] Downloading OpenAPI data for search - EXTRA APPS") apis := "https://github.com/frikky/security-openapis" // THis gets memory problems hahah diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index 5a241064..f3103954 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -2062,7 +2062,7 @@ func updateAppAuth(auth AppAuthenticationStorage, workflowId, nodeId string, add // FIXME: Add a way to use !add to remove updateAuth := false if !workflowFound && add { - log.Printf("Adding workflow things to auth!") + log.Printf("[INFO] Adding workflow things to auth!") usageItem := AuthenticationUsage{ WorkflowId: workflowId, Nodes: []string{nodeId}, @@ -2073,14 +2073,14 @@ func updateAppAuth(auth AppAuthenticationStorage, workflowId, nodeId string, add auth.NodeCount += 1 updateAuth = true } else if !nodeFound && add { - log.Printf("Adding node things to auth!") + log.Printf("[INFO] Adding node things to auth!") auth.Usage[workflowIndex].Nodes = append(auth.Usage[workflowIndex].Nodes, nodeId) auth.NodeCount += 1 updateAuth = true } if updateAuth { - log.Printf("Updating auth!") + log.Printf("[INFO] Updating auth!") ctx := context.Background() err := setWorkflowAppAuthDatastore(ctx, auth, auth.Id) if err != nil { @@ -4825,7 +4825,7 @@ func getWorkflowAppConfig(resp http.ResponseWriter, request *http.Request) { return } - log.Printf("Getting app %s (OpenAPI)", fileId) + log.Printf("[INFO] Getting app %s (OpenAPI)", fileId) parsedApi, err := getOpenApiDatastore(ctx, fileId) if err != nil { log.Printf("OpenApi doesn't exist for: %s - err: %s", fileId, err) @@ -6813,18 +6813,76 @@ func getWorkflowExecutions(resp http.ResponseWriter, request *http.Request) { } // Query for the specifci workflowId - q := datastore.NewQuery("workflowexecution").Filter("workflow_id =", fileId).Order("-started_at").Limit(30) + maxAmount := 30 + q := datastore.NewQuery("workflowexecution").Filter("workflow_id =", fileId).Order("-started_at").Limit(maxAmount) var workflowExecutions []WorkflowExecution _, err = dbclient.GetAll(ctx, q, &workflowExecutions) if err != nil { + if strings.Contains(fmt.Sprintf("%s", err), "ResourceExhausted") { - q = datastore.NewQuery("workflowexecution").Filter("workflow_id =", fileId).Order("-started_at").Limit(15) - _, err = dbclient.GetAll(ctx, q, &workflowExecutions) - if err != nil { - log.Printf("Error getting workflowexec (2): %s", err) - resp.WriteHeader(401) - resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "Failed getting all workflowexecutions for %s"}`, fileId))) - return + q = datastore.NewQuery("workflowexecution").Filter("workflow_id =", fileId).Order("-started_at").Limit(1) + /* + _, err = dbclient.GetAll(ctx, q, &workflowExecutions) + if err != nil { + log.Printf("Error getting workflowexec (2): %s", err) + resp.WriteHeader(401) + resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "Failed getting all workflowexecutions for %s"}`, fileId))) + return + } + */ + + cursorStr := "" + for { + it := dbclient.Run(ctx, q) + //_, err = it.Next(&app) + for { + var workflowExecution WorkflowExecution + _, err := it.Next(&workflowExecution) + if err != nil { + break + } + + workflowExecutions = append(workflowExecutions, workflowExecution) + } + + //log.Printf("Len: %d", len(workflowExecutions)) + if len(workflowExecutions) > maxAmount { + break + } + + nextCursor, err := it.Cursor() + if err != iterator.Done && err != nil { + if strings.Contains(fmt.Sprintf("%s", err), "ResourceExhausted") { + //log.Printf("NEXT!") + nextStr := fmt.Sprintf("%s", nextCursor) + if cursorStr == nextStr { + break + } + + cursorStr = nextStr + + continue + } else { + log.Printf("BREAK: %s", err) + break + } + } + + if err != nil { + log.Printf("Cursorerror: %s", err) + break + } else { + //log.Printf("NEXTCURSOR: %s", nextCursor) + nextStr := fmt.Sprintf("%s", nextCursor) + if cursorStr == nextStr { + break + } + + cursorStr = nextStr + q = q.Start(nextCursor) + //cursorStr = nextCursor + //break + } } } else { log.Printf("Error getting workflowexec: %s", err) diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 54eb4504..715f8bb0 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -785,7 +785,7 @@ const AngularWorkflow = (props) => { setSavingState(1) setTimeout(() => { setSavingState(0) - }, 2000); + }, 1500); } }) .catch(error => { diff --git a/frontend/src/views/AppCreator.jsx b/frontend/src/views/AppCreator.jsx index 0026c5c4..645c77d9 100644 --- a/frontend/src/views/AppCreator.jsx +++ b/frontend/src/views/AppCreator.jsx @@ -926,6 +926,7 @@ const AppCreator = (props) => { //console.log(queryitem) } } + //data.paths[item.url][item.method.toLowerCase()].parameters.push(newitem) if (item.paths.length > 0) { for (querykey in item.paths) { @@ -1828,13 +1829,19 @@ const AppCreator = (props) => { }} onBlur={event => { var parsedurl = event.target.value + console.log("URL: ", parsedurl) + if (parsedurl.includes("<") && parsedurl.includes(">")) { + console.log("REPLACE") + parsedurl = parsedurl.replace("<", "{") + parsedurl = parsedurl.replace(">", "}") + } + if (parsedurl.startsWith("PUT ") || parsedurl.startsWith("GET ") ||parsedurl.startsWith("POST ") || parsedurl.startsWith("DELETE ") ||parsedurl.startsWith("PATCH ") || parsedurl.startsWith("CONNECT ")) { const tmp = parsedurl.split(" ") if (tmp.length > 1) { parsedurl = tmp[1] setActionField("url", parsedurl) - setUrlPath(parsedurl) setCurrentActionMethod(tmp[0].toUpperCase()) setActionField("method", tmp[0].toUpperCase()) @@ -1900,12 +1907,15 @@ const AppCreator = (props) => { } // Check URL query && headers - setActionField("url", parsedurl) - setUrlPath(parsedurl) + //setActionField("url", parsedurl) } } } + if (event.target.value !== parsedurl) { + setUrlPath(parsedurl) + setActionField("url", parsedurl) + } //console.log("URL: ", request.url) }} /> @@ -1980,7 +1990,7 @@ const AppCreator = (props) => { + + }
    -
    +
    const loginTextMobile = !isLoggedIn ?
    diff --git a/frontend/src/views/Admin.jsx b/frontend/src/views/Admin.jsx index 305db169..735814cf 100644 --- a/frontend/src/views/Admin.jsx +++ b/frontend/src/views/Admin.jsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { makeStyles } from '@material-ui/styles'; import {Link} from 'react-router-dom'; @@ -25,6 +25,7 @@ import IconButton from '@material-ui/core/IconButton'; import Avatar from '@material-ui/core/Avatar'; import Zoom from '@material-ui/core/Zoom'; import { useAlert } from "react-alert"; +import Dropzone from '../components/Dropzone'; import { Dialog, DialogTitle, DialogActions, DialogContent } from '@material-ui/core'; import { useTheme } from '@material-ui/core/styles'; @@ -33,6 +34,8 @@ import OrgHeader from '../components/OrgHeader' import CircularProgress from '@material-ui/core/CircularProgress'; import EditIcon from '@material-ui/icons/Edit'; +import FileCopyIcon from '@material-ui/icons/FileCopy'; +import PublishIcon from '@material-ui/icons/Publish'; import SelectAllIcon from '@material-ui/icons/SelectAll'; import OpenInNewIcon from '@material-ui/icons/OpenInNew'; import CloudDownloadIcon from '@material-ui/icons/CloudDownload'; @@ -62,6 +65,7 @@ const Admin = (props) => { const { globalUrl, userdata } = props; var upload = "" + var to_be_copied = "" const theme = useTheme(); const classes = useStyles(); const [firstRequest, setFirstRequest] = React.useState(true); @@ -93,6 +97,14 @@ const Admin = (props) => { const [selectedAuthenticationModalOpen, setSelectedAuthenticationModalOpen] = React.useState(false) const [authenticationFields, setAuthenticationFields] = React.useState([]) const [showArchived, setShowArchived] = React.useState(false) + const [isDropzone, setIsDropzone] = React.useState(false); + + useEffect(() => { + if (isDropzone) { + //redirectOpenApi(); + setIsDropzone(false); + } + }, [isDropzone]); const isCloud = window.location.host === "localhost:3002" || window.location.host === "shuffler.io" const getApps = () => { @@ -647,6 +659,67 @@ const Admin = (props) => { }); } + const handleFileUpload = (file_id, file) => { + //console.log("FILE: ", file_id, file) + fetch(`${globalUrl}/api/v1/files/${file_id}/upload`, { + method: 'POST', + credentials: "include", + body: file, + }) + .then((response) => { + if (response.status !== 200) { + console.log("Status not 200 for apps :O!") + return + } + + return response.json() + }) + .then((responseJson) => { + //console.log("RESPONSE: ", responseJson) + //setFiles(responseJson) + }) + .catch(error => { + //alert.error(error.toString()) + }); + } + + const handleCreateFile = (filename, file) => { + const data = { + "filename": filename, + "org_id": selectedOrganization.id, + "workflow_id": "global", + } + + fetch(globalUrl + "/api/v1/files/create", { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + credentials: "include", + body: JSON.stringify(data), + }) + .then((response) => { + if (response.status !== 200) { + console.log("Status not 200 for apps :O!") + return + } + + return response.json() + }) + .then((responseJson) => { + //console.log("RESP: ", responseJson) + if (responseJson.success) { + handleFileUpload(responseJson.id, file) + } else { + alert.error("Failed to upload file ", filename) + } + }) + .catch(error => { + alert.error(error.toString()) + }); + } + const getFiles = () => { fetch(globalUrl + "/api/v1/files", { method: 'GET', @@ -1778,12 +1851,72 @@ const Admin = (props) => {
    : null + const uploadFiles = (files) => { + for (var key in files) { + try { + const filename = files[key].name + var filedata = new FormData() + filedata.append('shuffle_file', files[key]) + + if (typeof(files[key]) === "object") { + handleCreateFile(filename, filedata) + } + + /* + reader.addEventListener('load', (e) => { + var data = e.target.result; + setIsDropzone(false) + console.log(filename) + console.log(data) + console.log(files[key]) + }) + reader.readAsText(files[key]) + */ + } catch (e) { + console.log("Error in dropzone: ", e) + } + } + + getFiles() + } + + const uploadFile = (e) => { + const isDropzone = e.dataTransfer === undefined ? false : e.dataTransfer.files.length > 0; + const files = isDropzone ? e.dataTransfer.files : e.target.files; + + //const reader = new FileReader(); + //alert.info("Starting fileupload") + uploadFiles(files) + } + const filesView = curTab === 5 ? + 1366 ? 1366 : 1200, margin: "auto", padding: 20 }} onDrop={uploadFile}>

    Files

    Files from Workflows. Learn more
    + + upload = ref} onChange={(event) => { + //const file = event.target.value + //const fileObject = URL.createObjectURL(actualFile) + //setFile(fileObject) + //const files = event.target.files[0] + uploadFiles(event.target.files) + }} /> + @@ -1814,6 +1947,9 @@ const Admin = (props) => { + {files === undefined || files === null ? null : files.map((file, index) => { var bgColor = "#27292d" @@ -1833,13 +1969,19 @@ const Admin = (props) => { /> - - - + {file.workflow_id === "global" ? + + - - + : + + + + + + + + } style={{minWidth: 100, maxWidth: 100, overflow: "hidden"}} /> { - { + { downloadFile(file) }}> - + style={{minWidth: 75, maxWidth: 75, overflow: "hidden"}} @@ -1878,11 +2020,31 @@ const Admin = (props) => { */} + { + const elementName = "copy_element_shuffle" + var copyText = document.getElementById(elementName); + if (copyText !== null && copyText !== undefined) { + navigator.clipboard.writeText(file.id) + copyText.select(); + copyText.setSelectionRange(0, 99999); /* For mobile devices */ + + /* Copy the text inside the text field */ + document.execCommand("copy"); + + alert.info(file.id + "copied to clipboard") + } + }}> + + + /> ) })}
    +
    : null const schedulesView = curTab === 4 ? @@ -2445,6 +2607,11 @@ const Admin = (props) => { {editUserModal} {editAuthenticationModal} {data} +
    ) } From ba7248083710c972e4c5b7b8a842a0da10bc644d Mon Sep 17 00:00:00 2001 From: Dima <65077020+dgabriel123@users.noreply.github.com> Date: Fri, 19 Feb 2021 10:46:13 -0500 Subject: [PATCH 29/37] Create CONTRIBUTING.md --- CONTRIBUTING.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..58990c2e --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,17 @@ +## Contributing to Shuffle + +First off, thank you for contributing to [Shuffle](https://shuffler.io/)! Your talents and your contributions are greatly appreciated. + +### Opening a new issue + +If you find a bug or think of an improvement or fix, please open a [new issue](https://github.com/frikky/Shuffle/issues/new). Outline every step necessary to reproduce the bug. Include screenshots and code examples where applicable. The more thorough you are, the better. + +### Working on an issue + +**Shuffle** uses the [GitHub flow](https://guides.github.com/introduction/flow/index.html). All project changes are made through pull requests. + +If you see an issue that you would like to work on, be sure to leave a quick comment asking if the issue is free to be worked on. + +### License + +All contributions are made under the **GNU Affero General Public License v3.0**. [See the license page](https://github.com/frikky/Shuffle/blob/master/LICENSE) for further details. From f663969d5820caab09db5f51fb5f397054d07d54 Mon Sep 17 00:00:00 2001 From: frikky Date: Fri, 19 Feb 2021 18:43:22 +0100 Subject: [PATCH 30/37] #223: Added subflow tracking features --- backend/app_sdk/app_base.py | 8 +++++-- backend/go-app/walkoff.go | 33 ++++++++++++++++++++++---- frontend/src/views/AngularWorkflow.jsx | 24 ++++++++++++------- functions/onprem/orborus/orborus.go | 2 +- functions/onprem/worker/build.sh | 2 +- functions/onprem/worker/worker.go | 15 ++++++++++-- 6 files changed, 65 insertions(+), 19 deletions(-) diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index ba35c635..3c39976a 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -8,6 +8,7 @@ import logging import requests import urllib.parse import http.client +import urllib3 class AppBase: __version__ = None @@ -66,7 +67,7 @@ class AppBase: self.logger.info(ret.text) except requests.exceptions.ConnectionError as e: #self.logger.exception("ConnectionError: %s" % e) - self.logger.exception("Expected ConnectionError happened") + self.logger.info("Expected ConnectionError happened") return except TypeError as e: #self.logger.exception(e) @@ -78,7 +79,10 @@ class AppBase: if ret.status_code != 200: self.logger.info(ret.text) except http.client.RemoteDisconnected as e: - self.logger.exception("Expected Remotedisconnect happened") + self.logger.info("Expected Remotedisconnect happened") + return + except urllib3.exceptions.ProtocolError as e: + self.logger.info("Expected ProtocolError happened") return async def cartesian_product(self, L): diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index f3103954..9efbcd66 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -270,6 +270,7 @@ type WorkflowExecution struct { ExecutionArgument string `json:"execution_argument" datastore:"execution_argument,noindex"` ExecutionId string `json:"execution_id" datastore:"execution_id"` ExecutionSource string `json:"execution_source" datastore:"execution_source"` + ExecutionParent string `json:"execution_parent" datastore:"execution_parent"` ExecutionOrg string `json:"execution_org" datastore:"execution_org"` WorkflowId string `json:"workflow_id" datastore:"workflow_id"` LastNode string `json:"last_node" datastore:"last_node"` @@ -2410,7 +2411,7 @@ func saveWorkflow(resp http.ResponseWriter, request *http.Request) { workflow.Actions = newActions newTriggers := []Trigger{} for _, trigger := range workflow.Triggers { - log.Printf("Trigger %s: %s", trigger.TriggerType, trigger.Status) + log.Printf("[INFO] Trigger %s: %s", trigger.TriggerType, trigger.Status) // Check if it's actually running // FIXME: Do this for other triggers too @@ -3135,12 +3136,34 @@ func handleExecution(id string, workflow Workflow, request *http.Request) (Workf // This one doesn't really matter. log.Printf("[INFO] Running POST execution with body of length %d", len(string(body))) - if body[0] == 34 && body[len(body)-1] == 34 { - body = body[1 : len(body)-1] + + if len(body) >= 4 { + if body[0] == 34 && body[len(body)-1] == 34 { + body = body[1 : len(body)-1] + } + if body[0] == 34 && body[len(body)-1] == 34 { + body = body[1 : len(body)-1] + } } - if body[0] == 34 && body[len(body)-1] == 34 { - body = body[1 : len(body)-1] + + //workflowExecution.ExecutionSource = "default" + sourceWorkflow, sourceWorkflowOk := request.URL.Query()["source_workflow"] + if sourceWorkflowOk { + //log.Printf("Got source workflow %s", sourceWorkflow) + workflowExecution.ExecutionSource = sourceWorkflow[0] + } else { + //log.Printf("Did NOT get source workflow") + } + + sourceExecution, sourceExecutionOk := request.URL.Query()["source_execution"] + if sourceExecutionOk { + log.Printf("Got source execution%s", sourceExecution) + workflowExecution.ExecutionParent = sourceExecution[0] + } else { + //log.Printf("Did NOT get source execution") + } + if len(string(body)) < 50 { //log.Println(body) // String in string diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 715f8bb0..59cbd2ca 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -5175,7 +5175,7 @@ const AngularWorkflow = (props) => { })} } - {/*subworkflow === undefined || subworkflow === null || subworkflow.id === undefined || subworkflow.actions === null || subworkflow.actions === undefined || subworkflow.actions.length === 0 ? null : + {subworkflow === undefined || subworkflow === null || subworkflow.id === undefined || subworkflow.actions === null || subworkflow.actions === undefined || subworkflow.actions.length === 0 ? null : - */} - {workflow.triggers[selectedTriggerIndex].parameters[0].value.length === 0 ? null : Explore selected workflow} + } + {workflow.triggers[selectedTriggerIndex].parameters[0].value.length === 0 ? null : Explore selected workflow}
    @@ -6400,6 +6400,9 @@ const AngularWorkflow = (props) => { return {"email"} trigger.trigger_type === "EMAIL").large_image} style={{width: size, height: size}} /> } + if (execution.execution_parent !== null && execution.execution_parent !== undefined && execution.execution_parent.length > 0) { + return {"parent trigger.trigger_type === "SUBFLOW").large_image} style={{width: size, height: size}} /> + } return ( {execution.execution_source} @@ -6564,7 +6567,7 @@ const AngularWorkflow = (props) => { - +

    Executing Workflow

    @@ -6580,19 +6583,23 @@ const AngularWorkflow = (props) => {
    {executionData.status !== undefined && executionData.status.length > 0 ?
    - Status: {executionData.status} + Status:   {executionData.status}
    : null } {executionData.execution_source !== undefined && executionData.execution_source !== null && executionData.execution_source.length > 0 && executionData.execution_source !== "default" ?
    - Source: {executionData.execution_source} + Source:   {executionData.execution_parent !== null && executionData.execution_parent !== undefined && executionData.execution_parent.length > 0 ? + Parent Workflow + : + executionData.execution_source + }
    : null } {executionData.started_at !== undefined ?
    - Started: {new Date(executionData.started_at*1000).toISOString()} + Started:  {new Date(executionData.started_at*1000).toISOString()}
    : null } @@ -6602,10 +6609,11 @@ const AngularWorkflow = (props) => {
    : null } +
    {executionData.execution_argument !== undefined && executionData.execution_argument.length > 0 ? parsedExecutionArgument() : null } - + {executionData.results !== undefined && executionData.results !== null && executionData.results.length > 1 && executionData.results.find(result => result.status === "SKIPPED" || result.status === "FAILURE") ? Date: Fri, 19 Feb 2021 20:07:04 +0100 Subject: [PATCH 31/37] #223: Added subflow in same workflow --- backend/app_sdk/app_base.py | 10 ++-- backend/go-app/walkoff.go | 53 +++++++++++++++++--- frontend/src/views/AngularWorkflow.jsx | 69 ++++++++++++++++++++------ functions/onprem/worker/worker.go | 69 +++++++++++++------------- 4 files changed, 138 insertions(+), 63 deletions(-) diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index 3c39976a..8c43637d 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -298,7 +298,7 @@ class AppBase: newparams[key] = value[0] has_loop = True else: - print("Key %s is NOT a list within a list: %s" % (key, value)) + print("Key %s is NOT a list within a list" % (key)) newparams[key] = value @@ -1054,7 +1054,7 @@ class AppBase: except KeyError as error: print(f"KeyError in JSON: {error}") - print(f"[INFO] After first trycatch. Baseresult: ", baseresult) + print(f"[INFO] After first trycatch. Baseresult")#, baseresult) # 2. Find the JSON data if len(baseresult) == 0: @@ -1067,7 +1067,7 @@ class AppBase: baseresult = baseresult.replace(" True,", " true,") baseresult = baseresult.replace(" False", " false,") - print("[INFO] After third parser return - Formatted: ", baseresult) + print("[INFO] After third parser return - Formatted")#, baseresult) basejson = {} try: basejson = json.loads(baseresult) @@ -1570,9 +1570,9 @@ class AppBase: multi_parameters[parameter["name"]] = resultarray multi_execution_lists.append(new_replacement) - print("MULTI finished: %s" % json_replacement) + #print("MULTI finished: %s" % json_replacement) else: - print("(2) Pre replacement: %s" % actualitem) + print("(2) Pre replacement. ") #% actualitem) # This is here to handle for loops within variables.. kindof # 1. Find the length of the longest array # 2. Build an array with the base values based on parameter["value"] diff --git a/backend/go-app/walkoff.go b/backend/go-app/walkoff.go index 9efbcd66..7fab3fc6 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -1163,6 +1163,7 @@ func runWorkflowExecutionTransaction(ctx context.Context, attempts int64, workfl log.Printf("[WARNING] Actionresult is %s for node %s in %s. Continuing anyway because of workflow configuration.", actionResult.Status, actionResult.Action.ID, workflowExecution.ExecutionId) // Finds ALL childnodes to set them to SKIPPED childNodes = findChildNodes(*workflowExecution, actionResult.Action.ID) + // Remove duplicates //log.Printf("CHILD NODES: %d", len(childNodes)) for _, nodeId := range childNodes { @@ -1223,6 +1224,7 @@ func runWorkflowExecutionTransaction(ctx context.Context, attempts int64, workfl Name: curAction.Name, ID: curAction.ID, } + newResult := ActionResult{ Action: newAction, ExecutionId: actionResult.ExecutionId, @@ -3127,6 +3129,7 @@ func handleExecution(id string, workflow Workflow, request *http.Request) (Workf } makeNew := true + start, startok := request.URL.Query()["start"] if request.Method == "POST" { body, err := ioutil.ReadAll(request.Body) if err != nil { @@ -3158,7 +3161,7 @@ func handleExecution(id string, workflow Workflow, request *http.Request) (Workf sourceExecution, sourceExecutionOk := request.URL.Query()["source_execution"] if sourceExecutionOk { - log.Printf("Got source execution%s", sourceExecution) + //log.Printf("[INFO] Got source execution%s", sourceExecution) workflowExecution.ExecutionParent = sourceExecution[0] } else { //log.Printf("Did NOT get source execution") @@ -3226,12 +3229,11 @@ func handleExecution(id string, workflow Workflow, request *http.Request) (Workf // Check for parameters of start and ExecutionId // This is mostly used for user input trigger - start, startok := request.URL.Query()["start"] answer, answerok := request.URL.Query()["answer"] referenceId, referenceok := request.URL.Query()["reference_execution"] if answerok && referenceok { // If answer is false, reference execution with result - log.Printf("Answer is OK AND reference is OK!") + log.Printf("[INFO] Answer is OK AND reference is OK!") if answer[0] == "false" { log.Printf("Should update reference and return, no need for further execution!") @@ -3302,12 +3304,12 @@ func handleExecution(id string, workflow Workflow, request *http.Request) (Workf } // Don't override workflow defaults - if startok { - log.Printf("Setting start to %s based on query!", start[0]) - //workflowExecution.Workflow.Start = start[0] - workflowExecution.Start = start[0] - } + } + if startok { + //log.Printf("\n\n[INFO] Setting start to %s based on query!\n\n", start[0]) + //workflowExecution.Workflow.Start = start[0] + workflowExecution.Start = start[0] } // FIXME - regex uuid, and check if already exists? @@ -3495,7 +3497,42 @@ func handleExecution(id string, workflow Workflow, request *http.Request) (Workf break } } + + if trigger.AppName == "User Input" || trigger.AppName == "Shuffle Workflow" { + found := false + for _, node := range childNodes { + if node == trigger.ID { + found = true + break + } + } + + if !found { + log.Printf("SHOULD SET TRIGGER %s TO BE SKIPPED", trigger.ID) + + curaction := Action{ + AppName: trigger.AppName, + AppVersion: trigger.AppVersion, + Label: trigger.Label, + Name: trigger.Name, + ID: trigger.ID, + } + + defaultResults = append(defaultResults, ActionResult{ + Action: curaction, + ExecutionId: workflowExecution.ExecutionId, + Authorization: workflowExecution.Authorization, + Result: "Skipped because it's not under the startnode", + StartedAt: 0, + CompletedAt: 0, + Status: "SKIPPED", + }) + } else { + log.Printf("SHOULD KEEP TRIGGER %s", trigger.ID) + } + } } + //childNodes := findChildNodes(workflowExecution, workflowExecution.Start) if !startFound { log.Printf("Startnode %s doesn't exist!", workflowExecution.Start) diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 59cbd2ca..2fec90dd 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -259,6 +259,7 @@ const AngularWorkflow = (props) => { setWorkflows(responseJson) if (trigger_index > -1) { + var outersub = {} const trigger = workflow.triggers[trigger_index] if (trigger.parameters.length >= 3) { for (var key in trigger.parameters) { @@ -267,8 +268,23 @@ const AngularWorkflow = (props) => { const sub = responseJson.find(data => data.id === param.value) if (sub !== undefined && subworkflow.id !== sub.id) { setSubworkflow(sub) + outersub = sub } } + + if (param.name === "startnode" && outersub.id !== undefined) { + console.log("SHOULD SET STARTNODE: ", outersub) + const innernode = outersub.actions.find(action => action.id === param.value) + console.log("FOUND NODE: ", innernode) + if (innernode !== undefined && subworkflowStartnode.id !== innernode.id) { + setSubworkflowStartnode(innernode) + } + /* + const sub = responseJson.find(data => data.id === param.value) + setSubworkflow(sub) + } + */ + } } } } @@ -391,7 +407,6 @@ const AngularWorkflow = (props) => { //console.log("SHOW EXECUTION ", tmpView) const execution = responseJson.find(data => data.execution_id === tmpView) if (execution !== null && execution !== undefined) { - console.log("EXEC: ", execution) setExecutionData(execution) setExecutionModalView(1) } @@ -5098,6 +5113,7 @@ const AngularWorkflow = (props) => { workflow.triggers[selectedTriggerIndex].parameters[0] = {"name": "workflow", "value": ""} workflow.triggers[selectedTriggerIndex].parameters[1] = {"name": "argument", "value": ""} workflow.triggers[selectedTriggerIndex].parameters[2] = {"name": "user_apikey", "value": ""} + workflow.triggers[selectedTriggerIndex].parameters[3] = {"name": "startnode", "value": ""} console.log("SETTINGS: ", userSettings) if (userSettings !== undefined && userSettings !== null && userSettings.apikey !== null && userSettings.apikey !== undefined && userSettings.apikey.length > 0) { @@ -5159,22 +5175,41 @@ const AngularWorkflow = (props) => { workflow.triggers[selectedTriggerIndex].parameters[0].value = e.target.value.id setWorkflow(workflow) setSubworkflowStartnode(e.target.value.start) + + // Sets the startnode + if (e.target.value.id !== workflow.id) { + const startnode = e.target.value.actions.find(action => action.id === e.target.value.start) + if (startnode !== undefined && startnode !== null) { + setSubworkflowStartnode(startnode) + } + console.log("STARTNODE: ", startnode) + } }} style={{backgroundColor: inputColor, color: "white", height: "50px"}} > {workflows.map((data, index) => { + /* if (data.id === workflow.id) { return null } + */ return ( - + {data.name} ) })} } + {workflow.triggers[selectedTriggerIndex].parameters[0].value.length === 0 ? null : Explore selected workflow} + +
    +
    +
    + Select the Startnode +
    +
    {subworkflow === undefined || subworkflow === null || subworkflow.id === undefined || subworkflow.actions === null || subworkflow.actions === undefined || subworkflow.actions.length === 0 ? null : } - {workflow.triggers[selectedTriggerIndex].parameters[0].value.length === 0 ? null : Explore selected workflow}
    diff --git a/functions/onprem/worker/worker.go b/functions/onprem/worker/worker.go index 123b2631..e09ca874 100644 --- a/functions/onprem/worker/worker.go +++ b/functions/onprem/worker/worker.go @@ -1114,16 +1114,16 @@ func handleExecutionResult(workflowExecution WorkflowExecution) { if isSkipped { //log.Printf("Skipping %s as all parents are done", item.Action.Label) if !arrayContains(visited, item.Action.ID) { - log.Printf("Adding visited (1): %s", item.Action.Label) + log.Printf("[INFO] Adding visited (1): %s", item.Action.Label) visited = append(visited, item.Action.ID) } } else { - log.Printf("Continuing %s as all parents are NOT done", item.Action.Label) + log.Printf("[INFO] Continuing %s as all parents are NOT done", item.Action.Label) appendActions = append(appendActions, item.Action.ID) } } else { if item.Status == "FINISHED" { - log.Printf("Adding visited (2): %s", item.Action.Label) + log.Printf("[INFO] Adding visited (2): %s", item.Action.Label) visited = append(visited, item.Action.ID) } } @@ -1149,7 +1149,7 @@ func handleExecutionResult(workflowExecution WorkflowExecution) { // care if it gets stuck in a loop. // FIXME: Force killing a worker should result in a notification somewhere if len(nextActions) == 0 { - log.Printf("No next action. Finished? Result vs Actions: %d - %d", len(workflowExecution.Results), len(workflowExecution.Workflow.Actions)) + log.Printf("[INFO] No next action. Finished? Result vs Actions: %d - %d", len(workflowExecution.Results), len(workflowExecution.Workflow.Actions)) exit := true for _, item := range workflowExecution.Results { if item.Status == "EXECUTING" { @@ -1235,6 +1235,7 @@ func handleExecutionResult(workflowExecution WorkflowExecution) { // IF NOT VISITED && IN toExecuteOnPrem // SKIP if it's not onprem toRemove := []int{} + log.Printf("\n\nNEXTACTIONS: %#v\n\n", nextActions) for index, nextAction := range nextActions { action := getAction(workflowExecution, nextAction, environment) // check visited and onprem @@ -1377,7 +1378,7 @@ func handleExecutionResult(workflowExecution WorkflowExecution) { } if continueOuter { - log.Printf("Parents of %s aren't finished: %s", nextAction, strings.Join(parents[nextAction], ", ")) + log.Printf("[INFO] Parents of %s aren't finished: %s", nextAction, strings.Join(parents[nextAction], ", ")) //for _, tmpaction := range parents[nextAction] { // action := getAction(workflowExecution, tmpaction) // _ = action @@ -1390,10 +1391,10 @@ func handleExecutionResult(workflowExecution WorkflowExecution) { // get action status actionResult := getResult(workflowExecution, nextAction) if actionResult.Action.ID == action.ID { - log.Printf("%s already has status %s.", action.ID, actionResult.Status) + log.Printf("[INFO] %s already has status %s.", action.ID, actionResult.Status) continue } else { - log.Printf("%s:%s has no status result yet. Should execute.", action.Name, action.ID) + log.Printf("[INFO] %s:%s has no status result yet. Should execute.", action.Name, action.ID) } appname := action.AppName @@ -1445,7 +1446,7 @@ func handleExecutionResult(workflowExecution WorkflowExecution) { } // marshal action and put it in there rofl - log.Printf("Time to execute %s (%s) with app %s:%s, function %s, env %s with %d parameters.", action.ID, action.Label, action.AppName, action.AppVersion, action.Name, action.Environment, len(action.Parameters)) + log.Printf("[INFO] Time to execute %s (%s) with app %s:%s, function %s, env %s with %d parameters.", action.ID, action.Label, action.AppName, action.AppVersion, action.Name, action.Environment, len(action.Parameters)) actionData, err := json.Marshal(action) if err != nil { @@ -1468,7 +1469,7 @@ func handleExecutionResult(workflowExecution WorkflowExecution) { // Sending full execution so that it won't have to load in every app // This might be an issue if they can read environments, but that's alright // if everything is generated during execution - log.Printf("Deployed with CALLBACK_URL %s and BASE_URL %s", appCallbackUrl, baseUrl) + log.Printf("[INFO] Deployed with CALLBACK_URL %s and BASE_URL %s", appCallbackUrl, baseUrl) env := []string{ fmt.Sprintf("ACTION=%s", string(actionData)), fmt.Sprintf("EXECUTIONID=%s", workflowExecution.ExecutionId), @@ -1593,7 +1594,7 @@ func handleExecutionResult(workflowExecution WorkflowExecution) { } } - log.Printf("Adding visited (3): %s", action.Label) + log.Printf("[INFO] Adding visited (3): %s", action.Label) visited = append(visited, action.ID) executed = append(executed, action.ID) @@ -1636,14 +1637,22 @@ func handleExecutionResult(workflowExecution WorkflowExecution) { func executionInit(workflowExecution WorkflowExecution) error { parents = map[string][]string{} children = map[string][]string{} - triggersHandled := []string{} startAction = workflowExecution.Start + log.Printf("[INFO] STARTACTION: %s", startAction) if len(startAction) == 0 { - log.Printf("Didn't find execution start action. Setting it to workflow start action.") + log.Printf("[INFO] Didn't find execution start action. Setting it to workflow start action.") startAction = workflowExecution.Workflow.Start } + // Setting up extra counter + for _, trigger := range workflowExecution.Workflow.Triggers { + //log.Printf("Appname trigger (0): %s", trigger.AppName) + if trigger.AppName == "User Input" || trigger.AppName == "Shuffle Workflow" { + extra += 1 + } + } + nextActions = append(nextActions, startAction) for _, branch := range workflowExecution.Workflow.Branches { // Check what the parent is first. If it's trigger - skip @@ -1662,27 +1671,15 @@ func executionInit(workflowExecution WorkflowExecution) error { for _, trigger := range workflowExecution.Workflow.Triggers { //log.Printf("Appname trigger (0): %s", trigger.AppName) if trigger.AppName == "User Input" || trigger.AppName == "Shuffle Workflow" { - //log.Printf("%s is a special trigger. Checking where.", trigger.AppName) - - found := false - for _, check := range triggersHandled { - if check == trigger.ID { - found = true - break - } - } - - if !found { - extra += 1 - } else { - triggersHandled = append(triggersHandled, trigger.ID) + if branch.SourceID == "c9560766-3f85-4589-8324-311acd6be820" { + log.Printf("BRANCH: %#v", branch) } if trigger.ID == branch.SourceID { - log.Printf("Trigger %s is the source!", trigger.AppName) + log.Printf("[INFO] Trigger %s is the source!", trigger.AppName) sourceFound = true } else if trigger.ID == branch.DestinationID { - log.Printf("Trigger %s is the destination!", trigger.AppName) + log.Printf("[INFO] Trigger %s is the destination!", trigger.AppName) destinationFound = true } } @@ -1691,17 +1688,21 @@ func executionInit(workflowExecution WorkflowExecution) error { if sourceFound { parents[branch.DestinationID] = append(parents[branch.DestinationID], branch.SourceID) } else { - log.Printf("ID %s was not found in actions! Skipping parent. (TRIGGER?)", branch.SourceID) + log.Printf("[INFO] ID %s was not found in actions! Skipping parent. (TRIGGER?)", branch.SourceID) } if destinationFound { children[branch.SourceID] = append(children[branch.SourceID], branch.DestinationID) } else { - log.Printf("ID %s was not found in actions! Skipping child. (TRIGGER?)", branch.SourceID) + log.Printf("[INFO] ID %s was not found in actions! Skipping child. (TRIGGER?)", branch.SourceID) } } - log.Printf("Actions: %d + Special Triggers: %d", len(workflowExecution.Workflow.Actions), extra) + log.Printf("\n\n\n[INFO] CHILDREN FOUND: %#v", children) + log.Printf("[INFO] PARENTS FOUND: %#v", parents) + log.Printf("[INFO] NEXT ACTIONS: %#v\n\n", nextActions) + + log.Printf("[INFO] Actions: %d + Special Triggers: %d", len(workflowExecution.Workflow.Actions), extra) onpremApps := []string{} toExecuteOnprem := []string{} for _, action := range workflowExecution.Workflow.Actions { @@ -1730,7 +1731,7 @@ func executionInit(workflowExecution WorkflowExecution) error { pullOptions := types.ImagePullOptions{} _ = pullOptions for _, image := range onpremApps { - log.Printf("Image: %s", image) + log.Printf("[INFO] Image: %s", image) // Kind of gambling that the image exists. if strings.Contains(image, " ") { image = strings.ReplaceAll(image, " ", "-") @@ -2498,7 +2499,7 @@ func getWorkflowExecution(ctx context.Context, id string) (*WorkflowExecution, e } func validateFinished(workflowExecution WorkflowExecution) { - log.Printf("Status: %s, Actions: %d, Extra: %d, Results: %d\n", workflowExecution.Status, len(workflowExecution.Workflow.Actions), extra, len(workflowExecution.Results)) + log.Printf("[INFO] Status: %s, Actions: %d, Extra: %d, Results: %d\n", workflowExecution.Status, len(workflowExecution.Workflow.Actions), extra, len(workflowExecution.Results)) //if len(workflowExecution.Results) == len(workflowExecution.Workflow.Actions)+extra { if (len(environments) == 1 && requestsSent == 0 && len(workflowExecution.Results) >= 1) || (len(workflowExecution.Results) >= len(workflowExecution.Workflow.Actions) && len(workflowExecution.Workflow.Actions) > 0) { @@ -2703,7 +2704,7 @@ func main() { } else { authorization = os.Getenv("AUTHORIZATION") executionId = os.Getenv("EXECUTIONID") - log.Printf("Running normal execution with auth %s and ID %s", authorization, executionId) + log.Printf("[INFO] Running normal execution with auth %s and ID %s", authorization, executionId) } if len(authorization) == 0 { From 04e8a22a717f4d70ca0966486038e4165463df0d Mon Sep 17 00:00:00 2001 From: frikky Date: Sun, 21 Feb 2021 17:00:23 +0100 Subject: [PATCH 32/37] #247: Fixed Worker return and app SDK bug --- backend/app_sdk/app_base.py | 13 +++-- backend/app_sdk/build.sh | 2 +- backend/go-app/walkoff.go | 5 ++ frontend/src/views/Admin.jsx | 1 + frontend/src/views/AngularWorkflow.jsx | 78 +++++++++++++++++--------- functions/onprem/worker/worker.go | 26 ++++++--- 6 files changed, 83 insertions(+), 42 deletions(-) diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index 8c43637d..56a320c6 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -541,8 +541,9 @@ class AppBase: "status": "EXECUTING" } + # Simple validation of parameters in general try: - print(action["parameters"]) + tmp_parameters = action["parameters"] except KeyError: action["parameters"] = [] except TypeError: @@ -1514,11 +1515,13 @@ class AppBase: if len(json_replacement) > minlength: minlength = len(json_replacement) + + print("PRE new_replacement") # FIXME: Only do this IF they want to loop new_replacement = [] for i in range(len(json_replacement)): - if isinstance(json_replacement[i], dict) or isinstance(json_replacement[i], dict): + if isinstance(json_replacement[i], dict) or isinstance(json_replacement[i], list): tmp_replacer = json.dumps(json_replacement[i]) newvalue = tmpitem.replace(actualitem[0][0], tmp_replacer, 1) else: @@ -1727,7 +1730,7 @@ class AppBase: #print("[INFO] APP_SDK DONE: Starting NORMAL execution of function") print("[INFO] Running normal execution\n") newres = await func(**params) - print("\n[INFO] Returned from execution:", newres) + print("\n[INFO] Returned from execution with datalength!")#, newres) if isinstance(newres, tuple): print("[INFO] Handling return as tuple") # Handles files. @@ -1753,7 +1756,7 @@ class AppBase: result = json.dumps(tmp_result) elif isinstance(newres, str): - print("[INFO] Handling return as string") + print("[INFO] Handling return as string of length %d" % len(newres)) result += newres else: try: @@ -1762,7 +1765,7 @@ class AppBase: result += "Failed autocasting. Can't handle %s type from function. Must be string" % type(newres) print("Can't handle type %s value from function" % (type(newres))) - print("[INFO] POST NEWRES RESULT: ", result) + print("[INFO] POST NEWRES RESULT!")#, result) else: #print("[INFO] APP_SDK DONE: Starting MULTI execution (length: %d) with values %s" % (minlength, multi_parameters)) # 1. Use number of executions based on the arrays being similar diff --git a/backend/app_sdk/build.sh b/backend/app_sdk/build.sh index 96204598..76c9cee3 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.56 +VERSION=0.8.57 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/walkoff.go b/backend/go-app/walkoff.go index 7fab3fc6..f49cba9c 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -6163,6 +6163,11 @@ func loadSpecificApps(resp http.ResponseWriter, request *http.Request) { return } + cacheKey := fmt.Sprintf("workflowapps-sorted-100") + requestCache.Delete(cacheKey) + cacheKey = fmt.Sprintf("workflowapps-sorted-500") + requestCache.Delete(cacheKey) + resp.WriteHeader(200) resp.Write([]byte(fmt.Sprintf(`{"success": true}`))) } diff --git a/frontend/src/views/Admin.jsx b/frontend/src/views/Admin.jsx index 735814cf..62f926a4 100644 --- a/frontend/src/views/Admin.jsx +++ b/frontend/src/views/Admin.jsx @@ -1122,6 +1122,7 @@ const Admin = (props) => { Edit authentication for {selectedAuthentication.app.name} ({selectedAuthentication.label}) {selectedAuthentication.fields.map((data, index) => { + console.log("DATA: ", data, selectedAuthentication) return (
    {data.key} diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 2fec90dd..eb88c253 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -1966,7 +1966,7 @@ const AngularWorkflow = (props) => { return (
    - What are WORKFLOW variables? + What are WORKFLOW variables? {workflow.workflow_variables === null ? null : workflow.workflow_variables.map(variable=> { return ( @@ -2033,7 +2033,7 @@ const AngularWorkflow = (props) => { }}>New workflow variable
    - What are EXECUTION variables? + What are EXECUTION variables? {workflow.execution_variables === null || workflow.execution_variables === undefined ? null : workflow.execution_variables.map(variable=> { return ( @@ -2254,9 +2254,9 @@ const AngularWorkflow = (props) => {
    {triggers.map((trigger, index) => { var imageline = trigger.large_image.length === 0 ? - + : - + const color = trigger.is_valid ? "green" : "orange" return( @@ -3935,7 +3935,7 @@ const AngularWorkflow = (props) => { - What are actions? + What are actions? {selectedAction.errors !== null && selectedAction.errors.length > 0 ?
    Errors: {selectedAction.errors.join("\n")} @@ -3969,11 +3969,13 @@ const AngularWorkflow = (props) => {
    Authenticate {selectedApp.name}: + +
    : null} @@ -4559,7 +4561,7 @@ const AngularWorkflow = (props) => { }} > - Conditions can't be used for loops [ .# ] Learn more + Conditions can't be used for loops [ .# ] Learn more Condition @@ -4568,6 +4570,7 @@ const AngularWorkflow = (props) => {
    + +
    @@ -4811,7 +4815,7 @@ const AngularWorkflow = (props) => {

    Branch: Conditions - {selectedEdgeIndex}

    - What are conditions? + What are conditions?
    @@ -5035,7 +5039,7 @@ const AngularWorkflow = (props) => {

    {selectedTrigger.app_name}: {selectedTrigger.status}

    - What are email triggers? + What are email triggers?
    @@ -5126,7 +5130,7 @@ const AngularWorkflow = (props) => {

    {selectedTrigger.app_name}

    - What are subflows? + What are subflows?
    @@ -5202,7 +5206,7 @@ const AngularWorkflow = (props) => { })} } - {workflow.triggers[selectedTriggerIndex].parameters[0].value.length === 0 ? null : Explore selected workflow} + {workflow.triggers[selectedTriggerIndex].parameters[0].value.length === 0 ? null : Explore selected workflow}
    @@ -5329,7 +5333,7 @@ const AngularWorkflow = (props) => {

    {selectedTrigger.app_name}: {selectedTrigger.status}

    - What are webhooks? + What are webhooks?
    @@ -5704,7 +5708,7 @@ const AngularWorkflow = (props) => {

    {selectedTrigger.app_name}: {selectedTrigger.status}

    - What is the user input trigger? + What is the user input trigger?
    @@ -5882,7 +5886,7 @@ const AngularWorkflow = (props) => {

    {selectedTrigger.app_name}: {selectedTrigger.status}

    - What are schedules? + What are schedules?
    @@ -6139,12 +6143,14 @@ const AngularWorkflow = (props) => {
    + +
    ) @@ -6195,12 +6201,14 @@ const AngularWorkflow = (props) => {
    + +
    ) @@ -6212,19 +6220,23 @@ const AngularWorkflow = (props) => { const boxSize = 100 const executionButton = executionRunning ? + + : - + + + return( @@ -6247,29 +6259,37 @@ const AngularWorkflow = (props) => { /> - + + + - + + + + + + + {/* */} @@ -6608,6 +6628,7 @@ const AngularWorkflow = (props) => {

    Executing Workflow

    + +
    {executionData.status !== undefined && executionData.status.length > 0 ? @@ -6627,7 +6649,7 @@ const AngularWorkflow = (props) => { {executionData.execution_source !== undefined && executionData.execution_source !== null && executionData.execution_source.length > 0 && executionData.execution_source !== "default" ?
    Source:   {executionData.execution_parent !== null && executionData.execution_parent !== undefined && executionData.execution_parent.length > 0 ? - Parent Workflow + Parent Workflow : executionData.execution_source } @@ -6744,7 +6766,7 @@ const AngularWorkflow = (props) => { {data.action.app_name === "shuffle-subflow" ? {validate.valid && data.action.parameters !== undefined && data.action.parameters !== null ? - See subflow execution + See subflow execution : "TBD: Load subexecution result for" } @@ -6989,7 +7011,7 @@ const AngularWorkflow = (props) => { Execution Variable - Execution Variables are TEMPORARY variables that you can ony be set and used during execution. Learn more here + Execution Variables are TEMPORARY variables that you can ony be set and used during execution. Learn more here setNewVariableName(event.target.value)} color="primary" @@ -7264,7 +7286,7 @@ const AngularWorkflow = (props) => { return (
    - What is this?
    + What is this?
    These are required fields for authenticating with {selectedApp.name}
    Name - what is this used for? diff --git a/functions/onprem/worker/worker.go b/functions/onprem/worker/worker.go index e09ca874..2773c459 100644 --- a/functions/onprem/worker/worker.go +++ b/functions/onprem/worker/worker.go @@ -1235,7 +1235,7 @@ func handleExecutionResult(workflowExecution WorkflowExecution) { // IF NOT VISITED && IN toExecuteOnPrem // SKIP if it's not onprem toRemove := []int{} - log.Printf("\n\nNEXTACTIONS: %#v\n\n", nextActions) + //log.Printf("\n\nNEXTACTIONS: %#v\n\n", nextActions) for index, nextAction := range nextActions { action := getAction(workflowExecution, nextAction, environment) // check visited and onprem @@ -1698,9 +1698,11 @@ func executionInit(workflowExecution WorkflowExecution) error { } } - log.Printf("\n\n\n[INFO] CHILDREN FOUND: %#v", children) - log.Printf("[INFO] PARENTS FOUND: %#v", parents) - log.Printf("[INFO] NEXT ACTIONS: %#v\n\n", nextActions) + /* + log.Printf("\n\n\n[INFO] CHILDREN FOUND: %#v", children) + log.Printf("[INFO] PARENTS FOUND: %#v", parents) + log.Printf("[INFO] NEXT ACTIONS: %#v\n\n", nextActions) + */ log.Printf("[INFO] Actions: %d + Special Triggers: %d", len(workflowExecution.Workflow.Actions), extra) onpremApps := []string{} @@ -2064,7 +2066,10 @@ func handleWorkflowQueue(resp http.ResponseWriter, request *http.Request) { // return //} + resp.WriteHeader(200) + resp.Write([]byte(fmt.Sprintf(`{"success": true}`))) runWorkflowExecutionTransaction(ctx, 0, workflowExecution.ExecutionId, actionResult, resp) + } func findChildNodes(workflowExecution WorkflowExecution, nodeId string) []string { @@ -2473,15 +2478,20 @@ func runWorkflowExecutionTransaction(ctx context.Context, attempts int64, workfl return } } else { - log.Printf("Skipping setexec with status %s", workflowExecution.Status) + log.Printf("[INFO] Skipping setexec with status %s", workflowExecution.Status) + + // Just in case. Should MAYBE validate finishing another time as well. + // This fixes issues with e.g. Action -> Trigger -> Action. + handleExecutionResult(*workflowExecution) + //validateFinished(workflowExecution) } //if newExecutions && len(nextActions) > 0 { // handleExecutionResult(*workflowExecution) //} - resp.WriteHeader(200) - resp.Write([]byte(fmt.Sprintf(`{"success": true}`))) + //resp.WriteHeader(200) + //resp.Write([]byte(fmt.Sprintf(`{"success": true}`))) } func getWorkflowExecution(ctx context.Context, id string) (*WorkflowExecution, error) { @@ -2532,7 +2542,7 @@ func validateFinished(workflowExecution WorkflowExecution) { } body, err := ioutil.ReadAll(newresp.Body) - log.Printf("BACKEND STATUS: %d", newresp.StatusCode) + log.Printf("[INFO] BACKEND STATUS: %d", newresp.StatusCode) if err != nil { log.Printf("[ERROR] Failed reading body: %s", err) } else { From 096bfbca739edf5a5be069c21a381e745024c38c Mon Sep 17 00:00:00 2001 From: frikky Date: Sun, 21 Feb 2021 17:42:02 +0100 Subject: [PATCH 33/37] #266: Fixed key:value store for options with || --- backend/app_sdk/app_base.py | 14 ++++++++++ frontend/src/views/AngularWorkflow.jsx | 36 ++++++++++++++++---------- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/backend/app_sdk/app_base.py b/backend/app_sdk/app_base.py index 56a320c6..e428da9f 100644 --- a/backend/app_sdk/app_base.py +++ b/backend/app_sdk/app_base.py @@ -1423,6 +1423,20 @@ class AppBase: for parameter in action["parameters"]: counter += 1 + # Hack for key:value in options using || + try: + if parameter["options"] != None and len(parameter["options"]) > 0: + #print(f'OPTIONS: {parameter["options"]}') + #print(f'OPTIONS VAL: {parameter}') + if "||" in parameter["value"]: + splitvalue = parameter["value"].split("||") + if len(splitvalue) > 1: + print(f'[INFO] Parsed split || options of actions["parameters"]["name"]') + action["parameters"][counter]["value"] = splitvalue[1] + + except (IndexError, KeyError, TypeError) as e: + print("Options err: {e}") + if parameter["name"] == "body": bodyindex = counter #print("PARAM: %s" % parameter) diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index eb88c253..79979409 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -3355,11 +3355,19 @@ const AngularWorkflow = (props) => { }} style={{backgroundColor: surfaceColor, color: "white", height: "50px"}} > - {selectedActionParameters[count].options.map(data => ( - - {data} - - ))} + {selectedActionParameters[count].options.map((data, index) => { + const split_data = data.split("||") + var viewed_data = data + if (split_data.length > 1) { + viewed_data = split_data[0] + } + + return ( + + {viewed_data} + + ) + })} } else if (data.variant === "STATIC_VALUE") { @@ -6628,15 +6636,15 @@ const AngularWorkflow = (props) => {

    Executing Workflow

    - - + +
    From 0bd92d0fc76bf2105645ffcffc6d69fec205d79f Mon Sep 17 00:00:00 2001 From: frikky Date: Sun, 21 Feb 2021 19:01:06 +0100 Subject: [PATCH 34/37] Updated everything to 0.8.60 --- .env | 2 +- backend/app_sdk/build.sh | 2 +- backend/go-app/walkoff.go | 2 +- docker-compose.yml | 10 +++++----- functions/onprem/orborus/build.sh | 2 +- functions/onprem/orborus/orborus.go | 9 +++++---- functions/onprem/worker/build.sh | 2 +- functions/onprem/worker/worker.go | 2 +- 8 files changed, 16 insertions(+), 15 deletions(-) diff --git a/.env b/.env index bd8738f6..3bb32c35 100644 --- a/.env +++ b/.env @@ -39,7 +39,7 @@ SHUFFLE_PASS_WORKER_PROXY=TRUE SHUFFLE_BASE_IMAGE_REGISTRY=ghcr.io SHUFFLE_BASE_IMAGE_NAME=frikky -SHUFFLE_BASE_IMAGE_TAG_SUFFIX="-0.8.5" +SHUFFLE_BASE_IMAGE_TAG_SUFFIX="-0.8.60" # Used for auto-cleanup of containers. REALLY important at scale. SHUFFLE_CONTAINER_AUTO_CLEANUP=false diff --git a/backend/app_sdk/build.sh b/backend/app_sdk/build.sh index 76c9cee3..25fa59d6 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.57 +VERSION=0.8.60 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/walkoff.go b/backend/go-app/walkoff.go index f49cba9c..5fbdb3e6 100644 --- a/backend/go-app/walkoff.go +++ b/backend/go-app/walkoff.go @@ -3508,7 +3508,7 @@ func handleExecution(id string, workflow Workflow, request *http.Request) (Workf } if !found { - log.Printf("SHOULD SET TRIGGER %s TO BE SKIPPED", trigger.ID) + //log.Printf("SHOULD SET TRIGGER %s TO BE SKIPPED", trigger.ID) curaction := Action{ AppName: trigger.AppName, diff --git a/docker-compose.yml b/docker-compose.yml index a3bc7321..67fe27a6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: frontend: #build: ./frontend - image: ghcr.io/frikky/shuffle-frontend:0.8.57 + image: ghcr.io/frikky/shuffle-frontend:0.8.60 container_name: shuffle-frontend hostname: shuffle-frontend ports: @@ -17,7 +17,7 @@ services: - backend backend: #build: ./backend - image: ghcr.io/frikky/shuffle-backend:0.8.56 + image: ghcr.io/frikky/shuffle-backend:0.8.60 container_name: shuffle-backend hostname: ${BACKEND_HOSTNAME} # Here for debugging: @@ -45,7 +45,7 @@ services: - database orborus: #build: ./functions/onprem/orborus - image: ghcr.io/frikky/shuffle-orborus:0.8.56 + image: ghcr.io/frikky/shuffle-orborus:0.8.60 container_name: shuffle-orborus hostname: shuffle-orborus networks: @@ -53,8 +53,8 @@ services: volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - - SHUFFLE_APP_SDK_VERSION=0.8.51 - - SHUFFLE_WORKER_VERSION=0.8.56 + - SHUFFLE_APP_SDK_VERSION=0.8.60 + - SHUFFLE_WORKER_VERSION=0.8.60 - ORG_ID=${ORG_ID} - ENVIRONMENT_NAME=${ENVIRONMENT_NAME} - BASE_URL=http://${OUTER_HOSTNAME}:${BACKEND_PORT} diff --git a/functions/onprem/orborus/build.sh b/functions/onprem/orborus/build.sh index c03ea51f..a0fcec2c 100644 --- a/functions/onprem/orborus/build.sh +++ b/functions/onprem/orborus/build.sh @@ -1,5 +1,5 @@ NAME=shuffle-orborus -VERSION=0.8.56 +VERSION=0.8.60 echo "Running docker build with $NAME:$VERSION" #docker rmi frikky/shuffle:$NAME --force diff --git a/functions/onprem/orborus/orborus.go b/functions/onprem/orborus/orborus.go index c98ae359..bf7f2919 100644 --- a/functions/onprem/orborus/orborus.go +++ b/functions/onprem/orborus/orborus.go @@ -253,11 +253,11 @@ func initializeImages() { ctx := context.Background() if appSdkVersion == "" { - appSdkVersion = "0.8.5" + appSdkVersion = "0.8.60" log.Printf("[WARNING] SHUFFLE_APP_SDK_VERSION not defined. Defaulting to %s", appSdkVersion) } if workerVersion == "" { - workerVersion = "0.8.57" + workerVersion = "0.8.60" log.Printf("[WARNING] SHUFFLE_WORKER_VERSION not defined. Defaulting to %s", workerVersion) } @@ -544,9 +544,10 @@ func main() { } } + // Doesn't work because of USER INPUT if found { - log.Printf("[INFO] Skipping duplicate %s", execution.ExecutionId) - continue + //log.Printf("[INFO] Skipping duplicate %s", execution.ExecutionId) + //continue } else { //log.Printf("[INFO] Adding to be ran %s", execution.ExecutionId) executionIds = append(executionIds, execution.ExecutionId) diff --git a/functions/onprem/worker/build.sh b/functions/onprem/worker/build.sh index 7f6f86c5..ba1b2e38 100644 --- a/functions/onprem/worker/build.sh +++ b/functions/onprem/worker/build.sh @@ -1,5 +1,5 @@ NAME=shuffle-worker -VERSION=0.8.57 +VERSION=0.8.60 echo "Running docker build with $NAME:$VERSION" #CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o worker.bin . diff --git a/functions/onprem/worker/worker.go b/functions/onprem/worker/worker.go index 2773c459..dcda8b3e 100644 --- a/functions/onprem/worker/worker.go +++ b/functions/onprem/worker/worker.go @@ -1624,7 +1624,7 @@ func handleExecutionResult(workflowExecution WorkflowExecution) { } if shutdownCheck { - log.Println("BREAKING BECAUSE RESULTS IS SAME LENGTH AS ACTIONS. SHOULD CHECK ALL RESULTS FOR WHETHER THEY'RE DONE") + log.Println("[INFO] BREAKING BECAUSE RESULTS IS SAME LENGTH AS ACTIONS. SHOULD CHECK ALL RESULTS FOR WHETHER THEY'RE DONE") validateFinished(workflowExecution) shutdown(workflowExecution.ExecutionId, workflowExecution.Workflow.ID) } From 177623bbc02492d4e55e6bf2b8236de7593c86cb Mon Sep 17 00:00:00 2001 From: frikky Date: Mon, 22 Feb 2021 11:03:10 +0100 Subject: [PATCH 35/37] #267: Webhook was missing URL, which made it crash. Fixed! --- backend/go-app/main.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/backend/go-app/main.go b/backend/go-app/main.go index 230f50ae..3031b0b5 100644 --- a/backend/go-app/main.go +++ b/backend/go-app/main.go @@ -17,6 +17,7 @@ import ( "log" "net" "net/http" + "net/url" "os" "os/exec" //"regexp" @@ -3558,10 +3559,13 @@ func handleWebhookCallback(resp http.ResponseWriter, request *http.Request) { // bodyWrapper = string(parsedBody) //} + url := &url.URL{} newRequest := &http.Request{ + URL: url, Method: "POST", Body: ioutil.NopCloser(bytes.NewReader(b)), } + //start, startok := request.URL.Query()["start"] // OrgId: activeOrgs[0].Id, workflowExecution, executionResp, err := handleExecution(item, workflow, newRequest) @@ -6762,6 +6766,7 @@ func handleCloudExecutionOnprem(workflowId, startNode, executionSource, executio log.Println(string(b)) newRequest := &http.Request{ + URL: &url.URL{}, Method: "POST", Body: ioutil.NopCloser(bytes.NewReader(b)), } From 9a0affd0c6a31f388977ccdbce33dba9c026191d Mon Sep 17 00:00:00 2001 From: frikky Date: Mon, 22 Feb 2021 17:29:17 +0100 Subject: [PATCH 36/37] #265: Added CONTRIBUTING and moved install guide --- .dockerignore | 15 -------- .github/CONTRIBUTING.md | 39 ++++++++++++++++++++ install-guide.md => .github/install-guide.md | 0 CONTRIBUTING.md | 17 --------- README.md | 21 +++++++++-- 5 files changed, 57 insertions(+), 35 deletions(-) delete mode 100644 .dockerignore create mode 100644 .github/CONTRIBUTING.md rename install-guide.md => .github/install-guide.md (100%) delete mode 100644 CONTRIBUTING.md diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 08fca979..00000000 --- a/.dockerignore +++ /dev/null @@ -1,15 +0,0 @@ -**/.git* -**/.gitlab-ci.yml -**/.env -**/.dockerignore -**/Dockerfile* -**/node_modules -buildSrc/libs -.gradle/ -build/ -**build/ -.idea/ -!.idea/codeStyles/codeStyleConfig.xml -.DS_Store -*.log -out/ diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 00000000..d3f66e5b --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,39 @@ +# Contributing to Shuffle + +First off, thank you for contributing to [Shuffle](https://shuffler.io/)! Your talents and your contributions are greatly appreciated. With Shuffle, we aim to make cybersecurity more accessible, and keep that in mind with everything we make. + +## Opening a new issue + +If you find a bug or think of an improvement or fix, please open a [new issue](https://github.com/frikky/Shuffle/issues/new). Outline every step necessary to reproduce the bug. Include screenshots, logs and/or code examples where applicable. The more thorough you are, the better. + +## What you can work on +There are a lot of things to work on in our complex ecosystem. The most pressing issues are documentation, use-cases and content-creation, but any help is appreciated. We'll make sure you get the help you need to get started. Below is an incomplete list of items. If you see an issue, tell us or fix it! :) + +#### App Creation (Python & GUI w/OpenAPI) +As with everything else, app creation for Shuffle is made as accessibl as possible with the app editor. However, there are some instances where it can't do the job, and you'll have to write Python code. The App Editor generates OpenAPI specifications and can be widely shared, while Python apps only work for Shuffle and NSA's WALKOFF (which Shuffle is based on). You can find our [OpenAPI apps here](https://github.com/frikky/security-openapis) and our [Python apps here](https://github.com/frikky/shuffle-apps). Apps in these repositories are automatically available after installation. Shuffle apps are searchable on [https://shuffler.io](https://shuffler.io/search). + +#### Workflow creation (GUI & Conceptualizing) +Workflows are where the magic of Shuffle automation happens. Our current ones [are outlined here](https://github.com/frikky/security-openapis), and will be automatically imported into Shuffle instances in the future. They are split into Prepare and Response, but don't necessarily have to be. If you'd like to talk about workflow creation or use-cases in general, either Open a [new issue](https://github.com/frikky/shuffle-workflows/issues/new) or send us an email at [frikky@shuffler.io](mailto:frikky@shuffler.io) + +#### Documentation (Markdown) +Documentation is essential to any product, and Shuffle is no exception. Documentation in Shuffle uses markdown and is located in the [shuffle-docs](https://github.com/frikky/shuffle-docs/tree/master/docs) repository. These are then loaded into Shuffle when someone visits [https://shuffler/docs/about](https://shuffler/docs/about), then cached for later use. If you make an edit, expect it on our website in about an hour. + +#### Frontend (ReactJS) +The frontend of Shuffle is what everyone sees when they log in. Our goal here is to make it easy to get started and keep going with Shuffle - removing any blockers from the point of accessibility. If you'd like to get started, find [an issue](https://github.com/frikky/Shuffle/issues) and check the [installation guide](https://github.com/frikky/Shuffle/blob/master/install-guide.md#local-development-installation) for setting it up locally without Docker. + +#### Backend (Golang) +The backend of Shuffle is our REST API Server that runs in the background, handling all the API-calls in general, whether from users or apps. If you'd like to get started, find [an issue](https://github.com/frikky/Shuffle/issues) and check the [installation guide](https://github.com/frikky/Shuffle/blob/master/install-guide.md#local-development-installation) for setting it up locally without Docker. + +## Working on an issue + +**Shuffle** uses the [GitHub flow](https://guides.github.com/introduction/flow/index.html). All project changes are made through pull requests. +If you see an issue that you would like to work on, leave a quick comment or just get cracking. + +### License + +All contributions are made under either the **GNU Affero General Public License v3.0** or **MIT** license. See below for further details. + +* [Main project license - AGPLv3](https://github.com/frikky/Shuffle/blob/master/LICENSE) +* [Apps - MIT](https://github.com/frikky/Shuffle-apps/blob/master/LICENSE) +* [Workflows - MIT](https://github.com/frikky/Shuffle-workflows/blob/master/LICENSE) +* [Documentation - MIT](https://github.com/frikky/Shuffle-docs/blob/master/LICENSE) diff --git a/install-guide.md b/.github/install-guide.md similarity index 100% rename from install-guide.md rename to .github/install-guide.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 58990c2e..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,17 +0,0 @@ -## Contributing to Shuffle - -First off, thank you for contributing to [Shuffle](https://shuffler.io/)! Your talents and your contributions are greatly appreciated. - -### Opening a new issue - -If you find a bug or think of an improvement or fix, please open a [new issue](https://github.com/frikky/Shuffle/issues/new). Outline every step necessary to reproduce the bug. Include screenshots and code examples where applicable. The more thorough you are, the better. - -### Working on an issue - -**Shuffle** uses the [GitHub flow](https://guides.github.com/introduction/flow/index.html). All project changes are made through pull requests. - -If you see an issue that you would like to work on, be sure to leave a quick comment asking if the issue is free to be worked on. - -### License - -All contributions are made under the **GNU Affero General Public License v3.0**. [See the license page](https://github.com/frikky/Shuffle/blob/master/LICENSE) for further details. diff --git a/README.md b/README.md index a996646e..7ccf7649 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ![Example Shuffle webhook integration](https://github.com/frikky/Shuffle/blob/master/frontend/src/assets/img/shuffle_webhook.png) ## Try it -* Self-hosted: Check out the [installation guide](https://github.com/frikky/shuffle/blob/master/install-guide.md) +* Self-hosted: Check out the [installation guide](https://github.com/frikky/shuffle/blob/master/.github/install-guide.md) * Cloud: Register at https://shuffler.io/register and get cooking (missing a lot of features) Please consider [sponsoring](https://github.com/sponsors/frikky) the project if you want to see more rapid development. @@ -43,7 +43,20 @@ Please consider [sponsoring](https://github.com/sponsors/frikky) the project if ![Shuffle Architecture](https://github.com/frikky/Shuffle/blob/master/frontend/src/assets/img/shuffle_architecture.png) ## Website -https://shuffler.io +[https://shuffler.io](https://shuffler.io) + +## Contributing +We want to make the world of cybersecurity more accessible and need all the help we can get. Send an email to [frikky@shuffler](mailto:frikky@shuffler.io) and we'll make sure to give you any training you may need. + +These are the main areas to contribute in: +* Frontend (ReactJS) +* Backend (Golang) +* App Creation (Python & GUI w/OpenAPI) +* Documentation (Markdown) +* Workflow creation (GUI & Conceptualizing) +* Content Creation (Blogs, videos etc) + +Contributing guidelines for Github are outlined [here](https://github.com/frikky/Shuffle/blob/master/.github/CONTRIBUTING.md). ## Contributors ![ICPL logo](https://github.com/frikky/Shuffle/blob/launch/frontend/src/assets/img/icpl_logo.png) @@ -61,8 +74,10 @@ https://shuffler.io ## License All modular information related to Shuffle will be under MIT (anyone can use it for whatever purpose), with Shuffle itself using AGPLv3. -Apps & App SDK: MIT +Workflows: MIT +Documentation: MIT Shuffle backend: AGPLv3 +Apps, specification and App SDK: MIT ### Repository overview Below is the folder structure with a short explanation From 8d5b435fc0c11665bb0563fb77a80ac8aca74100 Mon Sep 17 00:00:00 2001 From: frikky Date: Mon, 22 Feb 2021 17:57:18 +0100 Subject: [PATCH 37/37] Added and fixed img --- README.md | 31 +++++++++--------- .../src/assets/img/github_shuffle_img.png | Bin 0 -> 441059 bytes 2 files changed, 16 insertions(+), 15 deletions(-) create mode 100644 frontend/src/assets/img/github_shuffle_img.png diff --git a/README.md b/README.md index 7ccf7649..895bd472 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Shuffle -[Shuffle](https://shuffler.io) is an automation platform to unify your security services (SOAR). It has thousands of premade integrations and is based on open frameworks like OpenAPI and Mitre Att&ck. The workflow editor is based on a no-code thought process to empower non-developers, and the app creator makes you able to integrate any platform in minutes. +[Shuffle](https://shuffler.io) is an automation platform focused on accessibility. We believe everyone should have access to efficient processes, and are striving to make that a possibility by making integrations for YOUR tools. Security Operations is complex, but it doesn't have to be. [![Discord](https://img.shields.io/discord/463752820026376202.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/B2CBzUm) -![Example Shuffle webhook integration](https://github.com/frikky/Shuffle/blob/master/frontend/src/assets/img/shuffle_webhook.png) +![Example Shuffle webhook integration](https://github.com/frikky/Shuffle/blob/master/frontend/src/assets/img/github_shuffle_img.png) ## Try it * Self-hosted: Check out the [installation guide](https://github.com/frikky/shuffle/blob/master/.github/install-guide.md) @@ -25,22 +25,20 @@ Please consider [sponsoring](https://github.com/sponsors/frikky) the project if * [4. Real-time executions with TheHive, Cortex and MISP](https://medium.com/@Frikkylikeme/indicators-and-webhooks-with-thehive-cortex-and-misp-open-source-soar-part-4-f70cde942e59) ## Documentation -[Documentation](https://shuffler.io/docs) can be found on https://shuffler.io/docs and is written in https://github.com/frikky/shuffle-docs. +[Documentation](https://shuffler.io/docs) can be found on [https://shuffler.io/docs](https://shuffler.io/docs) and is written here: [https://github.com/frikky/shuffle-docs](https://github.com/frikky/shuffle-docs). ## Related repositories -* Apps: https://github.com/frikky/shuffle-apps -* Workflows: https://github.com/frikky/shuffle-workflows -* Security OpenAPI apps: https://github.com/frikky/security-openapis -* Documentation: https://github.com/frikky/shuffle-docs +* OpenAPI apps: [https://github.com/frikky/security-openapis](https://github.com/frikky/security-openapis) +* Documentation: [https://github.com/frikky/shuffle-docs](https://github.com/frikky/shuffle-docs) +* Workflows: [https://github.com/frikky/shuffle-workflows](https://github.com/frikky/shuffle-workflows) +* Python apps: [https://github.com/frikky/shuffle-apps](https://github.com/frikky/shuffle-apps) ## Features -* Simple workflow automation editor -* Premade apps for a number of security tools -* App creator for [OpenAPI](https://github.com/frikky/OpenAPI-security-definitions) -* Easy to learn Python library for custom apps - -## Architecture -![Shuffle Architecture](https://github.com/frikky/Shuffle/blob/master/frontend/src/assets/img/shuffle_architecture.png) +* Simple, feature rich [workflow editor](https://shuffler.io/docs/workflows) +* App creator using [OpenAPI](https://github.com/frikky/OpenAPI-security-definitions) +* Premade apps for your security tools +* Organization and sub-organization control +* Hybrid resource sharing with shuffler.io (optional) ## Website [https://shuffler.io](https://shuffler.io) @@ -79,6 +77,9 @@ Documentation: MIT Shuffle backend: AGPLv3 Apps, specification and App SDK: MIT +## Architecture +![Shuffle Architecture](https://github.com/frikky/Shuffle/blob/master/frontend/src/assets/img/shuffle_architecture.png) + ### Repository overview Below is the folder structure with a short explanation ```bash @@ -94,5 +95,5 @@ Below is the folder structure with a short explanation └ docker-compose.yml # Used for deployments ``` -**It's in BETA** - [Get in touch](https://shuffler.io/contact), send a mail to [frikky@shuffler.io](mailto:frikky@shuffler.io) or poke me on twitter [@frikkylikeme](https://twitter.com/frikkylikeme) +**It's in BETA (0.8.60)** - [Get in touch](https://shuffler.io/contact), send a mail to [frikky@shuffler.io](mailto:frikky@shuffler.io) or poke me on twitter [@frikkylikeme](https://twitter.com/frikkylikeme) diff --git a/frontend/src/assets/img/github_shuffle_img.png b/frontend/src/assets/img/github_shuffle_img.png new file mode 100644 index 0000000000000000000000000000000000000000..56c1a04f7c21f110cea2d9b9d2c5cc23f4ebf214 GIT binary patch literal 441059 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%0Do4e>mBPIP`m8hv4}aK{*7r~L5OL;PsnnKNfc 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

    9qGf`{`F8U@l6CWS z&qdee>+5Up?aHdkvXLrvP)bkc9Uc}x;T+Kd%UkHoFDvZv1l+wtFh!V{y2 z?`w3N_kh0=Xs`FZx*pvAxrPU9=0}8R9389;+N|@Nx9cZ%#h0cV0++>M%dOt?)7T^W zi{q1aWML&X=uauUF6w9ITZN$m16Ga`9)pqi z5|Ztsl*u*ezR>5Emz^)34kB*m#*3Bs9ou>B8wLu2E@gWne)(ix1aV{hXg?y4C=I*~ z2dBw-wDIjJpb=)Cji?0;?*2z*zl@AuzT95E9U)Q^cOSo3y) zahnw8^Z41&b?NtiJ5sw9H*9RHW+&%VwNW#UA4?l^LiLNDk>v`D{+gcD9nJESQ^&pD zesfQptPq#dG+VBd~Xa(jwLY9sB~#bMHEqDn+o*rv0-(GbYLX)^{^Re`+Xbz3*X#&@Yd{!Dl1-2Oh2CRzSDj z)*}4r1-3pZKR^EyN%m*Jv#tgh+ENJn6;)Ro&s=ne$2*M-4h#TE=5Sb)S(dS}F$n9{ z)N~muQGw75MlmRCT3SX3^7Bsv+aIi;h}osFIpD(=-v^|aK0dzsnOT;)a-r*e^Nfs4 zJk?2^Wo5fy<^ie$ueRL&$bL`|Krn$CEF+%?^I436@>y}gr@ z6XZKQRaKP?D-mH~aOkc_%2?^>&?PYACV$X>htoY9xUzD5%mo21G8%y7Rt^Ny^a+20 zAJ7ZOb^x$3KQF?{%2sRjUc<;pNB`~~yH!qJo=?U1pnm3TsXFZD0t!v3Wd}l2IS3GT zDnN4ts;dg?>Pkx+8%kPA8hY0~d_}3M`+(;yq^24Mt1Dz9jFc;^aT46Wx?y0E*J0AN zDdSaH1{34X4jF_(BtSGlnSUq`aXMH%;_)yfMEzw=?Tgf2(jO$2Vr9Bjb+`Ejd*j=} zQQ9XjB_UM4_x=BBYaRX8;TL?+2pR$igmxt{n&1Cn^zl4{)aZUyEx_;ED+|U8DVdX8 zPy8JOc_I(_^p){^3O;JwW@h8{1R3v{w60!A;Eb^__MGGI|h7+L-xEAV;h?PEx8+2l% z;4EJ=u1+ty8oQoy>icb&76b(!BHXzRJ5O1+w|8hvbB$vrOF_w&qed7%+{WcSZd}5v z9%dJ>7Ic380_74Day?AxnG-kW2zy| zLn-SO>40YHp(A+II|Mxz#JRq@UCrL!5*u>XN`3IYvZ{9UE*WrJ6y=eW;~o{rc}C6z z<(cSKcqTZM?o#I~E}J*|%R*dtIGXb=LyO5*m>f8-Qu*v8Afw}HD1zJc<$R;nfl)Lh z{h3D{s&O}0K@Ay%rU3s5ex0SQZfg2(6fD_P7Fx*h?F+|CJRF831qjAxsSk(*@hW{`p?SW^qnz28HTwZ4HGmBG zK}!&v;PjhaM#lBUWJdqDJ;3D6Pv+<4W!G=ePA$&OT>_|xvxUX){b8=AxhU*h(zmqu z-T6*FTP3RC)rFZdKuI8p{T6MVyK^5JxqEq`S@tl4*6yc}816G@Y~MOix;0b>nw%8K z&KR84m~aX5@ol;ZTguXcP0f&1`A5B5`vSKQ;nP1yI0rM}NE$`-qM`ULRfDJBw+be@ zGEPoN%Vt7?xO$w!Ix!3yEa98_jm_EoSTrau4qUyG5ZUsNx10I`)rPHGBFhhlXVq;R zm)CBKKj!ugW-toh+K7^4Yo|KGPHW4(>(QK`)-6?;GuDC$PRviGNeNSIw`cfyhb7!r zR?gH8V;IaG;^Fz>)NL0fS^J3=g25cDQ3BNj^=6 zzNrWprz>#xn=cA=IgYjm=4%#A>BRA^q(Bzy{wrx14gv+6`cN@)3{lM9EZ zV$?=)`5JsIo>%97r+DHT+A$u&lmbgmi>{+EEHq|S zO33Hj6HolyD)6=^X}bE`x9bt(`x_wtyBpAfnWirIE+hXZC-L8&U-mg{ChhI*+b)Xy zPs~M*_KJKGJYwzAOr@qSnFnGat$0zlAML*POv`{;Q9FBAI6u4UuGrJe~f@*p4iJ!e9pGxHDJ2Y zU_bwFYLQ1=oC9UASix>0{mDz4zU4JF6v@OQ8M>2Gw(5hW2UQjOVQ}IDz@T8H%0cTS&%2?A z7DD6F%7;V$Ja*oWAGR#P&8?xi#>v9cZ~H7##=OQ$Rq3*NPO<2-|;>o?1Ye>ciD}F9iq^}ss5SR0oeX3Fw zGN~CMu%nHHSjH4|<#_1sEF8H!E+g*a>$h{#BIN86*>U1fP=Z7AQ)b>7dk)5?xI;1N ztD+dTg}G!{BT%9i!-#{C6uGu|_H}cD+YuNMG3t?TOWjB70Mcva>N?Sj3&&P7^gO5s1HTTeW1aUYqN~<+Mrrw> z0@l2{6;CbdwWGafd{$F&;Bkisj0N_8Q7=83w=M<@^XZI2iGbqezbl$&PmC>7)j1aqeNLQS{xQ{F@?z$9*U$lEC(|T>jhrsXHSZK9tiNj`yBbG zMt4P@7;-MdHNhb8xRRWk`QH=FZvF4Oiv+|XH8W#_5ap~p{=>6v@|W{$%o>vE6f!8^4iJG;(q64c$A0I^bc(Fv@RfWQ zbJ;wds(3e0J0x_pdtlh&rXbyYUsBQwP8ZA(wc=$HW;dW)%*@;agApG;Kl?|+CilTq z@aH*xH2esFh1J&9{^b2TF)tuSxd5h7Q~3bVHVH_CwKuJOC6@!nS9M(1`USbZ7t!>{8SiJ}!l1}1W zg0qvefB%O_|M0nB?dDR>3+#Qbq%{$enhM^G)K~fiWgh{!?CaZc6w9-|o+qV#Caoa( z1R@8K6hKK~hJ4G+XC{OMLCU!tFl0YaNS15_2HtUsBl-dhUOYjH97;5(7qS-!TzmJ? z9Fsm$1_OyWl%YS2BXp%iRyL7Ah89CzR};6rtz|82-obk#_l~a%pp@&RRm)%hBxZba zyGyNXL|m69gmU1MWXKYZ9gsSfGh+uqyK}Qa;BB!)^L?!n zD=RA_Q>oExJv_V-VZoYGG58(kerE}E@Dueje(d?T^(|+^++TQp`Q)D0+GB^Amp z(ZR};qT3=$wMKaqB$gB-4$X*Obx3z!8#Y8EP*;lD)%X&{z}590CG-ynYEQx2EV4B} zl%QN$&(Y?GXJOV3*?H{MWF8k(Jm0@LNWfo^ggsVd%hy@bXh)`$d6&Fva z-0dqE1C!;{^fZ8CDa3s2uI3%#ElbPG)Uk5ISfH`(=8xGDXBOWdu>5^l(RDMsio~16(Iw|<~Pmi`~2EJHl71S6y{{OiEj>dr!keJwb6*Yv! z<&ubE+`8yhKt*|XQO>Xs#0H6r27hmP4*C3C8>(|P zG=eQ_O?CsOuRT~+; zdskAPS#A^adfbCT1K@q~ujvhRYHe+;zh42K!^QRA{{RM(k(^P-MW6YG*278n z#i%Yd#>6y^dQLmLHh;MNs*~XJXiy`kXJ%emXIC?Sm5FEmwem1y|5LdQq$GlJt1dhTpa5(t5a);$U5mL&TT zgc~FfMWN1x*k-#ovqn}XWYrhGGvCPYHG zWH0L!nYso(ft6%UjO9LYq5_EqgM#WOa^b0v zyD!9(U^n}UCLKeRK_TwYcZ`F6hJR<05XdqKX{Oo!?`q``7_38kz_WGlM zZ3K8%+r7`z>wR_#sr|3>Iv(OdUF&1Z8EH~3Ov)6 zmVTH}lb8T4Z(u;T6;amP70!X(PbIZf`R|X(Kdv4j_z7dF z1f6#D46?(#F97b+d>0-r|6O$dNQvadix*j0v3A@Wi_`w4&})jj@cLh_;C+%93TM2I$h&zmL~8Mf z!Ju8WV=z_i$DV~JTqlfOq$K1$?8n}mr>67g%Vah0qZP~P7kJw!QvP`{F#6k$>>K58 z%T+oY7551^dR*v1uN$jwEIBmR)-Gc1cl!)yEdBP4IYYUGZb=hgYQaIkscN@{U8#TL zJLhG6_o@@Vl(uZXP1ihCe7I(L`JRCsIX}PmpY(m18<)uKl4IE~j%}8~rVoEdgD`A{ zM`C;xDVPT{E@UWzZsgA!Jxx6|E*Ur=2aZV6YV)osx*;Gc$t5#qchLZ-M}9+N+etb3 z@$hgdFCrJ{%kkVIl2zm$9+2%?nl5ywg*2d_ucdH@$9#fndIplPmpX4BQ>v z3`bpp4|jL@+{_>Ey*V0{wCcfbt1F*Yakow+?}(c0E&0*?TAJGX@{@|zE8bT|6p?cD z2|HcV@_rpPYink`=@R%m2M0>51I=foK0ZDZVz+nbXaJ5|e*9Fl6N{w*B(FF^yH&6Q~BBiBOz$|_;Sq=C=l~2GiJqo)X-}yGm8QJOqwv}WQROFE| zbii#JBOe6%>tWDAjkW4qqsOvU-t%_*5zGYU1XKqR50b%-l9Ps zC0ClajmW5|#&{2YeFo80DK+mwgQu*@L5!imXEwGlo~fPeefC`D&Hny=%jA+N$@Sc5 zz}WJP8jJt>aACgsw}OHvkYB4#YL3R%9|v~!QG%kPu%J+oDKeTXHZ%ECkT??yRXVez z&uk(R>+;a|6-DH?OplFNflpl~rW!!&Ov>3{o%w;KCd{1$i!)aU)=HG1)eF zu`0*%7=zr^X(dWZ?i9nFo_r_u2)pZZq!jW zL=M~FbEHPx-^z9d_UhqVoOU=pAqCRE-+m2?BlpB_z8LBm8F5%i*F5%GWSeHMEUSJ~ zn>?uy*Kz3Y6Yh?DZLT<^-m(+qEdK?9emO`d1wJk0hwW9xdj_<^5En-t2Ycvj0%x zDUu1|QF`>i@Ak5?v6%BIO~`SlbUXv$#F-83>{yzJh$!$pMWW_VD0lH@K`rny`tUHf zZSi_f2UhE3x}Mf?pR&%QP;+(Q`!Ht}@GvZasDoVxB6P~rO*4(}hqf!xjOXg_V!Q7o z9?F*Mi4oO)7w`~CZRp_qV{50rI=DeM4*~rW7^EEO{8x*@&(B&8d)Mq;!;h33 zuF_3EA~YSAtC`8krp2n=p)V95=U(B77PS zhE63Vr4p@})7?K4>dY3SFBb}iV)(toIu?p`n0+D2o+i=Zx-jZOQ`-&Oju9D4dfdiuFt9+ipx1NdOQhmhBf(`~no=TQy6ut=-0Rr0Mm zb28zyriHf#B&g~|<*Ujr_1-V_NA)vW^I@j@OLa5<8s3pvykViFyoeo9HXQm~VpBSr ztwNm%ApAzhOUZoooj(Zz-w(8HcWYoQsyQHHm&={c$a@oNYd*T-6A zP1A@Yb5g+Xp*y`zpdW3&A7`TW*Om!F65OoNsbb||!DLY=?Q6HV(ad>~IImFl2A>pj z70v(ThV<6=)-X{Y>i)*%rfF%(#d$dO!t-EuL`eSqUl!!hcB7+lXoatckCBi2m6gOp zQ$zxD^ib$LzrAjUg^f-i=TxlkVaGh&1%ix&k&X$(LdwH5wQT_pw>{XTxbd+(y@%~r zM)BQULMEXQX;)WUCH;!-U0w`2lq_M{7;G9E8GNbinu_Kr-bkmMfk(8GY$Y_ka$=&UUcPQZy469ee^({4Qobi_#>OEWb@ zD*sFA*RL%ttS>`K3EehMkEQWI5iN;Vth7&yqZDyoZoj&pGDfI;+#DMXcpRMcm!nJA z**moPmZ$2G4{z3rJW6Ssp`>-o@Xhhm=mA8Nt=_JKp>}>)j|KUg_Cmems=barX;@mz z?xF6@-bf8d;&G06>CKM$ApVc8F!9N|J=uE8qK+pssi(KE4RmF&vb{|C^fcn9`A*eQ zLNtWA`g^7AUjJgGck>&Fy4{W%(MC=e^H{_>*41EP`%ZN_@bKlIgqBOgEQ#2I_nvWb zjl2sT9g>t#Ch2zOud)n(c8DZOnch%B$;N|ze)nmBpQ@Djf3*yli z80A)dS~E6;LN#>9rWOs~zt=V};N|6|h?Hqqbhkouc6P4(HHd;SD2RC2N%J^LDq0>+&GouT2Pn0!2yeuv-OrM;(3<_B_sf-{?^aTvCE)d*#1S6!6N8F=D{ zQ;0oKX50*EuYOUC$Py_T{*r`}o`sg4z&6ZXgtxD=9-QFF2T@zZG&DNQ(?$Q%F23@v zd;1LJJR}*p67>MaO<5Titb|;#I@EzIdAy{g2Tb-)!vUkxYj1M*ire5?Oo|2Mma6J# zRZGmMoLFV(hE!4*@#G1kKsp6uuH{60T9gLah!s&43c~Wq8Ic(y)@q3QsPBFkMj#hb z5be7(4-6=U%`-jUepOXj9a)aqMa$KTLK9J_W8^g^u)^j>Virc}P}(JE@~g(}@|qC0PPzFL(nY|a=Y43CzJl%7}0#_T{ZB>Y5kYwTx+tx3Yawt)s-sB#5(nBVA zBN-qjBLq%gEaz6#ciik+&*G>N_uEfP&w#~QFC-fo6)@ut{;pb!9wWd0ybo@Y^?!7rmLBfE+iEih&W?F?Y^Jj4jFx7{l7zALujHKAf-( z3{Fr##lb0(xbF(Q-v$um)xq4wB`_Z!%@sNA&1#;oERzN-qg+2Wku*s)$0I|}MGakD zq1UhNQ<63_lHM|CMj`H0*`Hl`i8kMXfr_1Ka1n7>4mgjqvkOBDC1Y!*m^;%MLPNcEsLea9cIpt;y=>QMg1 z`O=7#gOdT9^>+#`e&m@oAswdhvw|c7e)19`0$~DEjn6F4)t)Pl1uy+EPUJsA-VH9e zF&CORVEjvzQ*@tbd zy*3K*!s!#VN>!B-cbt6-YHS2dOD9+qG)1XER00NVHy4PVlYFbGaVqE3YQRxC5s5#p z&G#(cJf@<&{IJ8<*Vs6a;dy0Q)l$bn6=1r(6(o%Alhtr*HYi|DXH;P%D(ei?AYODJ zr41=yjw*OBulvI!Ah@)1)yZqYVc%Q~V+IhJCO;^n#A?r-A6MTQgBoiJHO z8)~88(rid(ZaAamAZk>drdiG$Wtpj=srj850HbHyqi4^EoBsPn-mujB{RBK45QH7X z4TcS9avH!Jg(zMFLLRUa?xxjJB#JDmf}>L5p;s}G45TweqUMIk(BC z(09B#KX-wIOB=O+w49))&dEN%y11BkwriyDF4aJC8TNBglG5vMBSI5hWO!w+JgEQK zikj}i?n6Ht8neY`9u-dPEM5ICf#U0@JVcE&cSiG$vHdf*lCXf=44^QBbJaVMKMC#( zMn-?J#V45a)NsPz++2Klc9$l#-MD3}G$+iTiChWJP_zDeehq{yzV zI5^l^4KU8%Uq#~@VVOZK{RR&UDw6V4fbU{gy!*~v#jZ*woG57GVuSmio16B_R-XK0?j1s^+0L(cOz5g4Cm~hMn z9ncKyq_jC7Y1+PT%5R}+`}fMq%HKV{3YV*yshLf~zvur~PZpdUGFvHMWZ7bjKIVA8 zig%Bl4~$fe#N@*(#x z-Q1BKM~6E*tn8;?Aqv1#Ac_Q3 z!htBPP<0(0PedoA7z9TO@N;}Ct7=HxzuWf6)2k`)1CO?Xbynub-`Z`eov#>>TON&o;*hM|xRC&4H(;1Gm ziZYv;ZdzZ_+>@FUkegA|cL#5A5Hg_&1uYMl18(oojFtmw7H8(^o=4|M1g?T2L?6na zpb5QrVT{l-v_Am1xBDMW6IZeRT+Xj**PNVy$-vnqQ8e2K|(w*OfqJApKNJaFm{~|MwQR&4XP*yoQ z+LgvJrOD=|!z6Ahw+*3zNT(C2dI##L>0Uew5j1Dq#=tHr`tJ7Dqr-peeAer0LoE*1 zwj}9D9?an&bDrPs7ex@VWj4{Ih~Rl4^~28m@@*;+W;*h(A1*z$J=o8W<~ne><+!GC zqhwvKcU~aV({niHn`TOe!oMDEZ;}Ey5EgJH;t4*FU%jXfX>bsb`uZZdfH^53&@}&Q zqko_5o~^*{+T3q>l?6{9v)q0k0-CH84k>AYulhzlQ% zj1YRpFWVjwH(Kj4ClpWN?y)sBq~@t!|m@Jf@dnn-6T25avKqvw`Q^2z0BMOV zAj3dmV;vCqZrtd5)v=YDdI6udpKD{m$JuRZ@IEWa{Fg~;?A3poXm4j%l>EG;`A5yk z<$PlRd>*lJ@l5=7M;^$2X0-(kG&RT7jU_}y!I>|Mq1$4i;O-8!{>V!4wA!HA3{=At zFHtfasCII-ext|s$Tk2Hsk~O`0S*YBzVdQ@evT&JzDpP)+)>0r-dUrD8LNPySXBi- zl&?bPV7A8I+FCF}87P>*C0jVwuYfqvcRai4_3^o5?*UFfM|?Pi)zx^AR1W*K?6UId zzv_W^2l@!OyhJL)m?jy6#?O#h{9mAWfFBy5LF_M{H-E77!_;t0zZ9%zK%>^%*H>6G z3rx+AmTCZ?i-U*Pr*hWedxVJwILMSW#DQ;Uz#7V3m=Y8bqiWB-xPzBHJ?rc1pojo0 z61*c+LZ`g|RKdl?Wm3&P_rW&cNMnwg_LH_(xmc6M24o2kIp=@n=VfQ-=VZ++5I42! z=J2n{dGmBL{3*4Ky}h|B`jqnsxp|Ajafaulh_A>$Kgb{4&QW*;G8ddbHUDVay>m3- z&NbD-a^T@+i_E1};O??@yh+e?2Pf&L=tQrLF`ah@Wt9{Di!A*J_}=;`ey82O1O!sc zh;&+Pv1aWP7POtQXAVIjh{5-07Ny|oi{Jsl)_h`QPZbg^{9~PwX`hhc^C=S$Va2#o z;i#F$03cIx3j}9-?N7j3O}o)zxXoiCexuCRSqYD#_0Haw^a!k3^~0;Fk8gTA zj_>juzg0_k+{>g6t}eCT{f8IA4yr_!z0RyZZUdSxkalsd=fFNr4S*cDNy=XEyyJGK zvjraj%-Zip$#|j7#+;R;H}R#4=h8_&z=RZFM{PJD#xKK{({=DPPS4A7=CC^Opkn#@ zU!LE=i@;3Qv)F2Xs7A73s|O6u3K*;W0(ij+n--=u%-c2ebv5bFqvu>!D?hd8ZoW1c zetiQ+)p0A|;iBUA?Q;$$^0wIbSTSo<*Qe7a!Akiom7>GUhQB~~`L<~MQzonAn3ut( z^XIUnNot3bvwL`-&sZCnKd)a#7I=9xL^SS}ryRd)&=;vqugh_N^XF+c zEYq4TxlpVNN@1<{dm#1@U1@%xCgsnrLd!=FRK=+1nQG%cX4FuM+690%0~&jq69I&x z)<9R61w@V0gkp*20uyEpd~7T%&_2Xbc-J)-gN$g$xms^Pw;O)-Y8Te#CVg~x2ueeD zsP?;e0UPvJV!&h{yn;^WDDaE3b`g$3$Y&6R6chDt&56E^x%M^yCDo7hvzMND6lLlymtnM3&e@eqtnB! zdq+)8`G6u!;`kr@u6yMM6a%9t9J7XtS{jI8qTu_PHaqze~5BXPFx+9Ufp`Wb&*%xx;Wjj-pVl%b)$ zf`T&_u^uSfHVO(f_{Vn-Wb3KZ{DZ`AlZ(I`4g^P_?UJXy*#WOWy1QF93PyvWl*(&A z?_s6mc?F2XXPJ*6wh&l#@3uU}5Xy-IKluC#@7hn?N7`S=t_u0a{(J(xpn2o*yDX$G zQ)C0@RM#cY=U-ymZ9oa--;}zag*Kn+&!Jkoqf!GBuYB#cMO$Y#<1Nfx2b~^>15?Rs z@gzS`=YQvIh$&3ol`zL}{r%eEK@jpJ29r-nK9t*p_=hB!Qz*X4Z+spVBJ&XLX}6q+ zP>kPy-R5@RK9^)c4aMn}BttSsp*4Y!^{ZalqF+i}w&oFY;j?S19^D;_z3zhqVG

    U-w;>Nk+i># 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 XRFJd%8Cf}$--vP8c91es$92QxEox5aTJ-p) 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 literal 0 HcmV?d00001