Packages
step_flow
1.7.3-rc1
1.9.0-rc2
1.9.0-rc1
1.9.0-rc0
1.8.2
1.8.1
1.8.1-rc8
1.8.1-rc7
1.8.1-rc6
1.8.1-rc5
1.8.1-rc4
1.8.1-rc3
1.8.1-rc2
1.8.1-rc1
1.8.1-rc0
1.8.0
1.8.0-rc3
1.8.0-rc2
1.8.0-rc1
1.8.0-rc0
1.7.3
1.7.3-rc4
1.7.3-rc3
1.7.3-rc2
1.7.3-rc1
1.7.3-rc0
1.7.2
1.7.2-rc4
1.7.2-rc3
1.7.2-rc2
1.7.2-rc1
1.7.2-rc0
1.7.1
1.7.0
1.7.0-rc1
1.7.0-rc0
1.6.1
1.6.1-rc1
1.6.1-rc0
1.6.0
1.6.0-rc9
1.6.0-rc8
1.6.0-rc7
1.6.0-rc6
1.6.0-rc5
1.6.0-rc4
1.6.0-rc3
1.6.0-rc20
1.6.0-rc2
1.6.0-rc19
1.6.0-rc18
1.6.0-rc17
1.6.0-rc16
1.6.0-rc15
1.6.0-rc14
1.6.0-rc13
1.6.0-rc12
1.6.0-rc11
1.6.0-rc10
1.6.0-rc1
1.5.0
1.5.0-rc1
1.4.2-rc2
1.4.2-rc1
1.4.1
1.4.1-rc1
1.4.0
1.4.0-rc4
1.4.0-rc3
1.4.0-rc2
1.4.0-rc1
1.3.1
1.3.0
1.3.0-rc
1.2.0
1.1.0
1.0.0
1.0.0-rc9
1.0.0-rc8
1.0.0-rc7
1.0.0-rc6
1.0.0-rc5
1.0.0-rc1
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.4
0.0.3
0.0.2
0.0.1
Step flow manager for Elixir applications
Current section
Files
Jump to
Current section
Files
lib/step_flow/web_controllers/workflow_definition.ex
defmodule StepFlow.WebController.WorkflowDefinition do
use StepFlow, :controller
use OpenApiSpex.ControllerSpecs
import Plug.Conn
alias OpenApiSpex.Schema
alias StepFlow.WebController.Helpers
alias StepFlow.WebController.OpenApiSchemas
alias StepFlow.WorkflowDefinitions
require Logger
@moduledoc false
tags ["Workflow Definitions"]
security [%{"authorization" => %OpenApiSpex.SecurityScheme{type: "http", scheme: "bearer"}}]
action_fallback(StepFlow.WebController.Fallback)
operation :index,
summary: "List workflow definitions",
description: "List workflow definitions",
type: :object,
parameters: [
versions: [
in: :query,
description: "List of versions to match",
schema: %Schema{
type: :array,
items: %Schema{
type: :string
}
},
example: ["1.2.3", "1.2.4"]
],
mode: [
in: :query,
description: "Output mode",
schema: %Schema{
type: :array,
items: %Schema{
type: :string,
enum: [:full, :simple]
}
},
example: ["full"]
]
],
responses: [
ok:
{"WorkflowDefinitions", "application/json", OpenApiSchemas.Workflows.WorkflowDefinitions},
forbidden: "Forbidden"
]
def index(%Plug.Conn{assigns: %{current_user: user}} = conn, params) do
params =
params
|> Map.put("roles", StepFlow.Map.get_by_key_or_atom(user, :roles, []))
|> Map.put("versions", StepFlow.Map.get_by_key_or_atom(params, :versions, []))
|> Map.put("mode", StepFlow.Map.get_by_key_or_atom(params, :mode, "full"))
workflow_definitions = WorkflowDefinitions.list_workflow_definitions(params)
conn
|> put_view(StepFlow.WorkflowDefinitionView)
|> render("index.json", workflow_definitions: workflow_definitions)
end
def index(conn, _) do
conn
|> put_status(403)
|> put_view(StepFlow.WorkflowDefinitionView)
|> render("error.json",
errors: %{reason: "Forbidden to view workflows"}
)
end
operation :show,
summary: "Get workflow definition (identifier)",
description: "Get a workflow definition by identifier",
type: :object,
parameters: [
id: [
in: :path,
description: "Workflow identifier",
type: :string,
example: "my_workflow"
]
],
responses: [
ok: {"WorkflowDefinition", "application/json", OpenApiSchemas.Workflows.WorkflowDefinition},
forbidden: "Forbidden",
not_found: "Not Found"
]
def show(%Plug.Conn{assigns: %{current_user: user}} = conn, %{"id" => identifier}) do
case WorkflowDefinitions.get_workflow_definition(identifier) do
nil ->
conn
|> put_status(:unprocessable_entity)
|> put_view(StepFlow.WorkflowDefinitionView)
|> render("error.json",
errors: %{reason: "Unable to locate workflow with this identifier"}
)
workflow_definition ->
if Helpers.has_right?("workflow::" <> identifier, user, "view") do
conn
|> put_view(StepFlow.WorkflowDefinitionView)
|> render("show.json", workflow_definition: workflow_definition)
else
conn
|> put_status(:forbidden)
|> put_view(StepFlow.WorkflowDefinitionView)
|> render("error.json",
errors: %{reason: "Forbidden to access workflow definition with this identifier"}
)
end
end
end
def show(conn, _) do
conn
|> put_status(403)
|> put_view(StepFlow.WorkflowDefinitionView)
|> render("error.json",
errors: %{reason: "Forbidden to view workflow with this identifier"}
)
end
operation :create, false
def create(conn, _) do
workflows = WorkflowDefinitions.load_workflows_in_database()
Logger.info("#{inspect(workflows)}")
json(conn, %{})
end
end