Add endpoint to get server publishing keys

This commit is contained in:
Pim Kunis 2021-08-06 15:52:03 +02:00
parent 38af22fea6
commit ef9ae82e75
5 changed files with 58 additions and 13 deletions

View file

@ -0,0 +1,34 @@
defmodule MatrixServerWeb.KeyController do
use MatrixServerWeb, :controller
import MatrixServerWeb.Plug.Error
alias MatrixServer.SigningServer
@key_valid_time_ms 1000 * 60 * 24 * 30
def get_signing_keys(conn, _params) do
keys =
SigningServer.get_signing_keys()
|> Enum.into(%{}, fn {key_id, key} ->
{key_id, %{"key" => key}}
end)
data = %{
server_name: MatrixServer.server_name(),
verify_keys: keys,
old_verify_keys: %{},
valid_until_ts: System.os_time(:millisecond) + @key_valid_time_ms
}
case SigningServer.sign_object(data) do
{:ok, signed_data} ->
conn
|> put_status(200)
|> json(signed_data)
{:error, _msg} ->
put_error(conn, :unknown, "Error signing object.")
end
end
end