Current section

Files

Jump to
blossom lib blossom controllers clients.ex
Raw

lib/blossom/controllers/clients.ex

defmodule Blossom.Controllers.Clients do
alias Blossom.Controllers.Clients
alias KilnCore.Utils
def put_new_secret(outcome, secret) do
case outcome do
{:ok, client} ->
{:ok, Map.put(client, :generated_secret, secret)}
{:error, _} = e ->
e
end
end
def generate_secret(realm, ctx) do
realm
|> ctx[:settings].clients_settings()
|> ctx[:auth].generate_secret()
end
def make_new(params, realm, user, ctx) do
secret = Clients.generate_secret(realm, ctx)
params
|> Map.put("secret", secret)
|> ctx[:model].new(user)
|> Clients.put_new_secret(secret)
end
def new(params, user, ctx) do
if params["cask"] != nil do
case ctx[:casks].show(params["cask"], user) do
[cask] -> Clients.make_new(params, cask.realm, user, ctx)
[] -> {:error, :forbidden}
end
else
{:error, :unprocessable}
end
end
def regenerate_secret(id, user, ctx) do
secret = Clients.generate_secret(user, ctx)
%{"secret" => secret}
|> ctx[:model].edit(id, user)
|> Clients.put_new_secret(secret)
end
defmacro __using__(opts \\ []) do
quote do
use KilnCore.Controller, unquote(opts)
@auth Utils.option_or_mod_replace(
@caller,
unquote(opts),
:auth,
Auth,
1,
0..1
)
@casks Utils.option_or_mod_replace(
@caller,
unquote(opts),
:casks,
Casks,
2
)
@settings Utils.option_or_mod_replace(
@caller,
unquote(opts),
:settings,
Settings,
2
)
@ctx [
auth: @auth,
casks: @casks,
model: @model,
settings: @settings
]
def new(params, user, _opts) do
Clients.new(params, user, @ctx)
end
def regenerate_secret(id, user, _opts) do
Clients.regenerate_secret(id, user, @ctx)
end
end
end
end