Current section

Files

Jump to
blossom lib blossom models otp_codes.ex
Raw

lib/blossom/models/otp_codes.ex

defmodule Blossom.Models.OtpCodes do
alias Blossom.Models.OtpCodes
alias Blossom.Utils
alias KilnCore.Builders.Model, as: Builder
def expand_perms(action) do
Utils.expand_perms("realms", "otp-codes", action)
end
def make_new(params, user, ctx) do
params
|> Builder.handle_params(ctx[:protected_fields], user)
|> ctx[:schema].new()
end
def new(params, user, ctx) do
case user do
:system ->
ctx[:schema].new(params)
%{"sub" => _} ->
perms = OtpCodes.expand_perms("create")
case Utils.check_create_item(user, perms, :any, user["sub"], ctx) do
{:ok, _} -> OtpCodes.make_new(params, user, ctx)
e -> e
end
_ ->
{:error, :forbidden}
end
end
def delete(id, user, ctx) do
case user do
:system ->
ctx[:schema].delete(id)
%{"sub" => _} ->
perms = OtpCodes.expand_perms("delete")
if Utils.has_item_perms?(id, user, perms, ctx) do
ctx[:schema].delete(id)
else
{:error, :forbidden}
end
_ ->
{:error, :forbidden}
end
end
defmacro __using__(opts \\ []) do
quote do
use KilnCore.Model,
schema: unquote(Keyword.get(opts, :schema))
@ctx [schema: @schema, protected_fields: @protected_fields]
def new(params, user) do
OtpCodes.new(params, user, @ctx)
end
def delete(id, user) do
OtpCodes.delete(id, user, @ctx)
end
end
end
end