Merge branch 'mastofe/system-font' into 'develop'
[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.{User, UserInviteToken, Repo}
7
8 schema "user_invite_tokens" do
9 field(:token, :string)
10 field(:used, :boolean, default: false)
11
12 timestamps()
13 end
14
15 def create_token do
16 token = :crypto.strong_rand_bytes(32) |> Base.url_encode64()
17
18 token = %UserInviteToken{
19 used: false,
20 token: token
21 }
22
23 Repo.insert(token)
24 end
25
26 def used_changeset(struct) do
27 struct
28 |> cast(%{}, [])
29 |> put_change(:used, true)
30 end
31
32 def mark_as_used(token) do
33 with %{used: false} = token <- Repo.get_by(UserInviteToken, %{token: token}),
34 {:ok, token} <- Repo.update(used_changeset(token)) do
35 {:ok, token}
36 else
37 _e -> {:error, token}
38 end
39 end
40 end