diff options
| author | tusooa <tusooa@kazv.moe> | 2023-03-31 23:19:57 -0400 | 
|---|---|---|
| committer | tusooa <tusooa@kazv.moe> | 2023-10-15 17:19:49 -0400 | 
| commit | 21395aa5090f2a53bdbe0ef5fac46693d16025ed (patch) | |
| tree | ac236fe9d154a9786c97079ba6a528a9113e7a5a /test | |
| parent | 273cda63ad79b61f4d37e4b7603694908e894e4f (diff) | |
| download | pleroma-21395aa5090f2a53bdbe0ef5fac46693d16025ed.tar.gz pleroma-21395aa5090f2a53bdbe0ef5fac46693d16025ed.zip  | |
Allow authenticating via client-sent events
Diffstat (limited to 'test')
| -rw-r--r-- | test/pleroma/integration/mastodon_websocket_test.exs | 81 | 
1 files changed, 81 insertions, 0 deletions
diff --git a/test/pleroma/integration/mastodon_websocket_test.exs b/test/pleroma/integration/mastodon_websocket_test.exs index 9db0f714f..827c7b5b0 100644 --- a/test/pleroma/integration/mastodon_websocket_test.exs +++ b/test/pleroma/integration/mastodon_websocket_test.exs @@ -224,6 +224,87 @@ defmodule Pleroma.Integration.MastodonWebsocketTest do        end)      end +    test "accepts valid token on client-sent event", %{token: token} do +      assert {:ok, pid} = start_socket() + +      WebsocketClient.send_text( +        pid, +        %{type: "pleroma.authenticate", token: token.token} |> Jason.encode!() +      ) + +      assert_receive {:text, raw_json}, 1_000 + +      assert {:ok, +              %{ +                "event" => "pleroma.respond", +                "payload" => %{"type" => "pleroma.authenticate", "result" => "success"} +              }} = decode_json(raw_json) + +      WebsocketClient.send_text(pid, %{type: "subscribe", stream: "user"} |> Jason.encode!()) +      assert_receive {:text, raw_json}, 1_000 + +      assert {:ok, +              %{ +                "event" => "pleroma.respond", +                "payload" => %{"type" => "subscribe", "result" => "success"} +              }} = decode_json(raw_json) +    end + +    test "rejects invalid token on client-sent event" do +      assert {:ok, pid} = start_socket() + +      WebsocketClient.send_text( +        pid, +        %{type: "pleroma.authenticate", token: "Something else"} |> Jason.encode!() +      ) + +      assert_receive {:text, raw_json}, 1_000 + +      assert {:ok, +              %{ +                "event" => "pleroma.respond", +                "payload" => %{ +                  "type" => "pleroma.authenticate", +                  "result" => "error", +                  "error" => "unauthorized" +                } +              }} = decode_json(raw_json) +    end + +    test "rejects new authenticate request if already logged-in", %{token: token} do +      assert {:ok, pid} = start_socket() + +      WebsocketClient.send_text( +        pid, +        %{type: "pleroma.authenticate", token: token.token} |> Jason.encode!() +      ) + +      assert_receive {:text, raw_json}, 1_000 + +      assert {:ok, +              %{ +                "event" => "pleroma.respond", +                "payload" => %{"type" => "pleroma.authenticate", "result" => "success"} +              }} = decode_json(raw_json) + +      WebsocketClient.send_text( +        pid, +        %{type: "pleroma.authenticate", token: "Something else"} |> Jason.encode!() +      ) + +      assert_receive {:text, raw_json}, 1_000 + +      assert {:ok, +              %{ +                "event" => "pleroma.respond", +                "payload" => %{ +                  "type" => "pleroma.authenticate", +                  "result" => "error", +                  "error" => "already_authenticated" +                } +              }} = decode_json(raw_json) +    end +      test "disconnect when token is revoked", %{app: app, user: user, token: token} do        assert {:ok, _} = start_socket("?stream=user:notification&access_token=#{token.token}")        assert {:ok, _} = start_socket("?stream=user&access_token=#{token.token}")  | 
