Added automated authentication selection if it exists

This commit is contained in:
frikky
2021-03-07 11:56:33 +01:00
parent 67373bfe3e
commit beeba414bc
4 changed files with 96 additions and 25 deletions
+13 -12
View File
@@ -1447,7 +1447,7 @@ class AppBase:
params = {} params = {}
try: try:
for item in action["authentication"]: for item in action["authentication"]:
print("AUTH: ", key, value) #print("AUTH: ", key, value)
params[item["key"]] = item["value"] params[item["key"]] = item["value"]
except KeyError: except KeyError:
print("No authentication specified!") print("No authentication specified!")
@@ -1469,11 +1469,11 @@ class AppBase:
if "||" in parameter["value"]: if "||" in parameter["value"]:
splitvalue = parameter["value"].split("||") splitvalue = parameter["value"].split("||")
if len(splitvalue) > 1: if len(splitvalue) > 1:
print(f'[INFO] Parsed split || options of actions["parameters"]["name"]') #print(f'[INFO] Parsed split || options of actions["parameters"]["name"]')
action["parameters"][counter]["value"] = splitvalue[1] action["parameters"][counter]["value"] = splitvalue[1]
except (IndexError, KeyError, TypeError) as e: except (IndexError, KeyError, TypeError) as e:
print("Options err: {e}") print("[WARNING] Options err: {e}")
# This part is purely for OpenAPI accessibility. # This part is purely for OpenAPI accessibility.
# It replaces the data back into the main item # It replaces the data back into the main item
@@ -1487,12 +1487,12 @@ class AppBase:
if values != None: if values != None:
added = 0 added = 0
for val in values: for val in values:
print(f"VAL: {val}") #print(f"VAL: {val}")
#parameter["value"].replace(val["key"], val["value"], -1) #parameter["value"].replace(val["key"], val["value"], -1)
print(f'PARAM1: {action["parameters"][counter]["value"]}') #print(f'PARAM1: {action["parameters"][counter]["value"]}')
action["parameters"][counter]["value"] = action["parameters"][counter]["value"].replace(val["key"], val["value"], 1) action["parameters"][counter]["value"] = action["parameters"][counter]["value"].replace(val["key"], val["value"], 1)
#action["parameters"][counter]["value"].replace(r"${url}", r"$Find_URLs.valid.#.data", 1) #action["parameters"][counter]["value"].replace(r"${url}", r"$Find_URLs.valid.#.data", 1)
print(f'PARAM2: {action["parameters"][counter]["value"]}') #print(f'PARAM2: {action["parameters"][counter]["value"]}')
#newparams.append({ #newparams.append({
# "name": val["key"], # "name": val["key"],
# "value": val["value"], # "value": val["value"],
@@ -1503,7 +1503,8 @@ class AppBase:
# }, # },
#}) #})
print(f'[INFO] Added param {val["key"]} for body with value {val["value"]} (using OpenAPI)') #print(f'[INFO] Added param {val["key"]} for body with value {val["value"]} (using OpenAPI)')
print(f'[INFO] Added param {val["key"]} for body (using OpenAPI)')
added += 1 added += 1
#action["parameters"]["body"] #action["parameters"]["body"]
@@ -1515,7 +1516,7 @@ class AppBase:
break break
print(action["parameters"]) #print(action["parameters"])
for parameter in newparams: for parameter in newparams:
action["parameters"].append(parameter) action["parameters"].append(parameter)
@@ -1841,10 +1842,10 @@ class AppBase:
#print(f"Error with subparam deletion of {subparam} in {multi_parameters} (2)") #print(f"Error with subparam deletion of {subparam} in {multi_parameters} (2)")
pass pass
print() #print()
print(f"Param: {params}") #print(f"Param: {params}")
print(f"Multiparams: {multi_parameters}") #print(f"Multiparams: {multi_parameters}")
print() #print()
if not multiexecution: if not multiexecution:
#newparams.append({ #newparams.append({
+28 -9
View File
@@ -6103,6 +6103,11 @@ func handleAppHotloadRequest(resp http.ResponseWriter, request *http.Request) {
log.Printf("[INFO] Starting app hotloading") log.Printf("[INFO] Starting app hotloading")
cacheKey := fmt.Sprintf("workflowapps-sorted-100")
requestCache.Delete(cacheKey)
cacheKey = fmt.Sprintf("workflowapps-sorted-500")
requestCache.Delete(cacheKey)
// Just need to be logged in // Just need to be logged in
// FIXME - should have some permissions? // FIXME - should have some permissions?
user, err := handleApiAuthentication(resp, request) user, err := handleApiAuthentication(resp, request)
@@ -6135,6 +6140,11 @@ func handleAppHotloadRequest(resp http.ResponseWriter, request *http.Request) {
return return
} }
cacheKey = fmt.Sprintf("workflowapps-sorted-100")
requestCache.Delete(cacheKey)
cacheKey = fmt.Sprintf("workflowapps-sorted-500")
requestCache.Delete(cacheKey)
resp.WriteHeader(200) resp.WriteHeader(200)
resp.Write([]byte(fmt.Sprintf(`{"success": true}`))) resp.Write([]byte(fmt.Sprintf(`{"success": true}`)))
} }
@@ -6737,7 +6747,7 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin
if len(removeApps) > 0 { if len(removeApps) > 0 {
for _, item := range removeApps { for _, item := range removeApps {
log.Printf("[WARNING] Removing duplicate: %s", item) log.Printf("[WARNING] Removing duplicate app: %s", item)
err = DeleteKey(ctx, "workflowapp", item) err = DeleteKey(ctx, "workflowapp", item)
if err != nil { if err != nil {
log.Printf("[ERROR] Failed deleting duplicate %s: %s", item, err) log.Printf("[ERROR] Failed deleting duplicate %s: %s", item, err)
@@ -6758,15 +6768,17 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin
continue continue
} }
err = increaseStatisticsField(ctx, "total_apps_created", workflowapp.ID, 1, "") /*
if err != nil { err = increaseStatisticsField(ctx, "total_apps_created", workflowapp.ID, 1, "")
log.Printf("Failed to increase total apps created stats: %s", err) if err != nil {
} log.Printf("Failed to increase total apps created stats: %s", err)
}
err = increaseStatisticsField(ctx, "total_apps_loaded", workflowapp.ID, 1, "") err = increaseStatisticsField(ctx, "total_apps_loaded", workflowapp.ID, 1, "")
if err != nil { if err != nil {
log.Printf("Failed to increase total apps loaded stats: %s", err) log.Printf("Failed to increase total apps loaded stats: %s", err)
} }
*/
//log.Printf("Added %s:%s to the database", workflowapp.Name, workflowapp.AppVersion) //log.Printf("Added %s:%s to the database", workflowapp.Name, workflowapp.AppVersion)
@@ -6801,6 +6813,12 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin
return buildLaterFirst, buildLaterList, err return buildLaterFirst, buildLaterList, err
} }
// This is getting silly
cacheKey := fmt.Sprintf("workflowapps-sorted-100")
requestCache.Delete(cacheKey)
cacheKey = fmt.Sprintf("workflowapps-sorted-500")
requestCache.Delete(cacheKey)
//log.Printf("BUILDLATERFIRST: %d, BUILDLATERLIST: %d", len(buildLaterFirst), len(buildLaterList)) //log.Printf("BUILDLATERFIRST: %d, BUILDLATERLIST: %d", len(buildLaterFirst), len(buildLaterList))
if len(extra) == 0 { if len(extra) == 0 {
log.Printf("[INFO] Starting build of %d containers (FIRST)", len(buildLaterFirst)) log.Printf("[INFO] Starting build of %d containers (FIRST)", len(buildLaterFirst))
@@ -6811,6 +6829,7 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin
} else { } else {
if len(item.Tags) > 0 { if len(item.Tags) > 0 {
log.Printf("[INFO] Successfully built image %s", item.Tags[0]) log.Printf("[INFO] Successfully built image %s", item.Tags[0])
} else { } else {
log.Printf("[INFO] Successfully built Docker image") log.Printf("[INFO] Successfully built Docker image")
} }
+52 -1
View File
@@ -2450,7 +2450,8 @@ const AngularWorkflow = (props) => {
authentication: [], authentication: [],
execution_variable: undefined, execution_variable: undefined,
example: example, example: example,
category: app.categories !== null && app.categories !== undefined && app.categories.length > 0 ? app.categories[0] : "" category: app.categories !== null && app.categories !== undefined && app.categories.length > 0 ? app.categories[0] : "",
authentication_id: "",
} }
// FIXME: overwrite category if the ACTION chosen has a different category // FIXME: overwrite category if the ACTION chosen has a different category
@@ -2511,6 +2512,56 @@ const AngularWorkflow = (props) => {
console.log("SHOULD STITCH WITH STARTNODE") console.log("SHOULD STITCH WITH STARTNODE")
cy.add(edgeToBeAdded) cy.add(edgeToBeAdded)
} }
// AUTHENTICATION
if (app.authentication.required) {
// Setup auth here :)
const authenticationOptions = []
var findAuthId = ""
if (newAppData.authentication_id !== null && newAppData.authentication_id !== undefined && newAppData.authentication_id.length > 0) {
findAuthId = newAppData.authentication_id
}
var tmpAuth = JSON.parse(JSON.stringify(appAuthentication))
for (var key in tmpAuth) {
var item = tmpAuth[key]
const newfields = {}
for (var filterkey in item.fields) {
newfields[item.fields[filterkey].key] = item.fields[filterkey].value
}
item.fields = newfields
if (item.app.name === app.name) {
authenticationOptions.push(item)
if (item.id === findAuthId) {
newAppData.selectedAuthentication = item
}
}
}
if (authenticationOptions !== undefined && authenticationOptions !== null && authenticationOptions.length > 0) {
for (var key in authenticationOptions) {
const option = authenticationOptions[key]
if (option.active) {
newAppData.selectedAuthentication = option
newAppData.authentication_id = option.id
break
}
}
}
//newAppData.authentication = authenticationOptions
//if (newAppData.selectedAuthentication === null || newAppData.selectedAuthentication === undefined || newAppData.selectedAuthentication.length === "") {
// newAppData.selectedAuthentication = {}
//} else {
// console.log("CAN WE SELECT AUTH?: ", authenticationOptions)
//}
} else {
newAppData.authentication = []
newAppData.authentication_id = ""
newAppData.selectedAuthentication = {}
}
workflow.actions.push(newAppData) workflow.actions.push(newAppData)
setWorkflow(workflow) setWorkflow(workflow)
+3 -3
View File
@@ -2010,11 +2010,11 @@ const AppCreator = (props) => {
const categories = [ const categories = [
"Communication", "Communication",
"Cases", "Cases",
"EDR",
"Intel",
"SIEM", "SIEM",
"Network",
"Assets", "Assets",
"Intel",
"IAM",
"Network",
"Eradication", "Eradication",
"Other", "Other",
] ]