Current section

Files

Jump to
blossom lib blossom controllers settings.ex
Raw

lib/blossom/controllers/settings.ex

defmodule Blossom.Controllers.Settings do
alias Blossom.Controllers.Settings
def find_value(settings, setting_name) do
settings
|> Enum.find(%{}, fn setting ->
setting.name == setting_name
end)
|> Map.get(:value)
end
def fetch_number(settings, setting_name, default) do
case Settings.find_value(settings, setting_name) do
nil -> default
value -> String.to_integer(value)
end
end
def is_enabled?(setting_name, realm, ctx) do
params = %{"name" => [setting_name], "realm" => realm}
case ctx[:model].get(params, :system) do
[setting] ->
if setting.value == "no" do
false
else
true
end
_ ->
true
end
end
def min_password_length(settings) do
Settings.fetch_number(settings, "min_password_length", 8)
end
def password_settings(realm, ctx) do
settings =
%{"name" => ["min_password_length"], "realm" => realm}
|> ctx[:model].get(:system)
[
min_password_length: Settings.min_password_length(settings)
]
end
def otp_length(settings) do
Settings.fetch_number(settings, "otp_length", 8)
end
def otp_email_expiration(settings) do
name = "otp_email_verification_expiration"
Settings.fetch_number(settings, name, 43200)
end
def otp_password_expiration(settings) do
name = "otp_password_reset_expiration"
Settings.fetch_number(settings, name, 3600)
end
def otp_expiration(settings) do
[
email_verification: Settings.otp_email_expiration(settings),
password_reset: Settings.otp_password_expiration(settings)
]
end
def otp_settings(realm, ctx) do
settings =
%{
"name" => [
"otp_length",
"otp_email_verification_expiration",
"otp_password_reset_expiration"
],
"realm" => realm
}
|> ctx[:model].get(:system)
[
length: Settings.otp_length(settings),
expiration: Settings.otp_expiration(settings)
]
end
def clients_settings(realm, ctx) do
min_length =
%{"name" => ["min_client_secret_length"], "realm" => realm}
|> ctx[:model].get(:system)
|> Settings.fetch_number("min_client_secret_length", 32)
[
min_length: min_length
]
end
defmacro __using__(opts \\ []) do
quote do
use KilnCore.Controller, unquote(opts)
@ctx [model: @model]
def is_enabled?(setting, realm) do
Settings.is_enabled?(setting, realm, @ctx)
end
def otp_settings(realm) do
Settings.otp_settings(realm, @ctx)
end
def password_settings(realm) do
Settings.password_settings(realm, @ctx)
end
def clients_settings(realm) do
Settings.clients_settings(realm, @ctx)
end
defoverridable is_enabled?: 2,
clients_settings: 1,
otp_settings: 1,
password_settings: 1
end
end
end