@spec update_or_create(map()) :: {:ok, ConfigDB.t()} | {:error, Changeset.t()}
def update_or_create(params) do
params = Map.put(params, :value, to_elixir_types(params[:value]))
-
- search_opts =
- Map.take(params, [:group, :key]) |> Map.update!(:key, &string_to_elixir_types(&1))
+ search_opts = Map.take(params, [:group, :key])
with %ConfigDB{} = config <- ConfigDB.get_by_params(search_opts),
{_, true, config} <- {:partial_update, can_be_partially_updated?(config), config},
defp only_full_update?(%ConfigDB{group: group, key: key}) do
full_key_update = [
{:pleroma, :ecto_repos},
- {:quack, :meta},
{:mime, :types},
{:cors_plug, [:max_age, :methods, :expose, :headers]},
{:swarm, :node_blacklist},
def string_to_elixir_types(value) do
if module_name?(value) do
- String.to_existing_atom("Elixir." <> value)
+ try do
+ String.to_existing_atom("Elixir." <> value)
+ rescue
+ ArgumentError -> :invalid_atom
+ end
else
value
end