Packages
potionx
0.8.5
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.1.1
0.1.0
Potionx is a set of generators and functions that speeds up the process of setting up and deploying a full-stack application that uses Elixir with GraphQL for the server-side component and Vue for the frontend component.
Current section
Files
Jump to
Current section
Files
lib/potionx/auth/assent_azure_common_strategy.ex
defmodule Potionx.Auth.Assent.AzureADCommonStrategy do
@moduledoc false
use Assent.Strategy.OIDC.Base
alias Assent.{Config, Strategy.OIDC}
@impl true
def default_config(config) do
Keyword.merge(
[
authorization_params: [scope: "email profile", response_mode: "form_post"],
client_auth_method: :client_secret_post,
site: "https://login.microsoftonline.com/common/v2.0"
],
config
)
end
@impl true
def normalize(_config, user), do: {:ok, user}
@impl true
def fetch_user(config, token) do
with {:ok, issuer} <- fetch_iss(token["id_token"], config),
{:ok, config} <- update_issuer_in_config(config, issuer),
{:ok, jwt} <- OIDC.validate_id_token(config, token["id_token"]) do
Helpers.normalize_userinfo(jwt.claims)
end
end
defp fetch_iss(encoded, config) do
with [_, encoded, _] <- String.split(encoded, "."),
{:ok, json} <- Base.url_decode64(encoded, padding: false),
{:ok, claims} <- Config.json_library(config).decode(json) do
Map.fetch(claims, "iss")
else
{:error, error} -> {:error, error}
_any -> {:error, "The ID Token is not a valid JWT"}
end
end
defp update_issuer_in_config(config, issuer) do
openid_configuration = Map.put(config[:openid_configuration], "issuer", issuer)
{:ok, Keyword.put(config, :openid_configuration, openid_configuration)}
end
end