Add federation API

Add signing keys fed API request
This commit is contained in:
Pim Kunis 2021-08-06 22:03:34 +02:00
parent e0df546c6f
commit 1e53776a8d
7 changed files with 41 additions and 6 deletions

View file

@ -33,7 +33,7 @@ defmodule MatrixServer do
def default_room_version, do: "7"
def get_domain(id) do
case String.split(id, ":") do
case String.split(id, ":", parts: 2) do
[_, server_name] -> server_name
_ -> nil
end

View file

@ -102,7 +102,7 @@ defmodule MatrixServer.Account do
end
defp try_get_localpart("@" <> rest = user_id) do
case String.split(rest, ":") do
case String.split(rest, ":", parts: 2) do
[localpart, _] -> localpart
_ -> user_id
end

View file

@ -13,7 +13,8 @@ defmodule MatrixServer.Application do
MatrixServerWeb.Endpoint,
{Registry, keys: :unique, name: MatrixServer.RoomServer.Registry},
{DynamicSupervisor, name: MatrixServer.RoomServer.Supervisor, strategy: :one_for_one},
MatrixServer.SigningServer
MatrixServer.SigningServer,
{Finch, name: MatrixServerWeb.HTTPClient}
]
Supervisor.start_link(children, name: MatrixServer.Supervisor, strategy: :one_for_one)

View file

@ -0,0 +1,23 @@
defmodule MatrixServerWeb.FederationClient do
use Tesla
alias MatrixServerWeb.Endpoint
alias MatrixServerWeb.Router.Helpers, as: RouteHelpers
# TODO: Maybe create database-backed homeserver struct to pass to client function.
@middleware [
{Tesla.Middleware.Headers, [{"Content-Type", "application/json"}]},
Tesla.Middleware.JSON
]
@adapter {Tesla.Adapter.Finch, name: MatrixServerWeb.HTTPClient}
def client(server_name) do
Tesla.client([{Tesla.Middleware.BaseUrl, server_name} | @middleware], @adapter)
end
def get_signing_keys(client) do
Tesla.get(client, RouteHelpers.key_path(Endpoint, :get_signing_keys))
end
end