1 defmodule Pleroma.Web.OAuth.Token do
6 alias Pleroma.{User, Repo}
7 alias Pleroma.Web.OAuth.{Token, App, Authorization}
9 schema "oauth_tokens" do
10 field(:token, :string)
11 field(:refresh_token, :string)
12 field(:valid_until, :naive_datetime)
13 belongs_to(:user, Pleroma.User)
19 def exchange_token(app, auth) do
20 with {:ok, auth} <- Authorization.use_token(auth),
21 true <- auth.app_id == app.id do
22 create_token(app, Repo.get(User, auth.user_id))
26 def create_token(%App{} = app, %User{} = user) do
27 token = :crypto.strong_rand_bytes(32) |> Base.url_encode64()
28 refresh_token = :crypto.strong_rand_bytes(32) |> Base.url_encode64()
32 refresh_token: refresh_token,
35 valid_until: NaiveDateTime.add(NaiveDateTime.utc_now(), 60 * 10)
41 def delete_user_tokens(%User{id: user_id}) do
43 t in Pleroma.Web.OAuth.Token,
44 where: t.user_id == ^user_id