ce804f78eadbca7ba1678bbd93905965c1319c45
[akkoma] / lib / pleroma / user_invite_token.ex
1 defmodule Pleroma.UserInviteToken do
2 use Ecto.Schema
3
4 import Ecto.Changeset
5
6 alias Pleroma.UserInviteToken
7 alias Pleroma.Repo
8
9 schema "user_invite_tokens" do
10 field(:token, :string)
11 field(:used, :boolean, default: false)
12
13 timestamps()
14 end
15
16 def create_token do
17 token = :crypto.strong_rand_bytes(32) |> Base.url_encode64()
18
19 token = %UserInviteToken{
20 used: false,
21 token: token
22 }
23
24 Repo.insert(token)
25 end
26
27 def used_changeset(struct) do
28 struct
29 |> cast(%{}, [])
30 |> put_change(:used, true)
31 end
32
33 def mark_as_used(token) do
34 with %{used: false} = token <- Repo.get_by(UserInviteToken, %{token: token}),
35 {:ok, token} <- Repo.update(used_changeset(token)) do
36 {:ok, token}
37 else
38 _e -> {:error, token}
39 end
40 end
41 end