diff --git a/lib/ret/hub.ex b/lib/ret/hub.ex index 066d118bb..425d147bb 100644 --- a/lib/ret/hub.ex +++ b/lib/ret/hub.ex @@ -547,6 +547,8 @@ defmodule Ret.Hub do def changeset_for_entry_mode(%Hub{} = hub, entry_mode), do: hub |> cast(%{entry_mode: entry_mode}, [:entry_mode]) + def changeset_for_closed_room_name(hub), do: hub |> cast(%{name: "closed"}, [:name]) + def changeset_for_new_host(%Hub{} = hub, host), do: hub |> cast(%{host: host}, [:host]) def changeset_for_creator_assignment( diff --git a/lib/ret_web/channels/hub_channel.ex b/lib/ret_web/channels/hub_channel.ex index 28cbab6ee..16a118c0e 100644 --- a/lib/ret_web/channels/hub_channel.ex +++ b/lib/ret_web/channels/hub_channel.ex @@ -714,6 +714,14 @@ defmodule RetWeb.HubChannel do end end + defp maybe_scrub_room_data(hub, entry_mode) do + if entry_mode == :deny do + Hub.changeset_for_closed_room_name(hub) + else + hub + end + end + defp handle_entry_mode_change(socket, entry_mode) do hub = socket |> hub_for_socket account = Guardian.Phoenix.Socket.current_resource(socket) @@ -721,6 +729,7 @@ defmodule RetWeb.HubChannel do if account |> can?(close_hub(hub)) do hub |> Hub.changeset_for_entry_mode(entry_mode) + |> maybe_scrub_room_data(entry_mode) |> Repo.update!() |> Repo.preload(Hub.hub_preloads()) |> broadcast_hub_refresh!(socket, ["entry_mode"]) diff --git a/lib/ret_web/controllers/api/v1/hub_controller.ex b/lib/ret_web/controllers/api/v1/hub_controller.ex index c873a85b3..170d63692 100644 --- a/lib/ret_web/controllers/api/v1/hub_controller.ex +++ b/lib/ret_web/controllers/api/v1/hub_controller.ex @@ -84,6 +84,7 @@ defmodule RetWeb.Api.V1.HubController do Hub |> Repo.get_by(hub_sid: hub_sid) |> Hub.changeset_for_entry_mode(:deny) + |> Hub.changeset_for_closed_room_name() |> Repo.update!() conn |> send_resp(200, "OK") diff --git a/test/ret/hub_test.exs b/test/ret/hub_test.exs index 522177d12..1439aa51f 100644 --- a/test/ret/hub_test.exs +++ b/test/ret/hub_test.exs @@ -46,10 +46,15 @@ defmodule Ret.HubTest do %{join_hub: true} = hub |> Hub.perms_for_account(nil) - hub = hub |> Hub.changeset_for_entry_mode(:deny) |> Repo.update!() + hub = hub + |> Hub.changeset_for_entry_mode(:deny) + |> Hub.changeset_for_closed_room_name() + |> Repo.update!() %{join_hub: false} = hub |> Hub.perms_for_account(nil) + %{name: "closed"} = hub + hub = hub |> Hub.changeset_for_entry_mode(:allow) |> Repo.update!() %{join_hub: true} = hub |> Hub.perms_for_account(nil) diff --git a/test/ret_web/controllers/api/media_search_controller_test.exs b/test/ret_web/controllers/api/media_search_controller_test.exs index 2d50f2b70..ab172e62d 100644 --- a/test/ret_web/controllers/api/media_search_controller_test.exs +++ b/test/ret_web/controllers/api/media_search_controller_test.exs @@ -206,7 +206,10 @@ defmodule RetWeb.MediaSearchControllerTest do assert length(Enum.filter(entries, fn e -> e["id"] == private_hub_2.hub_sid end)) == 1 # Close the first hub - private_hub |> Hub.changeset_for_entry_mode(:deny) |> Repo.update!() + private_hub + |> Hub.changeset_for_entry_mode(:deny) + |> Hub.changeset_for_closed_room_name() + |> Repo.update!() resp = conn