X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fadmin_api%2Fadmin_api_controller.ex;h=2314d32741fe0c42dbc6d979b364aa0dd103e5cd;hb=be2777715650d0ac80509f0bd22b4cea8641f9b3;hp=cc93c2309beb6966eae01ccd805ab5f9e0652b1c;hpb=60ba2339a244290f7353e8026032b1a5d185227c;p=akkoma diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index cc93c2309..2314d3274 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -36,19 +36,14 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do plug( OAuthScopesPlug, %{scopes: ["read:accounts"], admin: true} - when action in [:list_users, :user_show, :right_get, :invites] + when action in [:list_users, :user_show, :right_get] ) plug( OAuthScopesPlug, %{scopes: ["write:accounts"], admin: true} when action in [ - :get_invite_token, - :revoke_invite, - :email_invite, :get_password_reset, - :user_follow, - :user_unfollow, :user_delete, :users_create, :user_toggle_activation, @@ -61,6 +56,20 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do ] ) + plug(OAuthScopesPlug, %{scopes: ["read:invites"], admin: true} when action == :invites) + + plug( + OAuthScopesPlug, + %{scopes: ["write:invites"], admin: true} + when action in [:create_invite_token, :revoke_invite, :email_invite] + ) + + plug( + OAuthScopesPlug, + %{scopes: ["write:follows"], admin: true} + when action in [:user_follow, :user_unfollow, :relay_follow, :relay_unfollow] + ) + plug( OAuthScopesPlug, %{scopes: ["read:reports"], admin: true} @@ -70,7 +79,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do plug( OAuthScopesPlug, %{scopes: ["write:reports"], admin: true} - when action in [:report_update_state, :report_respond] + when action in [:reports_update] ) plug( @@ -94,7 +103,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do plug( OAuthScopesPlug, %{scopes: ["write"], admin: true} - when action in [:relay_follow, :relay_unfollow, :config_update] + when action == :config_update ) action_fallback(:errors) @@ -632,7 +641,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do def force_password_reset(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do users = nicknames |> Enum.map(&User.get_cached_by_nickname/1) - Enum.map(users, &User.force_password_reset_async/1) + Enum.each(users, &User.force_password_reset_async/1) ModerationLog.insert_log(%{ actor: admin, @@ -826,22 +835,28 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do else merged = Pleroma.Config.Holder.config() - |> DeepMerge.deep_merge(configs) - |> Enum.map(fn {group, value} -> - Enum.map(value, fn {key, value} -> + |> ConfigDB.merge(configs) + |> 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(configs[group][key], key) + end + + db_value = configs[group][key] + + merged_value = + if !is_nil(db_value) and Keyword.keyword?(db_value) and + ConfigDB.sub_key_full_update?(group, key, Keyword.keys(db_value)) do + ConfigDB.merge_group(group, key, value, db_value) + else + value end setting = %{ group: ConfigDB.convert(group), key: ConfigDB.convert(key), - value: ConfigDB.convert(value) + value: ConfigDB.convert(merged_value) } if db, do: Map.put(setting, :db, db), else: setting @@ -856,23 +871,26 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do def config_update(conn, %{"configs" => configs}) do with :ok <- configurable_from_database(conn) do - updated = + {_errors, results} = Enum.map(configs, fn %{"group" => group, "key" => key, "delete" => true} = params -> - with {:ok, config} <- - ConfigDB.delete(%{group: group, key: key, subkeys: params["subkeys"]}) do - config - end + ConfigDB.delete(%{group: group, key: key, subkeys: params["subkeys"]}) %{"group" => group, "key" => key, "value" => value} -> - with {:ok, config} <- - ConfigDB.update_or_create(%{group: group, key: key, value: value}) do - config - end + ConfigDB.update_or_create(%{group: group, key: key, value: value}) + end) + |> Enum.split_with(fn result -> elem(result, 0) == :error end) + + {deleted, updated} = + results + |> Enum.map(fn {:ok, config} -> + Map.put(config, :db, ConfigDB.get_db_keys(config)) + end) + |> Enum.split_with(fn config -> + Ecto.get_meta(config, :state) == :deleted end) - |> Enum.reject(&is_nil(&1)) - Pleroma.Config.TransferTask.load_and_update_env() + Pleroma.Config.TransferTask.load_and_update_env(deleted) Mix.Tasks.Pleroma.Config.run([ "migrate_from_db",