Added reference/component parsing of OpenAPI
This commit is contained in:
+18
-18
@@ -728,9 +728,8 @@ func handleRegisterVerification(resp http.ResponseWriter, request *http.Request)
|
|||||||
|
|
||||||
Userdata := users[0]
|
Userdata := users[0]
|
||||||
|
|
||||||
// FIXME: Not for cloud!
|
|
||||||
Userdata.Verified = true
|
Userdata.Verified = true
|
||||||
err = shuffle.SetUser(ctx, &Userdata)
|
err = shuffle.SetUser(ctx, &Userdata, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Failed adding verification for user %s: %s", Userdata.Username, err)
|
log.Printf("Failed adding verification for user %s: %s", Userdata.Username, err)
|
||||||
resp.WriteHeader(401)
|
resp.WriteHeader(401)
|
||||||
@@ -740,7 +739,7 @@ func handleRegisterVerification(resp http.ResponseWriter, request *http.Request)
|
|||||||
|
|
||||||
resp.WriteHeader(200)
|
resp.WriteHeader(200)
|
||||||
resp.Write([]byte(fmt.Sprintf(`{"success": true, "reason": "%s"}`, defaultMessage)))
|
resp.Write([]byte(fmt.Sprintf(`{"success": true, "reason": "%s"}`, defaultMessage)))
|
||||||
log.Printf("%s SUCCESSFULLY FINISHED REGISTRATION", Userdata.Username)
|
log.Printf("[INFO] %s SUCCESSFULLY FINISHED REGISTRATION", Userdata.Username)
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleSetEnvironments(resp http.ResponseWriter, request *http.Request) {
|
func handleSetEnvironments(resp http.ResponseWriter, request *http.Request) {
|
||||||
@@ -928,7 +927,7 @@ func createNewUser(username, password, role, apikey string, org shuffle.OrgMini)
|
|||||||
newUser.Id = ID.String()
|
newUser.Id = ID.String()
|
||||||
newUser.VerificationToken = verifyToken.String()
|
newUser.VerificationToken = verifyToken.String()
|
||||||
|
|
||||||
err = shuffle.SetUser(ctx, newUser)
|
err = shuffle.SetUser(ctx, newUser, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error adding User %s: %s", username, err)
|
log.Printf("Error adding User %s: %s", username, err)
|
||||||
return err
|
return err
|
||||||
@@ -941,14 +940,14 @@ func createNewUser(username, password, role, apikey string, org shuffle.OrgMini)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Failed updating org with user %s", newUser.Username)
|
log.Printf("Failed updating org with user %s", newUser.Username)
|
||||||
} else {
|
} else {
|
||||||
log.Printf("Successfully updated org with user %s!", newUser.Username)
|
log.Printf("[INFO] Successfully updated org with user %s!", newUser.Username)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = increaseStatisticsField(ctx, "successful_register", username, 1, org.Id)
|
//err = increaseStatisticsField(ctx, "successful_register", username, 1, org.Id)
|
||||||
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)
|
||||||
}
|
//}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -1152,7 +1151,7 @@ func handleUpdateUser(resp http.ResponseWriter, request *http.Request) {
|
|||||||
foundUser.Username = t.Username
|
foundUser.Username = t.Username
|
||||||
}
|
}
|
||||||
|
|
||||||
err = shuffle.SetUser(ctx, foundUser)
|
err = shuffle.SetUser(ctx, foundUser, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error patching user %s: %s", foundUser.Username, err)
|
log.Printf("Error patching user %s: %s", foundUser.Username, err)
|
||||||
resp.WriteHeader(401)
|
resp.WriteHeader(401)
|
||||||
@@ -1287,7 +1286,7 @@ func handleInfo(resp http.ResponseWriter, request *http.Request) {
|
|||||||
|
|
||||||
userInfo.Orgs = newStringOrgs
|
userInfo.Orgs = newStringOrgs
|
||||||
|
|
||||||
err = shuffle.SetUser(ctx, &userInfo)
|
err = shuffle.SetUser(ctx, &userInfo, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error patching User for activeOrg: %s", err)
|
log.Printf("Error patching User for activeOrg: %s", err)
|
||||||
} else {
|
} else {
|
||||||
@@ -1304,7 +1303,7 @@ func handleInfo(resp http.ResponseWriter, request *http.Request) {
|
|||||||
userInfo.ActiveOrg = shuffle.OrgMini{
|
userInfo.ActiveOrg = shuffle.OrgMini{
|
||||||
Id: userInfo.Orgs[0],
|
Id: userInfo.Orgs[0],
|
||||||
}
|
}
|
||||||
err = shuffle.SetUser(ctx, &userInfo)
|
err = shuffle.SetUser(ctx, &userInfo, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error patching User for activeOrg: %s", err)
|
log.Printf("Error patching User for activeOrg: %s", err)
|
||||||
}
|
}
|
||||||
@@ -1423,7 +1422,7 @@ func handlePasswordReset(resp http.ResponseWriter, request *http.Request) {
|
|||||||
Userdata.Password = string(hashedPassword)
|
Userdata.Password = string(hashedPassword)
|
||||||
Userdata.ResetTimeout = 0
|
Userdata.ResetTimeout = 0
|
||||||
Userdata.ResetReference = ""
|
Userdata.ResetReference = ""
|
||||||
err = shuffle.SetUser(ctx, &Userdata)
|
err = shuffle.SetUser(ctx, &Userdata, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error adding User %s: %s", Userdata.Username, err)
|
log.Printf("Error adding User %s: %s", Userdata.Username, err)
|
||||||
resp.WriteHeader(200)
|
resp.WriteHeader(200)
|
||||||
@@ -1630,7 +1629,7 @@ func handleLogin(resp http.ResponseWriter, request *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Userdata.Session = sessionToken
|
Userdata.Session = sessionToken
|
||||||
err = shuffle.SetUser(ctx, &Userdata)
|
err = shuffle.SetUser(ctx, &Userdata, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Failed updating user when setting session: %s", err)
|
log.Printf("Failed updating user when setting session: %s", err)
|
||||||
resp.WriteHeader(500)
|
resp.WriteHeader(500)
|
||||||
@@ -1641,7 +1640,7 @@ func handleLogin(resp http.ResponseWriter, request *http.Request) {
|
|||||||
loginData = fmt.Sprintf(`{"success": true, "cookies": [{"key": "session_token", "value": "%s", "expiration": %d}]}`, sessionToken, expiration.Unix())
|
loginData = fmt.Sprintf(`{"success": true, "cookies": [{"key": "session_token", "value": "%s", "expiration": %d}]}`, sessionToken, expiration.Unix())
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("%s SUCCESSFULLY LOGGED IN with session %s", data.Username, Userdata.Session)
|
log.Printf("[INFO] %s SUCCESSFULLY LOGGED IN with session %s", data.Username, Userdata.Session)
|
||||||
|
|
||||||
resp.WriteHeader(200)
|
resp.WriteHeader(200)
|
||||||
resp.Write([]byte(loginData))
|
resp.Write([]byte(loginData))
|
||||||
@@ -4204,6 +4203,7 @@ func verifySwagger(resp http.ResponseWriter, request *http.Request) {
|
|||||||
swaggerLoader.IsExternalRefsAllowed = true
|
swaggerLoader.IsExternalRefsAllowed = true
|
||||||
swagger, err := swaggerLoader.LoadSwaggerFromData(body)
|
swagger, err := swaggerLoader.LoadSwaggerFromData(body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Println(string(body))
|
||||||
log.Printf("[ERROR] Swagger validation error: %s", err)
|
log.Printf("[ERROR] Swagger validation error: %s", err)
|
||||||
resp.WriteHeader(500)
|
resp.WriteHeader(500)
|
||||||
resp.Write([]byte(`{"success": false, "reason": "Failed verifying openapi"}`))
|
resp.Write([]byte(`{"success": false, "reason": "Failed verifying openapi"}`))
|
||||||
@@ -4389,7 +4389,7 @@ func verifySwagger(resp http.ResponseWriter, request *http.Request) {
|
|||||||
user.PrivateApps[foundNumber] = api
|
user.PrivateApps[foundNumber] = api
|
||||||
}
|
}
|
||||||
|
|
||||||
err = shuffle.SetUser(ctx, &user)
|
err = shuffle.SetUser(ctx, &user, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("[ERROR] Failed adding verification for user %s: %s", user.Username, err)
|
log.Printf("[ERROR] Failed adding verification for user %s: %s", user.Username, err)
|
||||||
resp.WriteHeader(500)
|
resp.WriteHeader(500)
|
||||||
@@ -5083,7 +5083,7 @@ func runInit(ctx context.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = shuffle.SetUser(ctx, &user)
|
err = shuffle.SetUser(ctx, &user, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Failed to reset user")
|
log.Printf("Failed to reset user")
|
||||||
} else {
|
} else {
|
||||||
@@ -5132,7 +5132,7 @@ func runInit(ctx context.Context) {
|
|||||||
Name: activeOrgs[0].Name,
|
Name: activeOrgs[0].Name,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = shuffle.SetUser(ctx, &user)
|
err = shuffle.SetUser(ctx, &user, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Failed updating user %s with org", user.Username)
|
log.Printf("Failed updating user %s with org", user.Username)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -458,7 +458,7 @@ func handleNewOutlookRegister(resp http.ResponseWriter, request *http.Request) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// Set apikey for the user if they don't have one
|
// Set apikey for the user if they don't have one
|
||||||
err = shuffle.SetUser(ctx, Userdata)
|
err = shuffle.SetUser(ctx, Userdata, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Failed setting user data for %s: %s", Userdata.Username, err)
|
log.Printf("Failed setting user data for %s: %s", Userdata.Username, err)
|
||||||
resp.WriteHeader(401)
|
resp.WriteHeader(401)
|
||||||
|
|||||||
+19
-12
@@ -2051,7 +2051,7 @@ func handleExecution(id string, workflow shuffle.Workflow, request *http.Request
|
|||||||
//log.Println(body)
|
//log.Println(body)
|
||||||
|
|
||||||
//if string(body)[0] == "\"" && string(body)[string(body)
|
//if string(body)[0] == "\"" && string(body)[string(body)
|
||||||
log.Printf("Body: %s", string(body))
|
log.Printf("[INFO] Body: %s", string(body))
|
||||||
}
|
}
|
||||||
|
|
||||||
var execution shuffle.ExecutionRequest
|
var execution shuffle.ExecutionRequest
|
||||||
@@ -2093,9 +2093,9 @@ func handleExecution(id string, workflow shuffle.Workflow, request *http.Request
|
|||||||
return shuffle.WorkflowExecution{}, fmt.Sprintf("Startnode %s was not found in actions", workflow.Start), errors.New(fmt.Sprintf("Startnode %s was not found in actions", workflow.Start))
|
return shuffle.WorkflowExecution{}, fmt.Sprintf("Startnode %s was not found in actions", workflow.Start), errors.New(fmt.Sprintf("Startnode %s was not found in actions", workflow.Start))
|
||||||
}
|
}
|
||||||
} else if len(execution.Start) > 0 {
|
} else if len(execution.Start) > 0 {
|
||||||
|
//log.Printf("[INFO] !")
|
||||||
log.Printf("[ERROR] START ACTION %s IS WRONG ID LENGTH %d!", execution.Start, len(execution.Start))
|
//log.Printf("[ERROR] START ACTION %s IS WRONG ID LENGTH %d!", execution.Start, len(execution.Start))
|
||||||
return shuffle.WorkflowExecution{}, fmt.Sprintf("Startnode %s was not found in actions", execution.Start), errors.New(fmt.Sprintf("Startnode %s was not found in actions", execution.Start))
|
//return shuffle.WorkflowExecution{}, fmt.Sprintf("Startnode %s was not found in actions", execution.Start), errors.New(fmt.Sprintf("Startnode %s was not found in actions", execution.Start))
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(execution.ExecutionId) == 36 {
|
if len(execution.ExecutionId) == 36 {
|
||||||
@@ -2245,10 +2245,10 @@ func handleExecution(id string, workflow shuffle.Workflow, request *http.Request
|
|||||||
|
|
||||||
//log.Println(string(mappedData))
|
//log.Println(string(mappedData))
|
||||||
|
|
||||||
if len(workflowExecution.Start) == 0 {
|
if len(workflowExecution.Start) == 0 && len(workflowExecution.Workflow.Start) > 0 {
|
||||||
workflowExecution.Start = workflowExecution.Workflow.Start
|
workflowExecution.Start = workflowExecution.Workflow.Start
|
||||||
}
|
}
|
||||||
log.Printf("[INFO] New startnode: %s", workflowExecution.Start)
|
//log.Printf("[INFO] New startnode: %s", workflowExecution.Start)
|
||||||
|
|
||||||
childNodes := findChildNodes(workflowExecution, workflowExecution.Start)
|
childNodes := findChildNodes(workflowExecution, workflowExecution.Start)
|
||||||
|
|
||||||
@@ -2411,13 +2411,20 @@ func handleExecution(id string, workflow shuffle.Workflow, request *http.Request
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//childNodes := findChildNodes(workflowExecution, workflowExecution.Start)
|
|
||||||
|
|
||||||
if !startFound {
|
if !startFound {
|
||||||
log.Printf("[ERROR] Startnode %s doesn't exist!!", workflowExecution.Start)
|
if len(workflowExecution.Start) == 0 && len(workflowExecution.Workflow.Start) > 0 {
|
||||||
return shuffle.WorkflowExecution{}, fmt.Sprintf("Workflow action %s doesn't exist in workflow", workflowExecution.Start), errors.New(fmt.Sprintf(`Workflow start node "%s" doesn't exist. Exiting!`, workflowExecution.Start))
|
workflowExecution.Start = workflow.Start
|
||||||
|
} else if len(workflowExecution.Workflow.Actions) > 0 {
|
||||||
|
workflowExecution.Start = workflowExecution.Workflow.Actions[0].ID
|
||||||
|
} else {
|
||||||
|
log.Printf("[ERROR] Startnode %s doesn't exist!!", workflowExecution.Start)
|
||||||
|
return shuffle.WorkflowExecution{}, fmt.Sprintf("Workflow action %s doesn't exist in workflow", workflowExecution.Start), errors.New(fmt.Sprintf(`Workflow start node "%s" doesn't exist. Exiting!`, workflowExecution.Start))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//log.Printf("EXECUTION START: %s", workflowExecution.Start)
|
||||||
|
|
||||||
// Verification for execution environments
|
// Verification for execution environments
|
||||||
workflowExecution.Results = defaultResults
|
workflowExecution.Results = defaultResults
|
||||||
workflowExecution.Workflow.Actions = newActions
|
workflowExecution.Workflow.Actions = newActions
|
||||||
@@ -3364,7 +3371,7 @@ func deleteWorkflowApp(resp http.ResponseWriter, request *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
user.PrivateApps = privateApps
|
user.PrivateApps = privateApps
|
||||||
err = shuffle.SetUser(ctx, &user)
|
err = shuffle.SetUser(ctx, &user, true)
|
||||||
if err != nil {
|
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.WriteHeader(401)
|
||||||
@@ -4197,7 +4204,7 @@ func iterateOpenApiGithub(fs billy.Filesystem, dir []os.FileInfo, extra string,
|
|||||||
if !found {
|
if !found {
|
||||||
err = shuffle.SetWorkflowAppDatastore(ctx, api, api.ID)
|
err = shuffle.SetWorkflowAppDatastore(ctx, api, api.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Failed setting workflowapp in loop: %s", err)
|
log.Printf("[WARNING] Failed setting workflowapp in loop: %s", err)
|
||||||
continue
|
continue
|
||||||
} else {
|
} else {
|
||||||
appCounter += 1
|
appCounter += 1
|
||||||
@@ -4584,7 +4591,7 @@ func iterateAppGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra strin
|
|||||||
|
|
||||||
err = shuffle.SetWorkflowAppDatastore(ctx, workflowapp, workflowapp.ID)
|
err = shuffle.SetWorkflowAppDatastore(ctx, workflowapp, workflowapp.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Failed setting workflowapp: %s", err)
|
log.Printf("[WARNING] Failed setting workflowapp in intro: %s", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ const Workflow = (props) => {
|
|||||||
const [requiredTriggers, setRequiredTriggers] = React.useState([])
|
const [requiredTriggers, setRequiredTriggers] = React.useState([])
|
||||||
const [previousAuth, setPreviousAuth] = React.useState(appAuthentication)
|
const [previousAuth, setPreviousAuth] = React.useState(appAuthentication)
|
||||||
const [firstLoad, setFirstLoad] = React.useState("")
|
const [firstLoad, setFirstLoad] = React.useState("")
|
||||||
|
const [itemChanged, setItemChanged] = React.useState(false)
|
||||||
var finished = false
|
var finished = false
|
||||||
|
|
||||||
if (workflow === undefined || workflow === null) {
|
if (workflow === undefined || workflow === null) {
|
||||||
@@ -216,6 +217,7 @@ const Workflow = (props) => {
|
|||||||
|
|
||||||
newWebhook(workflow.triggers[trigger.index])
|
newWebhook(workflow.triggers[trigger.index])
|
||||||
saveWorkflow(workflow)
|
saveWorkflow(workflow)
|
||||||
|
setItemChanged(true)
|
||||||
}}>
|
}}>
|
||||||
{trigger.status !== "running" ? "Start" : "Running"}
|
{trigger.status !== "running" ? "Start" : "Running"}
|
||||||
</Button>
|
</Button>
|
||||||
@@ -232,6 +234,7 @@ const Workflow = (props) => {
|
|||||||
|
|
||||||
submitSchedule(workflow.triggers[trigger.index], trigger.index)
|
submitSchedule(workflow.triggers[trigger.index], trigger.index)
|
||||||
saveWorkflow(workflow)
|
saveWorkflow(workflow)
|
||||||
|
setItemChanged(true)
|
||||||
}}>
|
}}>
|
||||||
{trigger.status !== "running" ? "Start" : "Running"}
|
{trigger.status !== "running" ? "Start" : "Running"}
|
||||||
</Button>
|
</Button>
|
||||||
@@ -350,6 +353,7 @@ const Workflow = (props) => {
|
|||||||
<CircularProgress />
|
<CircularProgress />
|
||||||
:
|
:
|
||||||
<Button color="primary" variant="contained" onClick={() => {
|
<Button color="primary" variant="contained" onClick={() => {
|
||||||
|
setItemChanged(true)
|
||||||
setSelectedAction(action.action)
|
setSelectedAction(action.action)
|
||||||
setSelectedApp(action.app)
|
setSelectedApp(action.app)
|
||||||
setAuthenticationModalOpen(true)
|
setAuthenticationModalOpen(true)
|
||||||
@@ -359,8 +363,9 @@ const Workflow = (props) => {
|
|||||||
:
|
:
|
||||||
null}
|
null}
|
||||||
{action.must_activate ?
|
{action.must_activate ?
|
||||||
<Button color="primary" variant="contained" onClick={() => {
|
<Button disabled={true} color="primary" variant="contained" onClick={() => {
|
||||||
console.log("SHOULD ACTIVATE: ", action)
|
console.log("SHOULD ACTIVATE: ", action)
|
||||||
|
setItemChanged(true)
|
||||||
}}>
|
}}>
|
||||||
Activate
|
Activate
|
||||||
</Button>
|
</Button>
|
||||||
@@ -426,8 +431,12 @@ const Workflow = (props) => {
|
|||||||
*/}
|
*/}
|
||||||
<Button color="primary" variant={"contained"} style={{
|
<Button color="primary" variant={"contained"} style={{
|
||||||
}} onClick={() => {
|
}} onClick={() => {
|
||||||
saveWorkflow(workflow)
|
if (itemChanged) {
|
||||||
window.location.reload()
|
saveWorkflow(workflow)
|
||||||
|
window.location.reload()
|
||||||
|
} else {
|
||||||
|
setConfigureWorkflowModalOpen(false)
|
||||||
|
}
|
||||||
}}>
|
}}>
|
||||||
Finish setup
|
Finish setup
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -87,17 +87,21 @@ const ParsedAction = (props) => {
|
|||||||
responseJson.loop_versions = selectedApp.loop_versions
|
responseJson.loop_versions = selectedApp.loop_versions
|
||||||
}
|
}
|
||||||
|
|
||||||
var foundAction = responseJson.actions.find(action => action.name === selectedAction.name)
|
var foundAction = responseJson.actions.find(action => action.name.toLowerCase() === selectedAction.name.toLowerCase())
|
||||||
|
console.log("FOUNDACTION: ", foundAction)
|
||||||
if (foundAction !== null && foundAction !== undefined) {
|
if (foundAction !== null && foundAction !== undefined) {
|
||||||
|
var foundparams = []
|
||||||
for (var paramkey in foundAction.parameters) {
|
for (var paramkey in foundAction.parameters) {
|
||||||
const param = foundAction.parameters[paramkey]
|
const param = foundAction.parameters[paramkey]
|
||||||
|
|
||||||
const foundParam = selectedAction.parameters.find(item => item.name === param.name)
|
const foundParam = selectedAction.parameters.find(item => item.name.toLowerCase() === param.name.toLowerCase())
|
||||||
if (foundParam === undefined) {
|
if (foundParam === undefined) {
|
||||||
//console.log("COULDNT find Param: ", param)
|
console.log("COULDNT find Param: ", param)
|
||||||
} else {
|
} else {
|
||||||
foundAction.parameters[paramkey] = foundParam
|
foundAction.parameters[paramkey] = foundParam
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//foundparams.push(param.name)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
alert.error("Couldn't find action "+selectedAction.name)
|
alert.error("Couldn't find action "+selectedAction.name)
|
||||||
@@ -285,6 +289,8 @@ const ParsedAction = (props) => {
|
|||||||
"value": event.target.value,
|
"value": event.target.value,
|
||||||
}]
|
}]
|
||||||
|
|
||||||
|
console.log("IN IF: ", paramcheck)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
const subparamindex = paramcheck["value_replace"].findIndex(param => param.key === data.name)
|
const subparamindex = paramcheck["value_replace"].findIndex(param => param.key === data.name)
|
||||||
if (subparamindex === -1) {
|
if (subparamindex === -1) {
|
||||||
@@ -295,11 +301,25 @@ const ParsedAction = (props) => {
|
|||||||
} else {
|
} else {
|
||||||
paramcheck["value_replace"][subparamindex]["value"] = event.target.value
|
paramcheck["value_replace"][subparamindex]["value"] = event.target.value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("IN ELSE: ", paramcheck)
|
||||||
}
|
}
|
||||||
//console.log("PARAM: ", paramcheck)
|
//console.log("PARAM: ", paramcheck)
|
||||||
|
//if (paramcheck.id === undefined) {
|
||||||
selectedActionParameters[count]["value_replace"] = paramcheck
|
// console.log("Normal paramcheck")
|
||||||
selectedAction.parameters[count]["value_replace"] = paramcheck
|
//} else {
|
||||||
|
// selectedActionParameters[count]["value_replace"] = paramcheck
|
||||||
|
// selectedAction.parameters[count]["value_replace"] = paramcheck
|
||||||
|
//}
|
||||||
|
|
||||||
|
if (paramcheck["value_replace"] === undefined) {
|
||||||
|
selectedActionParameters[count]["value_replace"] = paramcheck
|
||||||
|
selectedAction.parameters[count]["value_replace"] = paramcheck
|
||||||
|
} else {
|
||||||
|
selectedActionParameters[count]["value_replace"] = paramcheck["value_replace"]
|
||||||
|
selectedAction.parameters[count]["value_replace"] = paramcheck["value_replace"]
|
||||||
|
}
|
||||||
|
console.log("RESULT: ", selectedAction)
|
||||||
setSelectedAction(selectedAction)
|
setSelectedAction(selectedAction)
|
||||||
//setUpdate(Math.random())
|
//setUpdate(Math.random())
|
||||||
return
|
return
|
||||||
@@ -718,7 +738,6 @@ const ParsedAction = (props) => {
|
|||||||
value={selectedActionParameters[count].value}
|
value={selectedActionParameters[count].value}
|
||||||
fullWidth
|
fullWidth
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
console.log("VAL: ", e.target.value)
|
|
||||||
changeActionParameter(e, count, data)
|
changeActionParameter(e, count, data)
|
||||||
setUpdate(Math.random())
|
setUpdate(Math.random())
|
||||||
}}
|
}}
|
||||||
@@ -1234,7 +1253,7 @@ const ParsedAction = (props) => {
|
|||||||
}}
|
}}
|
||||||
fullWidth
|
fullWidth
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
console.log("CHOSE AN AUTHENTICATION OPTION: ", e.target.value)
|
//console.log("CHOSE AN AUTHENTICATION OPTION: ", e.target.value)
|
||||||
selectedAction.selectedAuthentication = e.target.value
|
selectedAction.selectedAuthentication = e.target.value
|
||||||
selectedAction.authentication_id = e.target.value.id
|
selectedAction.authentication_id = e.target.value.id
|
||||||
setSelectedAction(selectedAction)
|
setSelectedAction(selectedAction)
|
||||||
@@ -1243,7 +1262,7 @@ const ParsedAction = (props) => {
|
|||||||
style={{backgroundColor: theme.palette.inputColor, color: "white", height: 50, maxWidth: rightsidebarStyle.maxWidth-80,}}
|
style={{backgroundColor: theme.palette.inputColor, color: "white", height: 50, maxWidth: rightsidebarStyle.maxWidth-80,}}
|
||||||
>
|
>
|
||||||
{selectedAction.authentication.map(data => {
|
{selectedAction.authentication.map(data => {
|
||||||
console.log("DATA: ", data)
|
//console.log("AUTH DATA: ", data)
|
||||||
return(
|
return(
|
||||||
<MenuItem key={data.id} style={{backgroundColor: theme.palette.inputColor, color: "white"}} value={data}>
|
<MenuItem key={data.id} style={{backgroundColor: theme.palette.inputColor, color: "white"}} value={data}>
|
||||||
{data.label} - ({data.app.app_version})
|
{data.label} - ({data.app.app_version})
|
||||||
|
|||||||
@@ -5730,7 +5730,7 @@ const AngularWorkflow = (props) => {
|
|||||||
|
|
||||||
const timestamp = new Date(data.started_at*1000).toISOString().split('.')[0].split("T").join(" ")
|
const timestamp = new Date(data.started_at*1000).toISOString().split('.')[0].split("T").join(" ")
|
||||||
|
|
||||||
var calculatedResult = data.workflow.actions.length
|
var calculatedResult = data.workflow.actions !== undefined && data.workflow.actions !== null ? data.workflow.actions.length : 0
|
||||||
for (var key in data.workflow.triggers) {
|
for (var key in data.workflow.triggers) {
|
||||||
const trigger = data.workflow.triggers[key]
|
const trigger = data.workflow.triggers[key]
|
||||||
if ((trigger.app_name === "User Input" && trigger.trigger_type === "USERINPUT") || (trigger.app_name === "Shuffle Workflow" && trigger.trigger_type === "SUBFLOW")) {
|
if ((trigger.app_name === "User Input" && trigger.trigger_type === "USERINPUT") || (trigger.app_name === "Shuffle Workflow" && trigger.trigger_type === "SUBFLOW")) {
|
||||||
|
|||||||
@@ -338,7 +338,6 @@ const AppCreator = (props) => {
|
|||||||
throw new Error("NOT 200 :O")
|
throw new Error("NOT 200 :O")
|
||||||
}
|
}
|
||||||
|
|
||||||
//console.log("DATA: ", response.text())
|
|
||||||
return response.json()
|
return response.json()
|
||||||
})
|
})
|
||||||
.then((responseJson) => {
|
.then((responseJson) => {
|
||||||
@@ -373,6 +372,7 @@ const AppCreator = (props) => {
|
|||||||
|
|
||||||
const handleGetRef = (parameter, data) => {
|
const handleGetRef = (parameter, data) => {
|
||||||
if (parameter["$ref"] === undefined) {
|
if (parameter["$ref"] === undefined) {
|
||||||
|
console.log("$ref not found in getref: ")
|
||||||
return parameter
|
return parameter
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -530,6 +530,8 @@ const AppCreator = (props) => {
|
|||||||
"example_response": "",
|
"example_response": "",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//console.log("Schema is application/json: ", methodvalue)
|
||||||
|
//console.log("DATA", data)
|
||||||
if (methodvalue["requestBody"] !== undefined) {
|
if (methodvalue["requestBody"] !== undefined) {
|
||||||
//console.log("Handle requestbody: ", methodvalue["requestBody"])
|
//console.log("Handle requestbody: ", methodvalue["requestBody"])
|
||||||
if (methodvalue["requestBody"]["content"] !== undefined) {
|
if (methodvalue["requestBody"]["content"] !== undefined) {
|
||||||
@@ -541,12 +543,22 @@ const AppCreator = (props) => {
|
|||||||
tmpobject[prop] = `\$\{${prop}\}`
|
tmpobject[prop] = `\$\{${prop}\}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//console.log("Data: ", data)
|
||||||
for (var subkey in methodvalue["requestBody"]["content"]["application/json"]["schema"]["required"]) {
|
for (var subkey in methodvalue["requestBody"]["content"]["application/json"]["schema"]["required"]) {
|
||||||
const tmpitem = methodvalue["requestBody"]["content"]["application/json"]["schema"]["required"][subkey]
|
const tmpitem = methodvalue["requestBody"]["content"]["application/json"]["schema"]["required"][subkey]
|
||||||
tmpobject[tmpitem] = `\$\{${tmpitem}\}`
|
tmpobject[tmpitem] = `\$\{${tmpitem}\}`
|
||||||
}
|
}
|
||||||
|
|
||||||
newaction["body"] = JSON.stringify(tmpobject, null, 2)
|
newaction["body"] = JSON.stringify(tmpobject, null, 2)
|
||||||
|
} else if (methodvalue["requestBody"]["content"]["application/json"]["schema"]["$ref"] !== undefined && methodvalue["requestBody"]["content"]["application/json"]["schema"]["$ref"] !== null) {
|
||||||
|
const retRef = handleGetRef(methodvalue["requestBody"]["content"]["application/json"]["schema"], data)
|
||||||
|
var newbody = {}
|
||||||
|
// Can handle default, required, description and type
|
||||||
|
for (var propkey in retRef.properties) {
|
||||||
|
const parsedkey = propkey.replaceAll(" ", "_").toLowerCase()
|
||||||
|
newbody[parsedkey] = "${"+parsedkey+"}"
|
||||||
|
}
|
||||||
|
newaction["body"] = JSON.stringify(newbody, null, 2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (methodvalue["requestBody"]["content"]["application/xml"] !== undefined) {
|
} else if (methodvalue["requestBody"]["content"]["application/xml"] !== undefined) {
|
||||||
@@ -603,6 +615,117 @@ const AppCreator = (props) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
var selectedReturn = ""
|
||||||
|
if (methodvalue.responses["200"] !== undefined) {
|
||||||
|
selectedReturn = "200"
|
||||||
|
} else if (methodvalue.responses["201"] !== undefined) {
|
||||||
|
selectedReturn = "201"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parsing examples. This should be standardized lol
|
||||||
|
if (methodvalue.responses[selectedReturn] !== undefined) {
|
||||||
|
const selectedExample = methodvalue.responses[selectedReturn]
|
||||||
|
if (selectedExample["content"] !== undefined) {
|
||||||
|
if (selectedExample["content"]["application/json"] !== undefined) {
|
||||||
|
if (selectedExample["content"]["application/json"]["schema"] !== undefined) {
|
||||||
|
if (selectedExample["content"]["application/json"]["schema"]["$ref"] !== undefined) {
|
||||||
|
//console.log("REF EXAMPLE: ", selectedExample["content"]["application/json"]["schema"])
|
||||||
|
const parameter = handleGetRef(selectedExample["content"]["application/json"]["schema"], data)
|
||||||
|
//console.log("GOT REF RETURN AS EXAMPLE: ", parameter)
|
||||||
|
|
||||||
|
if (parameter.properties !== undefined && parameter["type"] === "object") {
|
||||||
|
var newbody = {}
|
||||||
|
for (var propkey in parameter.properties) {
|
||||||
|
const parsedkey = propkey.replaceAll(" ", "_").toLowerCase()
|
||||||
|
if (parameter.properties[propkey].type === "string") {
|
||||||
|
if (parameter.properties[propkey].description !== undefined) {
|
||||||
|
newbody[parsedkey] = parameter.properties[propkey].description
|
||||||
|
} else {
|
||||||
|
newbody[parsedkey] = ""
|
||||||
|
}
|
||||||
|
} else if (parameter.properties[propkey].type.includes("int")) {
|
||||||
|
newbody[parsedkey] = 0
|
||||||
|
} else {
|
||||||
|
console.log("CANT HANDLE TYPE ", parameter.properties[propkey].type)
|
||||||
|
newbody[parsedkey] = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
newaction.example_response = JSON.stringify(newbody, null, 2)
|
||||||
|
} else {
|
||||||
|
console.log("CANT HANDLE PARAM: (1) ", parameter.properties)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Just selecting the first one. bleh.
|
||||||
|
if (selectedExample["content"]["application/json"]["schema"]["allOf"] !== undefined) {
|
||||||
|
//console.log("ALLOF: ", selectedExample["content"]["application/json"]["schema"]["allOf"])
|
||||||
|
//console.log("BAD EXAMPLE: (SKIP ALLOF) ", selectedExample["content"]["application/json"]["schema"]["allOf"])
|
||||||
|
var selectedComponent = selectedExample["content"]["application/json"]["schema"]["allOf"]
|
||||||
|
if (selectedComponent.length >= 1) {
|
||||||
|
selectedComponent = selectedComponent[0]
|
||||||
|
|
||||||
|
const parameter = handleGetRef(selectedComponent, data)
|
||||||
|
if (parameter.properties !== undefined && parameter["type"] === "object") {
|
||||||
|
var newbody = {}
|
||||||
|
for (var propkey in parameter.properties) {
|
||||||
|
const parsedkey = propkey.replaceAll(" ", "_").toLowerCase()
|
||||||
|
if (parameter.properties[propkey].type === "string") {
|
||||||
|
if (parameter.properties[propkey].description !== undefined) {
|
||||||
|
newbody[parsedkey] = parameter.properties[propkey].description
|
||||||
|
} else {
|
||||||
|
newbody[parsedkey] = ""
|
||||||
|
}
|
||||||
|
} else if (parameter.properties[propkey].type.includes("int")) {
|
||||||
|
newbody[parsedkey] = 0
|
||||||
|
} else {
|
||||||
|
console.log("CANT HANDLE TYPE ", parameter.properties[propkey].type)
|
||||||
|
newbody[parsedkey] = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
newaction.example_response = JSON.stringify(newbody, null, 2)
|
||||||
|
//newaction.example_response = JSON.stringify(parameter.properties, null, 2)
|
||||||
|
} else {
|
||||||
|
//newaction.example_response = parameter.properties
|
||||||
|
console.log("CANT HANDLE PARAM: (3) ", parameter.properties)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
} else if (selectedExample["content"]["application/json"]["schema"]["properties"] !== undefined) {
|
||||||
|
if (selectedExample["content"]["application/json"]["schema"]["properties"]["data"] !== undefined) {
|
||||||
|
const parameter = handleGetRef(selectedExample["content"]["application/json"]["schema"]["properties"]["data"], data)
|
||||||
|
if (parameter.properties !== undefined && parameter["type"] === "object") {
|
||||||
|
var newbody = {}
|
||||||
|
for (var propkey in parameter.properties) {
|
||||||
|
const parsedkey = propkey.replaceAll(" ", "_").toLowerCase()
|
||||||
|
if (parameter.properties[propkey].type === "string") {
|
||||||
|
if (parameter.properties[propkey].description !== undefined) {
|
||||||
|
newbody[parsedkey] = parameter.properties[propkey].description
|
||||||
|
} else {
|
||||||
|
newbody[parsedkey] = ""
|
||||||
|
}
|
||||||
|
} else if (parameter.properties[propkey].type.includes("int")) {
|
||||||
|
newbody[parsedkey] = 0
|
||||||
|
} else {
|
||||||
|
console.log("CANT HANDLE TYPE ", parameter.properties[propkey].type)
|
||||||
|
newbody[parsedkey] = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
newaction.example_response = JSON.stringify(newbody, null, 2)
|
||||||
|
//newaction.example_response = JSON.stringify(parameter.properties, null, 2)
|
||||||
|
} else {
|
||||||
|
//newaction.example_response = parameter.properties
|
||||||
|
console.log("CANT HANDLE PARAM: (2) ", parameter.properties)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -727,7 +850,6 @@ const AppCreator = (props) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("INVALID9: ", data)
|
|
||||||
if (securitySchemes !== undefined) {
|
if (securitySchemes !== undefined) {
|
||||||
for (const [key, value] of Object.entries(securitySchemes)) {
|
for (const [key, value] of Object.entries(securitySchemes)) {
|
||||||
if (value.scheme === "bearer") {
|
if (value.scheme === "bearer") {
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ export const validateJson = (showResult) => {
|
|||||||
const Workflows = (props) => {
|
const Workflows = (props) => {
|
||||||
const { globalUrl, isLoggedIn, isLoaded, removeCookie, cookies, userdata} = props;
|
const { globalUrl, isLoggedIn, isLoaded, removeCookie, cookies, userdata} = props;
|
||||||
document.title = "Shuffle - Workflows"
|
document.title = "Shuffle - Workflows"
|
||||||
|
const referenceUrl = globalUrl+"/api/v1/hooks/"
|
||||||
|
|
||||||
const alert = useAlert()
|
const alert = useAlert()
|
||||||
const classes = useStyles();
|
const classes = useStyles();
|
||||||
@@ -544,9 +545,7 @@ const Workflows = (props) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const sanitizeWorkflow = (data) => {
|
const deduplicateIds = (data) => {
|
||||||
data["owner"] = ""
|
|
||||||
console.log("Sanitize start: ", data)
|
|
||||||
if (data.triggers !== null && data.triggers !== undefined) {
|
if (data.triggers !== null && data.triggers !== undefined) {
|
||||||
for (var key in data.triggers) {
|
for (var key in data.triggers) {
|
||||||
const trigger = data.triggers[key]
|
const trigger = data.triggers[key]
|
||||||
@@ -561,6 +560,17 @@ const Workflows = (props) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const newId = uuid.v4()
|
const newId = uuid.v4()
|
||||||
|
if (trigger.trigger_type === "WEBHOOK") {
|
||||||
|
//"http://localhost:5002/api/v1/hooks/webhook_db179eb0-cb0c-4d2a-9c4b-53d2625a5008"
|
||||||
|
const hookname = "webhook_"+newId
|
||||||
|
if (trigger.parameters.length === 2) {
|
||||||
|
trigger.parameters[0].value = referenceUrl+"webhook_"+trigger.id
|
||||||
|
trigger.parameters[1].value = "webhook_"+trigger.id
|
||||||
|
} else {
|
||||||
|
alert.info("Something is wrong with the webhook in the copy")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (var branchkey in data.branches) {
|
for (var branchkey in data.branches) {
|
||||||
const branch = data.branches[branchkey]
|
const branch = data.branches[branchkey]
|
||||||
if (branch.source_id === trigger.id) {
|
if (branch.source_id === trigger.id) {
|
||||||
@@ -626,8 +636,13 @@ const Workflows = (props) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//console.log(data)
|
return data
|
||||||
//return
|
}
|
||||||
|
|
||||||
|
const sanitizeWorkflow = (data) => {
|
||||||
|
data["owner"] = ""
|
||||||
|
console.log("Sanitize start: ", data)
|
||||||
|
data = deduplicateIds(data)
|
||||||
|
|
||||||
data["org"] = []
|
data["org"] = []
|
||||||
data["org_id"] = ""
|
data["org_id"] = ""
|
||||||
@@ -701,7 +716,8 @@ const Workflows = (props) => {
|
|||||||
alert.success("Copying workflow "+data.name)
|
alert.success("Copying workflow "+data.name)
|
||||||
data.id = ""
|
data.id = ""
|
||||||
data.name = data.name+"_copy"
|
data.name = data.name+"_copy"
|
||||||
console.log("COPIED DATA: ", data)
|
data = deduplicateIds(data)
|
||||||
|
//console.log("COPIED DATA: ", data)
|
||||||
//return
|
//return
|
||||||
|
|
||||||
fetch(globalUrl+"/api/v1/workflows", {
|
fetch(globalUrl+"/api/v1/workflows", {
|
||||||
|
|||||||
Reference in New Issue
Block a user