Current section

Files

Jump to
ash_authentication lib ash_authentication add_ons log_out_everywhere verifier.ex
Raw

lib/ash_authentication/add_ons/log_out_everywhere/verifier.ex

# SPDX-FileCopyrightText: 2022 Alembic Pty Ltd
#
# SPDX-License-Identifier: MIT
defmodule AshAuthentication.AddOn.LogOutEverywhere.Verifier do
@moduledoc """
DSL verifier for the log-out-everywhere add-on.
"""
alias AshAuthentication.{AddOn.LogOutEverywhere, Info}
alias Spark.{Dsl.Verifier, Error.DslError}
@doc false
@spec verify(LogOutEverywhere.t(), map) :: :ok | {:error, Exception.t()}
def verify(_strategy, dsl_state) do
with :ok <- store_all_tokens_enabled(dsl_state) do
require_token_presence_enabled(dsl_state)
end
end
defp store_all_tokens_enabled(dsl_state) do
if Info.authentication_tokens_store_all_tokens?(dsl_state) do
:ok
else
configuration_error(dsl_state)
end
end
defp require_token_presence_enabled(dsl_state) do
if Info.authentication_tokens_require_token_presence_for_authentication?(dsl_state) do
:ok
else
configuration_error(dsl_state)
end
end
defp configuration_error(dsl_state) do
{:error,
DslError.exception(
module: Verifier.get_persisted(dsl_state, :module),
path: [:authentication, :add_ons, :log_out_everywhere],
message: """
Configuration error:
The log-out-everywhere extension requires that the `store_all_tokens?`
and `require_token_presence_for_authentication?` options be enabled.
```
authentication do
tokens do
store_all_tokens? true
require_token_presence_for_authentication? true
end
end
"""
)}
end
end