Packages
ash_authentication
4.6.1
5.0.0-rc.12
5.0.0-rc.11
5.0.0-rc.10
5.0.0-rc.9
5.0.0-rc.8
5.0.0-rc.7
5.0.0-rc.6
5.0.0-rc.5
5.0.0-rc.4
5.0.0-rc.3
5.0.0-rc.2
5.0.0-rc.1
5.0.0-rc.0
4.14.1
4.14.0
4.13.7
4.13.6
4.13.5
4.13.4
4.13.3
4.13.2
retired
4.13.1
retired
4.13.0
4.12.0
4.11.0
4.10.0
4.9.9
4.9.8
4.9.7
4.9.6
4.9.5
4.9.4
4.9.3
4.9.2
4.9.1
4.9.0
4.8.7
4.8.6
4.8.5
4.8.3
4.8.2
4.8.1
4.8.0
4.7.6
4.7.5
4.7.4
4.7.3
4.7.2
4.7.1
4.7.0
4.6.4
4.6.3
4.6.2
4.6.1
4.6.0
4.5.6
4.5.5
4.5.4
4.5.3
4.5.2
4.5.1
4.5.0
4.4.9
4.4.8
4.4.7
4.4.6
4.4.5
4.4.4
4.4.3
4.4.2
4.4.1
4.4.0
4.3.12
4.3.11
4.3.10
4.3.9
4.3.8
4.3.7
4.3.6
4.3.5
4.3.4
4.3.3
4.3.2
4.3.1
4.3.0
4.2.7
4.2.6
4.2.5
4.2.4
4.2.3
4.2.2
4.2.1
4.2.0
4.1.0
4.0.4
4.0.3
4.0.2
4.0.1
4.0.0
4.0.0-rc.6
4.0.0-rc.5
4.0.0-rc.3
4.0.0-rc.2
4.0.0-rc.1
4.0.0-rc.0
3.12.4
3.12.3
3.12.2
3.12.1
3.12.0
3.11.16
3.11.15
3.11.14
3.11.13
3.11.12
3.11.11
3.11.10
3.11.9
3.11.8
3.11.7
3.11.6
3.11.5
3.11.4
3.11.3
3.11.2
3.11.1
3.11.0
3.10.8
3.10.7
3.10.6
3.10.5
3.10.4
3.10.3
3.10.2
3.10.1
3.10.0
3.9.6
3.9.5
3.9.4
3.9.3
3.9.2
3.9.1
3.9.0
3.8.0
3.7.9
3.7.8
3.7.6
3.7.5
3.7.4
3.7.3
3.7.2
3.7.1
3.7.0
3.6.1
3.6.0
3.5.3
3.5.2
3.5.1
3.5.0
3.3.1
3.3.0
3.2.2
3.2.1
3.2.0
3.1.0
3.0.3
Authentication extension for the Ash Framework.
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/ash_authentication/strategies/apple/dsl.ex
defmodule AshAuthentication.Strategy.Apple.Dsl do
@moduledoc false
alias AshAuthentication.Strategy.{Custom, Oidc}
@doc false
@spec dsl :: Custom.entity()
def dsl do
secret_type = AshAuthentication.Dsl.secret_type()
Oidc.Dsl.dsl()
|> Map.merge(%{
name: :apple,
args: [{:optional, :name, :apple}],
describe: """
Provides a pre-configured authentication strategy for [Apple Sign In](https://developer.apple.com/sign-in-with-apple/).
This strategy is built using the `:oidc` strategy, and thus provides all the same
configuration options should you need them.
## More documentation:
- The [Apple Sign In Documentation](https://developer.apple.com/documentation/sign_in_with_apple).
- The [OIDC documentation](`AshAuthentication.Strategy.Oidc`)
#### Strategy defaults:
#{strategy_override_docs(Assent.Strategy.Apple)}
""",
auto_set_fields: strategy_fields(Assent.Strategy.Apple, icon: :apple),
schema: patch_schema(secret_type)
})
end
defp patch_schema(secret_type) do
Oidc.Dsl.dsl()
|> Map.get(:schema, [])
|> Keyword.merge(
team_id: [
type: secret_type,
doc: "The Apple team ID associated with the application.",
required: true
],
private_key_id: [
type: secret_type,
doc: "The private key ID used for signing the JWT token.",
required: true
],
private_key_path: [
type: secret_type,
doc: "The path to the private key file used for signing the JWT token.",
required: true
]
)
end
defp strategy_fields(strategy, params) do
strategy.default_config([])
|> Enum.map(fn
{:client_authentication_method, method} ->
{:client_authentication_method, method}
{:openid_configuration, config} ->
{:openid_configuration, atomize_keys(config)}
{key, value} ->
{key, value}
end)
|> Keyword.put(:assent_strategy, strategy)
|> Keyword.merge(params)
end
# sobelow_skip ["DOS.StringToAtom"]
defp atomize_keys(map) do
map
|> Enum.map(fn {key, value} -> {String.to_atom(key), value} end)
|> Enum.into(%{})
end
defp strategy_override_docs(strategy) do
defaults =
strategy.default_config([])
|> Enum.map_join(
".\n",
fn {key, value} ->
" * `#{inspect(key)}` is set to `#{inspect(value)}`"
end
)
"""
The following defaults are applied:
#{defaults}.
"""
end
end