Browse Source

Return 403 on oauth token exchange for a deactivated user

tags/v1.1.4
eugenijm 5 years ago
parent
commit
7aa53d52bd
2 changed files with 32 additions and 0 deletions
  1. +6
    -0
      lib/pleroma/web/oauth/oauth_controller.ex
  2. +26
    -0
      test/web/oauth/oauth_controller_test.exs

+ 6
- 0
lib/pleroma/web/oauth/oauth_controller.ex View File

@@ -152,6 +152,7 @@ defmodule Pleroma.Web.OAuth.OAuthController do
with {_, {:ok, %User{} = user}} <- {:get_user, Authenticator.get_user(conn)},
%App{} = app <- get_app_from_request(conn, params),
{:auth_active, true} <- {:auth_active, User.auth_active?(user)},
{:user_active, true} <- {:user_active, !user.info.deactivated},
scopes <- oauth_scopes(params, app.scopes),
[] <- scopes -- app.scopes,
true <- Enum.any?(scopes),
@@ -175,6 +176,11 @@ defmodule Pleroma.Web.OAuth.OAuthController do
|> put_status(:forbidden)
|> json(%{error: "Your login is missing a confirmed e-mail address"})

{:user_active, false} ->
conn
|> put_status(:forbidden)
|> json(%{error: "Your account is currently disabled"})

_error ->
put_status(conn, 400)
|> json(%{error: "Invalid credentials"})


+ 26
- 0
test/web/oauth/oauth_controller_test.exs View File

@@ -327,6 +327,32 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do
refute Map.has_key?(resp, "access_token")
end

test "rejects token exchange for valid credentials belonging to deactivated user" do
password = "testpassword"

user =
insert(:user,
password_hash: Comeonin.Pbkdf2.hashpwsalt(password),
info: %{deactivated: true}
)

app = insert(:oauth_app)

conn =
build_conn()
|> post("/oauth/token", %{
"grant_type" => "password",
"username" => user.nickname,
"password" => password,
"client_id" => app.client_id,
"client_secret" => app.client_secret
})

assert resp = json_response(conn, 403)
assert %{"error" => _} = resp
refute Map.has_key?(resp, "access_token")
end

test "rejects an invalid authorization code" do
app = insert(:oauth_app)



Loading…
Cancel
Save