logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

config.ex (2462B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Config do
  5. @behaviour Pleroma.Config.Getting
  6. defmodule Error do
  7. defexception [:message]
  8. end
  9. @impl true
  10. def get(key), do: get(key, nil)
  11. @impl true
  12. def get([key], default), do: get(key, default)
  13. @impl true
  14. def get([_ | _] = path, default) do
  15. case fetch(path) do
  16. {:ok, value} -> value
  17. :error -> default
  18. end
  19. end
  20. @impl true
  21. def get(key, default) do
  22. Application.get_env(:pleroma, key, default)
  23. end
  24. def get!(key) do
  25. value = get(key, nil)
  26. if value == nil do
  27. raise(Error, message: "Missing configuration value: #{inspect(key)}")
  28. else
  29. value
  30. end
  31. end
  32. def fetch(key) when is_atom(key), do: fetch([key])
  33. def fetch([root_key | keys]) do
  34. Enum.reduce_while(keys, Application.fetch_env(:pleroma, root_key), fn
  35. key, {:ok, config} when is_map(config) or is_list(config) ->
  36. case Access.fetch(config, key) do
  37. :error ->
  38. {:halt, :error}
  39. value ->
  40. {:cont, value}
  41. end
  42. _key, _config ->
  43. {:halt, :error}
  44. end)
  45. end
  46. def put([key], value), do: put(key, value)
  47. def put([parent_key | keys], value) do
  48. parent =
  49. Application.get_env(:pleroma, parent_key, [])
  50. |> put_in(keys, value)
  51. Application.put_env(:pleroma, parent_key, parent)
  52. end
  53. def put(key, value) do
  54. Application.put_env(:pleroma, key, value)
  55. end
  56. def delete([key]), do: delete(key)
  57. def delete([parent_key | keys] = path) do
  58. with {:ok, _} <- fetch(path) do
  59. {_, parent} =
  60. parent_key
  61. |> get()
  62. |> get_and_update_in(keys, fn _ -> :pop end)
  63. Application.put_env(:pleroma, parent_key, parent)
  64. end
  65. end
  66. def delete(key) do
  67. Application.delete_env(:pleroma, key)
  68. end
  69. def restrict_unauthenticated_access?(resource, kind) do
  70. setting = get([:restrict_unauthenticated, resource, kind])
  71. if setting in [nil, :if_instance_is_private] do
  72. !get!([:instance, :public])
  73. else
  74. setting
  75. end
  76. end
  77. def oauth_consumer_strategies, do: get([:auth, :oauth_consumer_strategies], [])
  78. def oauth_consumer_enabled?, do: oauth_consumer_strategies() != []
  79. def feature_enabled?(feature_name) do
  80. get([:features, feature_name]) not in [nil, false, :disabled, :auto]
  81. end
  82. end