diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/plugs/authentication_plug_test.exs | 7 | ||||
| -rw-r--r-- | test/plugs/legacy_authentication_plug_test.exs | 6 | ||||
| -rw-r--r-- | test/plugs/oauth_scopes_plug_test.exs | 3 | ||||
| -rw-r--r-- | test/web/auth/basic_auth_test.exs | 46 | 
4 files changed, 58 insertions, 4 deletions
| diff --git a/test/plugs/authentication_plug_test.exs b/test/plugs/authentication_plug_test.exs index ae2f3f8ec..646bda9d3 100644 --- a/test/plugs/authentication_plug_test.exs +++ b/test/plugs/authentication_plug_test.exs @@ -6,6 +6,8 @@ defmodule Pleroma.Plugs.AuthenticationPlugTest do    use Pleroma.Web.ConnCase, async: true    alias Pleroma.Plugs.AuthenticationPlug +  alias Pleroma.Plugs.OAuthScopesPlug +  alias Pleroma.Plugs.PlugHelper    alias Pleroma.User    import ExUnit.CaptureLog @@ -36,13 +38,16 @@ defmodule Pleroma.Plugs.AuthenticationPlugTest do      assert ret_conn == conn    end -  test "with a correct password in the credentials, it assigns the auth_user", %{conn: conn} do +  test "with a correct password in the credentials, " <> +         "it assigns the auth_user and marks OAuthScopesPlug as skipped", +       %{conn: conn} do      conn =        conn        |> assign(:auth_credentials, %{password: "guy"})        |> AuthenticationPlug.call(%{})      assert conn.assigns.user == conn.assigns.auth_user +    assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug)    end    test "with a wrong password in the credentials, it does nothing", %{conn: conn} do diff --git a/test/plugs/legacy_authentication_plug_test.exs b/test/plugs/legacy_authentication_plug_test.exs index 7559de7d3..3b8c07627 100644 --- a/test/plugs/legacy_authentication_plug_test.exs +++ b/test/plugs/legacy_authentication_plug_test.exs @@ -8,6 +8,8 @@ defmodule Pleroma.Plugs.LegacyAuthenticationPlugTest do    import Pleroma.Factory    alias Pleroma.Plugs.LegacyAuthenticationPlug +  alias Pleroma.Plugs.OAuthScopesPlug +  alias Pleroma.Plugs.PlugHelper    alias Pleroma.User    setup do @@ -36,7 +38,8 @@ defmodule Pleroma.Plugs.LegacyAuthenticationPlugTest do    end    @tag :skip_on_mac -  test "it authenticates the auth_user if present and password is correct and resets the password", +  test "if `auth_user` is present and password is correct, " <> +         "it authenticates the user, resets the password, marks OAuthScopesPlug as skipped",         %{           conn: conn,           user: user @@ -49,6 +52,7 @@ defmodule Pleroma.Plugs.LegacyAuthenticationPlugTest do      conn = LegacyAuthenticationPlug.call(conn, %{})      assert conn.assigns.user.id == user.id +    assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug)    end    @tag :skip_on_mac diff --git a/test/plugs/oauth_scopes_plug_test.exs b/test/plugs/oauth_scopes_plug_test.exs index 85105f968..d855d4f54 100644 --- a/test/plugs/oauth_scopes_plug_test.exs +++ b/test/plugs/oauth_scopes_plug_test.exs @@ -7,7 +7,6 @@ defmodule Pleroma.Plugs.OAuthScopesPlugTest do    alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug    alias Pleroma.Plugs.OAuthScopesPlug -  alias Pleroma.Plugs.PlugHelper    alias Pleroma.Repo    import Mock @@ -21,7 +20,7 @@ defmodule Pleroma.Plugs.OAuthScopesPlugTest do      with_mock OAuthScopesPlug, [:passthrough], perform: &passthrough([&1, &2]) do        conn =          conn -        |> PlugHelper.append_to_skipped_plugs(OAuthScopesPlug) +        |> OAuthScopesPlug.skip_plug()          |> OAuthScopesPlug.call(%{scopes: ["random_scope"]})        refute called(OAuthScopesPlug.perform(:_, :_)) diff --git a/test/web/auth/basic_auth_test.exs b/test/web/auth/basic_auth_test.exs new file mode 100644 index 000000000..64f8a6863 --- /dev/null +++ b/test/web/auth/basic_auth_test.exs @@ -0,0 +1,46 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.Auth.BasicAuthTest do +  use Pleroma.Web.ConnCase + +  import Pleroma.Factory + +  test "with HTTP Basic Auth used, grants access to OAuth scope-restricted endpoints", %{ +    conn: conn +  } do +    user = insert(:user) +    assert Comeonin.Pbkdf2.checkpw("test", user.password_hash) + +    basic_auth_contents = +      (URI.encode_www_form(user.nickname) <> ":" <> URI.encode_www_form("test")) +      |> Base.encode64() + +    # Succeeds with HTTP Basic Auth +    response = +      conn +      |> put_req_header("authorization", "Basic " <> basic_auth_contents) +      |> get("/api/v1/accounts/verify_credentials") +      |> json_response(200) + +    user_nickname = user.nickname +    assert %{"username" => ^user_nickname} = response + +    # Succeeds with a properly scoped OAuth token +    valid_token = insert(:oauth_token, scopes: ["read:accounts"]) + +    conn +    |> put_req_header("authorization", "Bearer #{valid_token.token}") +    |> get("/api/v1/accounts/verify_credentials") +    |> json_response(200) + +    # Fails with a wrong-scoped OAuth token (proof of restriction) +    invalid_token = insert(:oauth_token, scopes: ["read:something"]) + +    conn +    |> put_req_header("authorization", "Bearer #{invalid_token.token}") +    |> get("/api/v1/accounts/verify_credentials") +    |> json_response(403) +  end +end | 
