Current section

Files

Jump to
blossom lib blossom controllers casks.ex
Raw

lib/blossom/controllers/casks.ex

defmodule Blossom.Controllers.Casks do
alias Blossom.Controllers.Casks
alias KilnCore.Utils
def process_autojoin(user, cask, ctx) do
role = cask.autojoin_role || "member"
ctx[:casks_roles].create_role(user, cask.id, role)
end
def process_autojoins(user, ctx) do
%{"autojoin" => true, "enabled" => true}
|> ctx[:model].get(:system)
|> Enum.each(fn cask -> Casks.process_autojoin(user, cask, ctx) end)
end
def new_cask_admin(outcome, user, casks_roles) do
case outcome do
{:ok, cask} ->
casks_roles.create_role(%{id: user["sub"]}, cask.id, "admin")
{:ok, cask}
e ->
e
end
end
def new(params, user, ctx) do
if ctx[:settings].is_enabled?("allow_new_casks", user["iss"]) do
params
|> ctx[:model].new(user)
|> Casks.new_cask_admin(user, ctx[:casks_roles])
else
{:error, :forbidden}
end
end
defmacro __using__(opts \\ []) do
quote do
use KilnCore.Controller, unquote(opts)
@casks_roles Utils.option_or_mod_replace(
@caller,
unquote(opts),
:casks_roles,
CasksRoles,
2
)
@settings Utils.option_or_mod_replace(
@caller,
unquote(opts),
:settings,
Settings,
2
)
@ctx [model: @model, casks_roles: @casks_roles, settings: @settings]
def new(params, user, _opts) do
Casks.new(params, user, @ctx)
end
def process_autojoins(user) do
Casks.process_autojoins(user, @ctx)
end
defoverridable new: 3
end
end
end