2019-07-10 05:13:23 +00:00
|
|
|
# Pleroma: A lightweight social networking server
|
2023-01-01 11:11:47 +00:00
|
|
|
# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
|
2019-07-10 05:13:23 +00:00
|
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
|
2019-05-06 17:51:03 +00:00
|
|
|
defmodule Pleroma.Web.OAuth.Token.Strategy.Revoke do
|
|
|
|
@moduledoc """
|
|
|
|
Functions for dealing with revocation.
|
|
|
|
"""
|
|
|
|
|
|
|
|
alias Pleroma.Repo
|
|
|
|
alias Pleroma.Web.OAuth.App
|
|
|
|
alias Pleroma.Web.OAuth.Token
|
|
|
|
|
|
|
|
@doc "Finds and revokes access token for app and by token"
|
|
|
|
@spec revoke(App.t(), map()) :: {:ok, Token.t()} | {:error, :not_found | Ecto.Changeset.t()}
|
|
|
|
def revoke(%App{} = app, %{"token" => token} = _attrs) do
|
|
|
|
with {:ok, token} <- Token.get_by_token(app, token),
|
|
|
|
do: revoke(token)
|
|
|
|
end
|
|
|
|
|
|
|
|
@doc "Revokes access token"
|
|
|
|
@spec revoke(Token.t()) :: {:ok, Token.t()} | {:error, Ecto.Changeset.t()}
|
|
|
|
def revoke(%Token{} = token) do
|
2022-08-19 18:58:57 +00:00
|
|
|
with {:ok, token} <- Repo.delete(token) do
|
|
|
|
Task.Supervisor.start_child(
|
|
|
|
Pleroma.TaskSupervisor,
|
|
|
|
Pleroma.Web.Streamer,
|
|
|
|
:close_streams_by_oauth_token,
|
|
|
|
[token],
|
|
|
|
restart: :transient
|
|
|
|
)
|
|
|
|
|
|
|
|
{:ok, token}
|
|
|
|
else
|
|
|
|
result -> result
|
|
|
|
end
|
2019-05-06 17:51:03 +00:00
|
|
|
end
|
|
|
|
end
|