Put avatar_url and displayname on m.room.member events

This commit is contained in:
Pim Kunis 2021-09-13 12:42:56 +02:00
parent 064a398a37
commit 739c496ac6
9 changed files with 193 additions and 70 deletions

View file

@ -1,14 +1,16 @@
defmodule ArchitexWeb.Client.Request.Ban do
use ArchitexWeb.APIRequest
alias Architex.Types.UserId
@type t :: %__MODULE__{
user_id: String.t(),
user_id: UserId.t(),
reason: String.t() | nil
}
@primary_key false
embedded_schema do
field :user_id, :string
field :user_id, UserId
field :reason, :string
end

View file

@ -1,6 +1,8 @@
defmodule ArchitexWeb.Client.Request.CreateRoom do
use ArchitexWeb.APIRequest
alias Architex.Types.UserId
defmodule PowerLevelContentOverride do
use Ecto.Schema
@ -97,7 +99,7 @@ defmodule ArchitexWeb.Client.Request.CreateRoom do
room_alias_name: String.t() | nil,
name: String.t() | nil,
topic: String.t() | nil,
invite: list(String.t()) | nil,
invite: [UserId.t()] | nil,
room_version: String.t() | nil,
preset: String.t() | nil,
is_direct: boolean() | nil,
@ -113,7 +115,7 @@ defmodule ArchitexWeb.Client.Request.CreateRoom do
field :room_alias_name, :string
field :name, :string
field :topic, :string
field :invite, {:array, :string}
field :invite, {:array, UserId}
field :room_version, :string
field :preset, :string
field :is_direct, :boolean

View file

@ -1,14 +1,16 @@
defmodule ArchitexWeb.Client.Request.Kick do
use ArchitexWeb.APIRequest
alias Architex.Types.UserId
@type t :: %__MODULE__{
user_id: String.t(),
user_id: UserId.t(),
reason: String.t() | nil
}
@primary_key false
embedded_schema do
field :user_id, :string
field :user_id, UserId
field :reason, :string
end

View file

@ -63,9 +63,11 @@ defmodule ArchitexWeb.Client.RoomController do
"room_id" => room_id,
"user_id" => user_id
}) do
with {:ok, _} <- UserId.cast(user_id),
with {:ok, user_id_struct} <- UserId.cast(user_id),
{:ok, pid} <- RoomServer.get_room_server(room_id) do
case RoomServer.invite(pid, account, user_id) do
{avatar_url, displayname} = UserId.try_get_user_information(user_id_struct)
case RoomServer.invite(pid, account, user_id, avatar_url, displayname) do
:ok ->
conn
|> send_resp(200, [])
@ -135,9 +137,11 @@ defmodule ArchitexWeb.Client.RoomController do
Action for POST /_matrix/client/r0/rooms/{roomId}/kick.
"""
def kick(%Conn{assigns: %{account: account}} = conn, %{"room_id" => room_id} = params) do
with {:ok, request} <- Kick.parse(params),
with {:ok, %Kick{user_id: user_id} = request} <- Kick.parse(params),
{:ok, pid} <- RoomServer.get_room_server(room_id) do
case RoomServer.kick(pid, account, request) do
{avatar_url, displayname} = UserId.try_get_user_information(user_id)
case RoomServer.kick(pid, account, request, avatar_url, displayname) do
:ok ->
conn
|> send_resp(200, [])
@ -158,9 +162,11 @@ defmodule ArchitexWeb.Client.RoomController do
Action for POST /_matrix/client/r0/rooms/{roomId}/ban.
"""
def ban(%Conn{assigns: %{account: account}} = conn, %{"room_id" => room_id} = params) do
with {:ok, request} <- Ban.parse(params),
with {:ok, %Ban{user_id: user_id} = request} <- Ban.parse(params),
{:ok, pid} <- RoomServer.get_room_server(room_id) do
case RoomServer.ban(pid, account, request) do
{avatar_url, displayname} = UserId.try_get_user_information(user_id)
case RoomServer.ban(pid, account, request, avatar_url, displayname) do
:ok ->
conn
|> send_resp(200, [])
@ -184,20 +190,22 @@ defmodule ArchitexWeb.Client.RoomController do
"room_id" => room_id,
"user_id" => user_id
}) do
case RoomServer.get_room_server(room_id) do
{:ok, pid} ->
case RoomServer.unban(pid, account, user_id) do
:ok ->
conn
|> send_resp(200, [])
|> halt()
with {:ok, user_id_struct} <- UserId.cast(user_id),
{:ok, pid} <- RoomServer.get_room_server(room_id) do
{avatar_url, displayname} = UserId.try_get_user_information(user_id_struct)
{:error, _} ->
put_error(conn, :unknown)
end
case RoomServer.unban(pid, account, user_id, avatar_url, displayname) do
:ok ->
conn
|> send_resp(200, [])
|> halt()
{:error, :not_found} ->
put_error(conn, :not_found, "The given room was not found.")
{:error, _} ->
put_error(conn, :unknown)
end
else
:error -> put_error(conn, :invalid_param, "Given user ID is invalid.")
{:error, :not_found} -> put_error(conn, :not_found, "The given room was not found.")
end
end

View file

@ -33,6 +33,8 @@ defmodule ArchitexWeb.Federation.HTTPClient do
"""
@spec client(String.t()) :: Tesla.Client.t()
def client(server_name) do
# TODO: When implementing resolving homeservers, probably create
# a homeserver struct instead of using domain names directly.
Tesla.client(
[
{Tesla.Middleware.Opts, [server_name: server_name]},