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