defmodule StepFlow.WorkflowDefinitionController do
use StepFlow, :controller
use PhoenixSwagger
import Plug.Conn
alias StepFlow.Controller.Helpers
alias StepFlow.WorkflowDefinitions
alias StepFlow.WorkflowDefinitions
require Logger
action_fallback(StepFlow.FallbackController)
swagger_path :index do
get("/definitions")
description("List workflow definitions")
parameters do
versions(:query, :array, "List of versions to match", items: [type: :string])
mode(:query, :array, "Output mode", items: [type: :string, enum: [:full, :simple]])
end
response(200, "Success")
response(403, "Forbidden")
end
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
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
def create(conn, _) do
workflows = WorkflowDefinitions.load_workflows_in_database()
Logger.info("#{inspect(workflows)}")
json(conn, %{})
end
end