diff options
author | Mark Felder <feld@feld.me> | 2022-10-10 13:20:28 -0400 |
---|---|---|
committer | Mark Felder <feld@feld.me> | 2022-10-10 13:20:28 -0400 |
commit | b3a02c6b9f823798fb6e077cf36dcf123a3bad7e (patch) | |
tree | 315adc61df49588a6992e7c55021d13966b6240e /lib/pleroma/web/streamer.ex | |
parent | 7ac4e858a019891ce5873936db1b4a0ec0566a97 (diff) | |
parent | 8042e0ebe1277519d446a7e2fbcf17629c1ffab2 (diff) | |
download | pleroma-finch_everywhere.tar.gz |
Merge branch 'develop' into finch_everywherefinch_everywhere
Diffstat (limited to 'lib/pleroma/web/streamer.ex')
-rw-r--r-- | lib/pleroma/web/streamer.ex | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex index fe909df0a..3c0da5c27 100644 --- a/lib/pleroma/web/streamer.ex +++ b/lib/pleroma/web/streamer.ex @@ -37,7 +37,7 @@ defmodule Pleroma.Web.Streamer do {:ok, topic :: String.t()} | {:error, :bad_topic} | {:error, :unauthorized} def get_topic_and_add_socket(stream, user, oauth_token, params \\ %{}) do with {:ok, topic} <- get_topic(stream, user, oauth_token, params) do - add_socket(topic, user) + add_socket(topic, oauth_token) end end @@ -120,10 +120,10 @@ defmodule Pleroma.Web.Streamer do end @doc "Registers the process for streaming. Use `get_topic/3` to get the full authorized topic." - def add_socket(topic, user) do + def add_socket(topic, oauth_token) do if should_env_send?() do - auth? = if user, do: true - Registry.register(@registry, topic, auth?) + oauth_token_id = if oauth_token, do: oauth_token.id, else: false + Registry.register(@registry, topic, oauth_token_id) end {:ok, topic} @@ -338,6 +338,22 @@ defmodule Pleroma.Web.Streamer do end end + def close_streams_by_oauth_token(oauth_token) do + if should_env_send?() do + Registry.select( + @registry, + [ + { + {:"$1", :"$2", :"$3"}, + [{:==, :"$3", oauth_token.id}], + [:"$2"] + } + ] + ) + |> Enum.each(fn pid -> send(pid, :close) end) + end + end + # In test environement, only return true if the registry is started. # In benchmark environment, returns false. # In any other environment, always returns true. |