Implement get/set visibility client endpoints
This commit is contained in:
parent
2088f0a869
commit
de950fc769
3 changed files with 91 additions and 3 deletions
|
@ -146,6 +146,14 @@ defmodule MatrixServer.RoomServer do
|
|||
GenServer.call(pid, {:unban, account, user_id})
|
||||
end
|
||||
|
||||
@doc """
|
||||
Attempt to set the room's visibility.
|
||||
"""
|
||||
@spec set_visibility(pid(), Account.t(), atom()) :: :ok | {:error, atom()}
|
||||
def set_visibility(pid, account, visibility) do
|
||||
GenServer.call(pid, {:set_visibility, account, visibility})
|
||||
end
|
||||
|
||||
### Implementation
|
||||
|
||||
@impl true
|
||||
|
@ -297,7 +305,7 @@ defmodule MatrixServer.RoomServer do
|
|||
end
|
||||
end
|
||||
|
||||
def handle_call({:unban, account, user_id},_from,%{room: room, state_set: state_set} = state) do
|
||||
def handle_call({:unban, account, user_id}, _from, %{room: room, state_set: state_set} = state) do
|
||||
unban_event = Event.unban(room, account, user_id)
|
||||
|
||||
case insert_single_event(room, state_set, unban_event) do
|
||||
|
@ -306,6 +314,26 @@ defmodule MatrixServer.RoomServer do
|
|||
end
|
||||
end
|
||||
|
||||
def handle_call(
|
||||
{:set_visibility, account, visibility},
|
||||
_from,
|
||||
%{room: room, state_set: state_set} = state
|
||||
) do
|
||||
case state_set do
|
||||
%{{"m.room.create", ""} => %Event{content: %{"creator" => creator}}} ->
|
||||
if creator == Account.get_mxid(account) do
|
||||
room = Repo.update!(change(room, visibility: visibility))
|
||||
|
||||
{:reply, :ok, %{state | room: room}}
|
||||
else
|
||||
{:reply, {:error, :unauthorized}, state}
|
||||
end
|
||||
|
||||
_ ->
|
||||
{:reply, {:error, :unknown}, state}
|
||||
end
|
||||
end
|
||||
|
||||
@spec insert_single_event(Room.t(), t(), Event.t()) :: {:ok, {t(), Room.t()}} | {:error, atom()}
|
||||
defp insert_single_event(room, state_set, event) do
|
||||
Repo.transaction(fn ->
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue