forked from AkkomaGang/akkoma
Admin fixes
This commit is contained in:
parent
99ce6d6044
commit
de0f3b73dd
4 changed files with 52 additions and 5 deletions
|
@ -627,6 +627,9 @@ Tuples can be passed as `{"tuple": ["first_val", Pleroma.Module, []]}`.
|
||||||
Keywords can be passed as lists with 2 child tuples, e.g.
|
Keywords can be passed as lists with 2 child tuples, e.g.
|
||||||
`[{"tuple": ["first_val", Pleroma.Module]}, {"tuple": ["second_val", true]}]`.
|
`[{"tuple": ["first_val", Pleroma.Module]}, {"tuple": ["second_val", true]}]`.
|
||||||
|
|
||||||
|
If value contains list of settings `[subkey: val1, subkey2: val2, subkey3: val3]`, it's possible to remove only subkeys instead of all settings passing `subkeys` parameter. E.g.:
|
||||||
|
{"group": "pleroma", "key": "some_key", "delete": "true", "subkeys": [":subkey", ":subkey3"]}.
|
||||||
|
|
||||||
Compile time settings (need instance reboot):
|
Compile time settings (need instance reboot):
|
||||||
- all settings by this keys:
|
- all settings by this keys:
|
||||||
- `:hackney_pools`
|
- `:hackney_pools`
|
||||||
|
@ -645,6 +648,7 @@ Compile time settings (need instance reboot):
|
||||||
- `key` (string or string with leading `:` for atoms)
|
- `key` (string or string with leading `:` for atoms)
|
||||||
- `value` (string, [], {} or {"tuple": []})
|
- `value` (string, [], {} or {"tuple": []})
|
||||||
- `delete` = true (optional, if parameter must be deleted)
|
- `delete` = true (optional, if parameter must be deleted)
|
||||||
|
- `subkeys` [(string with leading `:` for atoms)] (optional, works only if `delete=true` parameter is passed, otherwise will be ignored)
|
||||||
]
|
]
|
||||||
|
|
||||||
- Request (example):
|
- Request (example):
|
||||||
|
|
|
@ -402,9 +402,9 @@ def config_update(conn, %{"configs" => configs}) do
|
||||||
if Pleroma.Config.get([:instance, :dynamic_configuration]) do
|
if Pleroma.Config.get([:instance, :dynamic_configuration]) do
|
||||||
updated =
|
updated =
|
||||||
Enum.map(configs, fn
|
Enum.map(configs, fn
|
||||||
%{"group" => group, "key" => key, "delete" => "true"} ->
|
%{"group" => group, "key" => key, "delete" => "true"} = params ->
|
||||||
{:ok, _} = Config.delete(%{group: group, key: key})
|
{:ok, config} = Config.delete(%{group: group, key: key, subkeys: params["subkeys"]})
|
||||||
nil
|
config
|
||||||
|
|
||||||
%{"group" => group, "key" => key, "value" => value} ->
|
%{"group" => group, "key" => key, "value" => value} ->
|
||||||
{:ok, config} = Config.update_or_create(%{group: group, key: key, value: value})
|
{:ok, config} = Config.update_or_create(%{group: group, key: key, value: value})
|
||||||
|
|
|
@ -55,8 +55,19 @@ def update_or_create(params) do
|
||||||
|
|
||||||
@spec delete(map()) :: {:ok, Config.t()} | {:error, Changeset.t()}
|
@spec delete(map()) :: {:ok, Config.t()} | {:error, Changeset.t()}
|
||||||
def delete(params) do
|
def delete(params) do
|
||||||
with %Config{} = config <- Config.get_by_params(params) do
|
with %Config{} = config <- Config.get_by_params(Map.delete(params, :subkeys)) do
|
||||||
|
if params[:subkeys] do
|
||||||
|
updated_value =
|
||||||
|
Keyword.drop(
|
||||||
|
:erlang.binary_to_term(config.value),
|
||||||
|
Enum.map(params[:subkeys], &do_transform_string(&1))
|
||||||
|
)
|
||||||
|
|
||||||
|
Config.update(config, %{value: updated_value})
|
||||||
|
else
|
||||||
Repo.delete(config)
|
Repo.delete(config)
|
||||||
|
{:ok, nil}
|
||||||
|
end
|
||||||
else
|
else
|
||||||
nil ->
|
nil ->
|
||||||
err =
|
err =
|
||||||
|
|
|
@ -1914,6 +1914,38 @@ test "queues key as atom", %{conn: conn} do
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "delete part of settings by atom subkeys", %{conn: conn} do
|
||||||
|
config =
|
||||||
|
insert(:config,
|
||||||
|
key: "keyaa1",
|
||||||
|
value: :erlang.term_to_binary(subkey1: "val1", subkey2: "val2", subkey3: "val3")
|
||||||
|
)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
post(conn, "/api/pleroma/admin/config", %{
|
||||||
|
configs: [
|
||||||
|
%{
|
||||||
|
group: config.group,
|
||||||
|
key: config.key,
|
||||||
|
subkeys: [":subkey1", ":subkey3"],
|
||||||
|
delete: "true"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
assert(
|
||||||
|
json_response(conn, 200) == %{
|
||||||
|
"configs" => [
|
||||||
|
%{
|
||||||
|
"group" => "pleroma",
|
||||||
|
"key" => "keyaa1",
|
||||||
|
"value" => [%{"tuple" => [":subkey2", "val2"]}]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "config mix tasks run" do
|
describe "config mix tasks run" do
|
||||||
|
|
Loading…
Reference in a new issue