Add plug to generate Matrix error

This commit is contained in:
Pim Kunis 2021-06-26 01:14:09 +02:00
parent dac1a429b9
commit 1ec18163c1
6 changed files with 47 additions and 50 deletions

View file

@ -0,0 +1,36 @@
defmodule MatrixServerWeb.Plug.Authenticate do
import MatrixServerWeb.Plug.Error
import Plug.Conn
import Phoenix.Controller, only: [json: 2]
alias MatrixServer.Account
alias Plug.Conn
def init(opts), do: opts
def call(%Conn{params: %{"access_token" => access_token}} = conn, _opts) do
authenticate(conn, access_token)
end
def call(%Conn{req_headers: headers} = conn, _opts) do
case List.keyfind(headers, "authorization", 0) do
{_, "Bearer " <> access_token} ->
authenticate(conn, access_token)
_ ->
put_error(conn, :missing_token)
end
end
defp authenticate(conn, access_token) do
case Account.get_by_access_token(access_token) do
%Account{devices: [device]} = account ->
conn
|> assign(:account, account)
|> assign(:device, device)
nil ->
put_error(conn, :unknown_token)
end
end
end

View file

@ -0,0 +1,23 @@
defmodule MatrixServerWeb.Plug.Error do
import Plug.Conn
import Phoenix.Controller, only: [json: 2]
@error_code_and_message %{
bad_json: {400, "M_BAD_JSON", "Bad request."},
user_in_use: {400, "M_USE_IN_USE", "Username is already taken."},
invalid_username: {400, "M_INVALID_USERNAME", "Invalid username."},
forbidden: {400, "M_FORBIDDEN", "The requested action is forbidden."},
unknown_token: {401, "M_UNKNOWN_TOKEN", "Invalid access token."},
missing_token: {401, "M_MISSING_TOKEN", "Access token required."}
}
def put_error(conn, error) do
{status, errcode, errmsg} = @error_code_and_message[error]
data = %{errcode: errcode, error: errmsg}
conn
|> put_status(status)
|> json(data)
|> halt()
end
end