From a1ed3758cfae244cf8530d06f410193e15bd7ea2 Mon Sep 17 00:00:00 2001 From: Benjamin Milde Date: Sat, 30 Dec 2023 19:59:49 +0100 Subject: [PATCH] Integrate with new server_info callback on endpoints --- lib/desktop/endpoint.ex | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/desktop/endpoint.ex b/lib/desktop/endpoint.ex index 6beabb2..ed660ab 100644 --- a/lib/desktop/endpoint.ex +++ b/lib/desktop/endpoint.ex @@ -1,14 +1,33 @@ defmodule Desktop.Endpoint do @doc false defmacro __using__(opts) do + scheme = Keyword.get(opts, :desktop_scheme, :http) + quote do use Phoenix.Endpoint, unquote(opts) defoverridable url: 0 def url do url = super() - endpoint = Module.safe_concat(__MODULE__, HTTP) - String.replace(url, ":0", ":#{:ranch.get_port(endpoint)}") + scheme = unquote(scheme) + + case Keyword.get(config(scheme), :port, 0) do + 0 -> String.replace(url, ":0", ":#{get_dynamic_port(scheme)}") + port -> url + end + end + + if Version.match?(:phoenix |> Application.spec(:vsn) |> List.to_string(), "~> 1.7.10") do + def get_dynamic_port(scheme) do + {:ok, {_ip, port}} = server_info(scheme) + port + end + else + # Supports only cowboy adapter for phoenix + def get_dynamic_port(scheme) do + ref = Module.safe_concat(__MODULE__, scheme |> Atom.to_string() |> String.upcase()) + :ranch.get_port(ref) + end end end end