Skip to content

Commit

Permalink
Support any atom in ssl
Browse files Browse the repository at this point in the history
  • Loading branch information
josevalim committed May 17, 2024
1 parent 6bbfbb6 commit 283af43
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 10 deletions.
18 changes: 8 additions & 10 deletions lib/ecto/repo/supervisor.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ defmodule Ecto.Repo.Supervisor do
use Supervisor

@defaults [timeout: 15000, pool_size: 10]
@atom_url_query_params ["ssl"]
@integer_url_query_params ["timeout", "pool_size", "idle_interval"]

@doc """
Expand Down Expand Up @@ -130,18 +131,15 @@ defmodule Ecto.Repo.Supervisor do
defp parse_uri_query(%URI{query: query} = url) do
query
|> URI.query_decoder()
|> Enum.reduce([], fn
{"ssl", "true"}, acc ->
[{:ssl, true}] ++ acc
|> Enum.map(fn
{key, value} when key in @atom_url_query_params ->
{String.to_atom(key), String.to_atom(value)}

{"ssl", "false"}, acc ->
[{:ssl, false}] ++ acc
{key, value} when key in @integer_url_query_params ->
{String.to_atom(key), parse_integer!(key, value, url)}

{key, value}, acc when key in @integer_url_query_params ->
[{String.to_atom(key), parse_integer!(key, value, url)}] ++ acc

{key, value}, acc ->
[{String.to_atom(key), value}] ++ acc
{key, value} ->
{String.to_atom(key), value}
end)
end

Expand Down
5 changes: 5 additions & 0 deletions test/ecto/repo/supervisor_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,11 @@ defmodule Ecto.Repo.SupervisorTest do
url = parse_url(encoded_url)
assert {:ssl, true} in url
assert {:timeout, 1515} in url

encoded_url = URI.encode("ecto://eric:it+й@host:12345/mydb?ssl=verify_full&timeout=1515")
url = parse_url(encoded_url)
assert {:ssl, :verify_full} in url
assert {:timeout, 1515} in url
end

test "supports integer query string options" do
Expand Down

0 comments on commit 283af43

Please sign in to comment.