diff --git a/lib/console/plural/models.ex b/lib/console/plural/models.ex index 22e570d3e1..86a2dc9ab9 100644 --- a/lib/console/plural/models.ex +++ b/lib/console/plural/models.ex @@ -19,7 +19,7 @@ defmodule Console.Plural.Repository do end defmodule Console.Plural.OIDCSettings do - defstruct [:authMethod, :domainKey, :uriFormat, :subdomain] + defstruct [:authMethod, :domainKey, :uriFormat, :uriFormats, :subdomain] end defmodule Console.Plural.ProviderBinding do diff --git a/lib/console/plural/queries.ex b/lib/console/plural/queries.ex index 04a76542a4..baafb25b55 100644 --- a/lib/console/plural/queries.ex +++ b/lib/console/plural/queries.ex @@ -55,6 +55,7 @@ defmodule Console.Plural.Queries do oidcSettings { domainKey uriFormat + uriFormats authMethod subdomain } diff --git a/lib/console/services/plural.ex b/lib/console/services/plural.ex index 83d8ba6ae7..4ceaa772be 100644 --- a/lib/console/services/plural.ex +++ b/lib/console/services/plural.ex @@ -70,9 +70,9 @@ defmodule Console.Services.Plural do true) do with {:ok, %{id: me}} <- Users.me(), {:ok, %{id: inst_id} = installation} <- Repositories.get_installation(name), - {:ok, url} <- format_url(oidc_settings, context[name]), + {:ok, manifest} <- Manifest.get(), {:ok, _} <- Repositories.upsert_oidc_provider(inst_id, merge_provider(%{ - redirectUris: [url], + redirectUris: format_urls(oidc_settings, context[name], manifest), authMethod: method, bindings: [%{userId: me}] }, installation)), @@ -80,11 +80,14 @@ defmodule Console.Services.Plural do end def configure_oidc(_, _, _), do: :ok - def format_url(%{uriFormat: uri} = oidc_settings, ctx) do - with {:ok, manifest} <- Manifest.get() do - uri = format_oidc(:domain, uri, oidc_settings, ctx) - {:ok, format_oidc(:subdomain, uri, oidc_settings, manifest)} - end + defp format_urls(%{uriFormats: [_ | _] = uris} = settings, ctx, man), + do: Enum.map(uris, &format_url(&1, settings, ctx, man)) + defp format_urls(%{uriFormat: uri} = settings, ctx, man), + do: [format_url(uri, settings, ctx, man)] + + defp format_url(uri, oidc_settings, ctx, manifest) do + uri = format_oidc(:domain, uri, oidc_settings, ctx) + format_oidc(:subdomain, uri, oidc_settings, manifest) end defp format_oidc(:domain, uri, %{domainKey: key}, ctx) when is_binary(key),