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

@ -1,7 +1,8 @@
defmodule MatrixServerWeb.AccountController do
use MatrixServerWeb, :controller
import MatrixServer, only: [get_mxid: 1]
import MatrixServer
import MatrixServerWeb.Plug.Error
alias MatrixServer.Account
alias Plug.Conn
@ -9,21 +10,15 @@ defmodule MatrixServerWeb.AccountController do
def available(conn, params) do
localpart = Map.get(params, "username", "")
{status, data} =
case Account.available?(localpart) do
:ok ->
{200, %{available: true}}
case Account.available?(localpart) do
:ok ->
conn
|> put_status(200)
|> json(%{available: true})
{:error, :user_in_use} ->
{400, %{errcode: "M_USER_IN_USE", error: "Desired user ID is already taken."}}
{:error, :invalid_username} ->
{400, %{errocode: "M_INVALID_USERNAME", error: "Desired user ID is invalid."}}
end
conn
|> put_status(status)
|> json(data)
{:error, error} ->
put_error(conn, error)
end
end
def whoami(%Conn{assigns: %{account: %Account{localpart: localpart}}} = conn, _params) do

View file

@ -2,6 +2,7 @@ defmodule MatrixServerWeb.AuthController do
use MatrixServerWeb, :controller
import MatrixServer
import MatrixServerWeb.Plug.Error
alias MatrixServer.{Repo, Account}
alias Ecto.Changeset
@ -38,7 +39,7 @@ defmodule MatrixServerWeb.AuthController do
{200, data}
{:error, error} ->
generate_error(error)
put_error(conn, error)
end
conn
@ -48,11 +49,7 @@ defmodule MatrixServerWeb.AuthController do
def register(conn, %{"auth" => _}) do
# Other login types are unsupported for now.
data = %{errcode: "M_FORBIDDEN", error: "Login type not supported"}
conn
|> put_status(400)
|> json(data)
put_error(conn, :forbidden)
end
def register(conn, _params) do
@ -80,9 +77,9 @@ defmodule MatrixServerWeb.AuthController do
end
defp get_register_error(%Changeset{errors: [error | _]}), do: get_register_error(error)
defp get_register_error({:localpart, {_, [{:constraint, :unique} | _]}}), do: "M_USER_IN_USE"
defp get_register_error({:localpart, {_, [{:validation, _} | _]}}), do: "M_INVALID_USERNAME"
defp get_register_error(_), do: "M_BAD_JSON"
defp get_register_error({:localpart, {_, [{:constraint, :unique} | _]}}), do: :user_in_use
defp get_register_error({:localpart, {_, [{:validation, _} | _]}}), do: :invalid_username
defp get_register_error(_), do: :bad_json
defp register_schema do
types = %{