18 lines
733 B
Elixir
18 lines
733 B
Elixir
defmodule Mv.Membership.JoinRequest.Changes.SetConfirmServerMetadata do
|
|
@moduledoc """
|
|
Ash Change that sets server-side metadata for the public :confirm action.
|
|
|
|
Client may only send :email, :confirmation_token_hash, :payload (concept §2.3.2).
|
|
This change sets: status, submitted_at, source, schema_version so they cannot be forged.
|
|
"""
|
|
use Ash.Resource.Change
|
|
|
|
@impl true
|
|
def change(changeset, _opts, _context) do
|
|
changeset
|
|
|> Ash.Changeset.force_change_attribute(:status, "submitted")
|
|
|> Ash.Changeset.force_change_attribute(:submitted_at, DateTime.utc_now())
|
|
|> Ash.Changeset.force_change_attribute(:source, "public_join")
|
|
|> Ash.Changeset.force_change_attribute(:schema_version, 1)
|
|
end
|
|
end
|