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 /lib | |
parent | 273cda63ad79b61f4d37e4b7603694908e894e4f (diff) | |
download | pleroma-21395aa5090f2a53bdbe0ef5fac46693d16025ed.tar.gz pleroma-21395aa5090f2a53bdbe0ef5fac46693d16025ed.zip |
Allow authenticating via client-sent events
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/mastodon_api/websocket_handler.ex | 36 | ||||
-rw-r--r-- | lib/pleroma/web/views/streamer_view.ex | 1 |
2 files changed, 37 insertions, 0 deletions
diff --git a/lib/pleroma/web/mastodon_api/websocket_handler.ex b/lib/pleroma/web/mastodon_api/websocket_handler.ex index a42a9a63c..6233c3340 100644 --- a/lib/pleroma/web/mastodon_api/websocket_handler.ex +++ b/lib/pleroma/web/mastodon_api/websocket_handler.ex @@ -214,6 +214,42 @@ defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do end end + defp handle_client_event( + %{"type" => "pleroma.authenticate", "token" => access_token} = _params, + state + ) do + with {:auth, nil, nil} <- {:auth, state.user, state.oauth_token}, + {:ok, user, oauth_token} <- authenticate_request(access_token, nil) do + {[ + {:text, + StreamerView.render("pleroma_respond.json", %{ + type: "pleroma.authenticate", + result: "success" + })} + ], %{state | user: user, oauth_token: oauth_token}} + else + {:auth, _, _} -> + {[ + {:text, + StreamerView.render("pleroma_respond.json", %{ + type: "pleroma.authenticate", + result: "error", + error: :already_authenticated + })} + ], state} + + _ -> + {[ + {:text, + StreamerView.render("pleroma_respond.json", %{ + type: "pleroma.authenticate", + result: "error", + error: :unauthorized + })} + ], state} + end + end + defp handle_client_event(params, state) do Logger.error("#{__MODULE__} received unknown event: #{inspect(params)}") {[], state} diff --git a/lib/pleroma/web/views/streamer_view.ex b/lib/pleroma/web/views/streamer_view.ex index 19f098783..0cdcb1918 100644 --- a/lib/pleroma/web/views/streamer_view.ex +++ b/lib/pleroma/web/views/streamer_view.ex @@ -152,5 +152,6 @@ defmodule Pleroma.Web.StreamerView do defp maybe_error(%{error: :bad_topic}), do: %{error: "bad_topic"} defp maybe_error(%{error: :unauthorized}), do: %{error: "unauthorized"} + defp maybe_error(%{error: :already_authenticated}), do: %{error: "already_authenticated"} defp maybe_error(_), do: %{} end |