Implement get/set visibility client endpoints
This commit is contained in:
parent
2088f0a869
commit
de950fc769
3 changed files with 91 additions and 3 deletions
|
@ -0,0 +1,58 @@
|
|||
defmodule MatrixServerWeb.Client.RoomDirectoryController do
|
||||
use MatrixServerWeb, :controller
|
||||
|
||||
import MatrixServerWeb.Error
|
||||
import Ecto.Query
|
||||
|
||||
alias MatrixServer.{Repo, Room, RoomServer}
|
||||
alias Plug.Conn
|
||||
|
||||
@doc """
|
||||
Gets the visibility of a given room on the server's public room directory.
|
||||
|
||||
Action for GET /_matrix/client/r0/directory/list/room/{roomId}.
|
||||
"""
|
||||
def get_visibility(conn, %{"room_id" => room_id}) do
|
||||
case Repo.one(from r in Room, where: r.id == ^room_id) do
|
||||
%Room{visibility: visibility} ->
|
||||
conn
|
||||
|> put_status(200)
|
||||
|> json(%{visibility: visibility})
|
||||
|
||||
nil ->
|
||||
put_error(conn, :not_found, "The room was not found.")
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Sets the visibility of a given room in the server's public room directory.
|
||||
|
||||
Only allow the creator of the room to change visibility.
|
||||
Action for PUT /_matrix/client/r0/directory/list/room/{roomId}.
|
||||
"""
|
||||
def set_visibility(%Conn{assigns: %{account: account}} = conn, %{"room_id" => room_id} = params) do
|
||||
visibility = Map.get(params, "visibility", "public")
|
||||
|
||||
if visibility in ["public", "private"] do
|
||||
visibility = String.to_atom(visibility)
|
||||
|
||||
with {:ok, pid} <- RoomServer.get_room_server(room_id),
|
||||
:ok <- RoomServer.set_visibility(pid, account, visibility) do
|
||||
conn
|
||||
|> send_resp(200, [])
|
||||
|> halt()
|
||||
else
|
||||
{:error, :not_found} ->
|
||||
put_error(conn, :not_found, "The given room was not found.")
|
||||
|
||||
{:error, :unauthorized} ->
|
||||
put_error(conn, :unauthorized, "Only the room's creator can change visibility.")
|
||||
|
||||
{:error, _} ->
|
||||
put_error(conn, :unknown)
|
||||
end
|
||||
else
|
||||
put_error(conn, :invalid_param, "Invalid visibility.")
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue