Просмотр исходного кода

[#3112] Allowed revoking same-user token from any apps. Added tests.

test-speedup
Ivan Tashkinov 3 лет назад
Родитель
Сommit
d50a3345ae
3 измененных файлов: 39 добавлений и 4 удалений
  1. +1
    -1
      lib/pleroma/web/masto_fe_controller.ex
  2. +3
    -3
      lib/pleroma/web/o_auth/o_auth_controller.ex
  3. +35
    -0
      test/pleroma/web/o_auth/o_auth_controller_test.exs

+ 1
- 1
lib/pleroma/web/masto_fe_controller.ex Просмотреть файл

@@ -6,8 +6,8 @@ defmodule Pleroma.Web.MastoFEController do
use Pleroma.Web, :controller

alias Pleroma.User
alias Pleroma.Web.OAuth.Token
alias Pleroma.Web.MastodonAPI.AuthController
alias Pleroma.Web.OAuth.Token
alias Pleroma.Web.Plugs.EnsurePublicOrAuthenticatedPlug
alias Pleroma.Web.Plugs.OAuthScopesPlug



+ 3
- 3
lib/pleroma/web/o_auth/o_auth_controller.ex Просмотреть файл

@@ -379,9 +379,9 @@ defmodule Pleroma.Web.OAuth.OAuthController do
render_invalid_credentials_error(conn)
end

def token_revoke(%Plug.Conn{} = conn, %{"token" => _token} = params) do
with {:ok, app} <- Token.Utils.fetch_app(conn),
{:ok, %Token{} = oauth_token} <- RevokeToken.revoke(app, params) do
def token_revoke(%Plug.Conn{} = conn, %{"token" => token}) do
with {:ok, %Token{} = oauth_token} <- Token.get_by_token(token),
{:ok, oauth_token} <- RevokeToken.revoke(oauth_token) do
conn =
with session_token = AuthHelper.get_session_token(conn),
%Token{token: ^session_token} <- oauth_token do


+ 35
- 0
test/pleroma/web/o_auth/o_auth_controller_test.exs Просмотреть файл

@@ -1257,6 +1257,41 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do
end

describe "POST /oauth/revoke" do
test "when authenticated with request token, revokes it and clears it from session" do
oauth_token = insert(:oauth_token)

conn =
build_conn()
|> Plug.Session.call(Plug.Session.init(@session_opts))
|> fetch_session()
|> AuthHelper.put_session_token(oauth_token.token)
|> post("/oauth/revoke", %{"token" => oauth_token.token})

assert json_response(conn, 200)

refute AuthHelper.get_session_token(conn)
assert Token.get_by_token(oauth_token.token) == {:error, :not_found}
end

test "if request is authenticated with a different token, " <>
"revokes requested token but keeps session token" do
user = insert(:user)
oauth_token = insert(:oauth_token, user: user)
other_app_oauth_token = insert(:oauth_token, user: user)

conn =
build_conn()
|> Plug.Session.call(Plug.Session.init(@session_opts))
|> fetch_session()
|> AuthHelper.put_session_token(oauth_token.token)
|> post("/oauth/revoke", %{"token" => other_app_oauth_token.token})

assert json_response(conn, 200)

assert AuthHelper.get_session_token(conn) == oauth_token.token
assert Token.get_by_token(other_app_oauth_token.token) == {:error, :not_found}
end

test "returns 500 on bad request" do
response =
build_conn()


Загрузка…
Отмена
Сохранить