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