- Index: load :role; columns Role, Password (has_password?), OIDC; contrast fix. - Show: Role, OIDC (Linked/Not linked); has_password? for Password Authentication. - UserHelpers: has_password?/1, has_oidc?/1. Gettext: new strings and DE translations.
58 lines
1.6 KiB
Elixir
58 lines
1.6 KiB
Elixir
defmodule MvWeb.Helpers.UserHelpers do
|
|
@moduledoc """
|
|
Helper functions for user-related display in the web layer.
|
|
|
|
Provides utilities for showing authentication status without exposing
|
|
sensitive attributes (e.g. hashed_password).
|
|
"""
|
|
|
|
@doc """
|
|
Returns whether the user has password authentication set.
|
|
|
|
Only returns true when `hashed_password` is a non-empty string. This avoids
|
|
treating `nil`, empty string, or forbidden/redacted values (e.g. when the
|
|
attribute is not visible to the actor) as "has password".
|
|
|
|
## Examples
|
|
|
|
iex> user = %{hashed_password: nil}
|
|
iex> MvWeb.Helpers.UserHelpers.has_password?(user)
|
|
false
|
|
|
|
iex> user = %{hashed_password: "$2b$12$..."}
|
|
iex> MvWeb.Helpers.UserHelpers.has_password?(user)
|
|
true
|
|
|
|
iex> user = %{hashed_password: ""}
|
|
iex> MvWeb.Helpers.UserHelpers.has_password?(user)
|
|
false
|
|
"""
|
|
@spec has_password?(map() | struct()) :: boolean()
|
|
def has_password?(user) when is_map(user) do
|
|
case Map.get(user, :hashed_password) do
|
|
hash when is_binary(hash) and byte_size(hash) > 0 -> true
|
|
_ -> false
|
|
end
|
|
end
|
|
|
|
@doc """
|
|
Returns whether the user is linked via OIDC/SSO (has a non-empty oidc_id).
|
|
|
|
## Examples
|
|
|
|
iex> user = %{oidc_id: nil}
|
|
iex> MvWeb.Helpers.UserHelpers.has_oidc?(user)
|
|
false
|
|
|
|
iex> user = %{oidc_id: "sub-from-rauthy"}
|
|
iex> MvWeb.Helpers.UserHelpers.has_oidc?(user)
|
|
true
|
|
"""
|
|
@spec has_oidc?(map() | struct()) :: boolean()
|
|
def has_oidc?(user) when is_map(user) do
|
|
case Map.get(user, :oidc_id) do
|
|
id when is_binary(id) and byte_size(id) > 0 -> true
|
|
_ -> false
|
|
end
|
|
end
|
|
end
|