Admin config fix
This commit is contained in:
		
							parent
							
								
									dd96be5c8b
								
							
						
					
					
						commit
						5e72554f3c
					
				
					 4 changed files with 26 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -564,6 +564,7 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret
 | 
			
		|||
 | 
			
		||||
## `/api/pleroma/admin/config`
 | 
			
		||||
### List config settings
 | 
			
		||||
List config settings only works with `:pleroma => :instance => :dynamic_configuration` setting to `true`.
 | 
			
		||||
- Method `GET`
 | 
			
		||||
- Params: none
 | 
			
		||||
- Response:
 | 
			
		||||
| 
						 | 
				
			
			@ -582,6 +583,7 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret
 | 
			
		|||
 | 
			
		||||
## `/api/pleroma/admin/config`
 | 
			
		||||
### Update config settings
 | 
			
		||||
Updating config settings only works with `:pleroma => :instance => :dynamic_configuration` setting to `true`.
 | 
			
		||||
Module name can be passed as string, which starts with `Pleroma`, e.g. `"Pleroma.Upload"`.
 | 
			
		||||
Atom keys and values can be passed with `:` in the beginning, e.g. `":upload"`.
 | 
			
		||||
Tuples can be passed as `{"tuple": ["first_val", Pleroma.Module, []]}`.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,6 +84,7 @@ defp do_convert(entity) when is_map(entity) do
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  defp do_convert({:dispatch, [entity]}), do: %{"tuple" => [":dispatch", [inspect(entity)]]}
 | 
			
		||||
  defp do_convert({:partial_chain, entity}), do: %{"tuple" => [":partial_chain", inspect(entity)]}
 | 
			
		||||
 | 
			
		||||
  defp do_convert(entity) when is_tuple(entity),
 | 
			
		||||
    do: %{"tuple" => do_convert(Tuple.to_list(entity))}
 | 
			
		||||
| 
						 | 
				
			
			@ -113,11 +114,15 @@ def transform(entity), do: :erlang.term_to_binary(entity)
 | 
			
		|||
  defp do_transform(%Regex{} = entity) when is_map(entity), do: entity
 | 
			
		||||
 | 
			
		||||
  defp do_transform(%{"tuple" => [":dispatch", [entity]]}) do
 | 
			
		||||
    cleaned_string = String.replace(entity, ~r/[^\w|^{:,[|^,|^[|^\]^}|^\/|^\.|^"]^\s/, "")
 | 
			
		||||
    {dispatch_settings, []} = Code.eval_string(cleaned_string, [], requires: [], macros: [])
 | 
			
		||||
    {dispatch_settings, []} = do_eval(entity)
 | 
			
		||||
    {:dispatch, [dispatch_settings]}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  defp do_transform(%{"tuple" => [":partial_chain", entity]}) do
 | 
			
		||||
    {partial_chain, []} = do_eval(entity)
 | 
			
		||||
    {:partial_chain, partial_chain}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  defp do_transform(%{"tuple" => entity}) do
 | 
			
		||||
    Enum.reduce(entity, {}, fn val, acc -> Tuple.append(acc, do_transform(val)) end)
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -149,4 +154,9 @@ defp do_transform_string(value) do
 | 
			
		|||
      do: String.to_existing_atom("Elixir." <> value),
 | 
			
		||||
      else: value
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  defp do_eval(entity) do
 | 
			
		||||
    cleaned_string = String.replace(entity, ~r/[^\w|^{:,[|^,|^[|^\]^}|^\/|^\.|^"]^\s/, "")
 | 
			
		||||
    Code.eval_string(cleaned_string, [], requires: [], macros: [])
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1571,7 +1571,8 @@ test "common config example", %{conn: conn} do
 | 
			
		|||
                %{"tuple" => [":method", "Pleroma.Captcha.Kocaptcha"]},
 | 
			
		||||
                %{"tuple" => [":seconds_valid", 60]},
 | 
			
		||||
                %{"tuple" => [":path", ""]},
 | 
			
		||||
                %{"tuple" => [":key1", nil]}
 | 
			
		||||
                %{"tuple" => [":key1", nil]},
 | 
			
		||||
                %{"tuple" => [":partial_chain", "&:hackney_connect.partial_chain/1"]}
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
| 
						 | 
				
			
			@ -1587,7 +1588,8 @@ test "common config example", %{conn: conn} do
 | 
			
		|||
                     %{"tuple" => [":method", "Pleroma.Captcha.Kocaptcha"]},
 | 
			
		||||
                     %{"tuple" => [":seconds_valid", 60]},
 | 
			
		||||
                     %{"tuple" => [":path", ""]},
 | 
			
		||||
                     %{"tuple" => [":key1", nil]}
 | 
			
		||||
                     %{"tuple" => [":key1", nil]},
 | 
			
		||||
                     %{"tuple" => [":partial_chain", "&:hackney_connect.partial_chain/1"]}
 | 
			
		||||
                   ]
 | 
			
		||||
                 }
 | 
			
		||||
               ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -238,6 +238,14 @@ test "simple keyword" do
 | 
			
		|||
      assert Config.from_binary(binary) == [key: "value"]
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test "keyword with partial_chain key" do
 | 
			
		||||
      binary =
 | 
			
		||||
        Config.transform([%{"tuple" => [":partial_chain", "&:hackney_connect.partial_chain/1"]}])
 | 
			
		||||
 | 
			
		||||
      assert binary == :erlang.term_to_binary(partial_chain: &:hackney_connect.partial_chain/1)
 | 
			
		||||
      assert Config.from_binary(binary) == [partial_chain: &:hackney_connect.partial_chain/1]
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test "keyword" do
 | 
			
		||||
      binary =
 | 
			
		||||
        Config.transform([
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue