return db key on update requests

This commit is contained in:
Alexander Strizhakov 2020-01-17 18:08:45 +03:00
commit 89e93fb33f
No known key found for this signature in database
GPG key ID: 022896A53AEF1381
7 changed files with 125 additions and 40 deletions

View file

@ -16,6 +16,7 @@ defmodule Pleroma.ConfigDB do
field(:key, :string)
field(:group, :string)
field(:value, :binary)
field(:db, {:array, :string}, virtual: true, default: [])
timestamps()
end
@ -61,6 +62,22 @@ defmodule Pleroma.ConfigDB do
|> Repo.update()
end
@spec get_db_keys(ConfigDB.t()) :: [String.t()]
def get_db_keys(%ConfigDB{} = config) do
config.value
|> ConfigDB.from_binary()
|> get_db_keys(config.key)
end
@spec get_db_keys(keyword() | any()) :: [String.t()]
def get_db_keys(value, key) do
if Keyword.keyword?(value) do
value |> Keyword.keys() |> Enum.map(&convert(&1))
else
[convert(key)]
end
end
@full_key_update [
{:pleroma, :ecto_repos},
{:pleroma, :assets},
@ -317,7 +334,7 @@ defmodule Pleroma.ConfigDB do
@spec is_module_name?(String.t()) :: boolean()
def is_module_name?(string) do
Regex.match?(~r/^(Pleroma|Phoenix|Tesla|Quack)\./, string) or
Regex.match?(~r/^(Pleroma|Phoenix|Tesla|Quack|Ueberauth)\./, string) or
string in ["Oban", "Ueberauth", "ExSyslogger"]
end
end

View file

@ -15,8 +15,8 @@ defmodule Pleroma.Config.Loader do
# support for Elixir less than 1.9
@spec load() :: map()
def load do
{config, _paths} = load("config/config.exs")
{env_config, _paths} = load("config/#{Mix.env()}.exs")
config = load("config/config.exs")
env_config = load("config/#{Mix.env()}.exs")
Mix.Config.merge(config, env_config)
end

View file

@ -66,7 +66,9 @@ defmodule Pleroma.Config.TransferTask do
rescue
e ->
Logger.warn(
"updating env causes error, key: #{inspect(setting.key)}, error: #{inspect(e)}"
"updating env causes error, group: #{inspect(setting.group)}, key: #{
inspect(setting.key)
}, value: #{inspect(ConfigDB.from_binary(setting.value))}, error: #{inspect(e)}"
)
nil

View file

@ -827,15 +827,11 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
merged =
Pleroma.Config.Holder.config()
|> DeepMerge.deep_merge(configs)
|> Enum.map(fn {group, value} ->
Enum.map(value, fn {key, value} ->
|> Enum.map(fn {group, values} ->
Enum.map(values, fn {key, value} ->
db =
if configs[group][key] do
if Keyword.keyword?(value) do
Keyword.keys(value) |> Enum.map(fn key -> ConfigDB.convert(key) end)
else
ConfigDB.convert(key)
end
ConfigDB.get_db_keys(value, key)
end
setting = %{
@ -871,6 +867,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
end
end)
|> Enum.reject(&is_nil(&1))
|> Enum.map(fn config ->
Map.put(config, :db, ConfigDB.get_db_keys(config))
end)
Pleroma.Config.TransferTask.load_and_update_env()

View file

@ -12,10 +12,16 @@ defmodule Pleroma.Web.AdminAPI.ConfigView do
end
def render("show.json", %{config: config}) do
%{
map = %{
key: config.key,
group: config.group,
value: Pleroma.ConfigDB.from_binary_with_convert(config.value)
}
if config.db != [] do
Map.put(map, :db, config.db)
else
map
end
end
end