Merge branch 'docs/admin-api' into 'develop'
[akkoma] / lib / pleroma / user_invite_token.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.UserInviteToken do
6 use Ecto.Schema
7
8 import Ecto.Changeset
9
10 alias Pleroma.UserInviteToken
11 alias Pleroma.Repo
12
13 schema "user_invite_tokens" do
14 field(:token, :string)
15 field(:used, :boolean, default: false)
16
17 timestamps()
18 end
19
20 def create_token do
21 token = :crypto.strong_rand_bytes(32) |> Base.url_encode64()
22
23 token = %UserInviteToken{
24 used: false,
25 token: token
26 }
27
28 Repo.insert(token)
29 end
30
31 def used_changeset(struct) do
32 struct
33 |> cast(%{}, [])
34 |> put_change(:used, true)
35 end
36
37 def mark_as_used(token) do
38 with %{used: false} = token <- Repo.get_by(UserInviteToken, %{token: token}),
39 {:ok, token} <- Repo.update(used_changeset(token)) do
40 {:ok, token}
41 else
42 _e -> {:error, token}
43 end
44 end
45 end