39 lines
1,023 B
Elixir
39 lines
1,023 B
Elixir
|
defmodule MatrixServerWeb.API.Register do
|
||
|
use Ecto.Schema
|
||
|
|
||
|
import Ecto.Changeset
|
||
|
import MatrixServerWeb.Plug.Error
|
||
|
|
||
|
alias __MODULE__
|
||
|
alias Ecto.Changeset
|
||
|
|
||
|
embedded_schema do
|
||
|
field :device_id, :string
|
||
|
field :initial_device_display_name, :string
|
||
|
field :password, :string
|
||
|
field :username, :string
|
||
|
field :inhibit_login, :boolean, default: false
|
||
|
end
|
||
|
|
||
|
def changeset(params) do
|
||
|
%Register{}
|
||
|
|> cast(params, [
|
||
|
:device_id,
|
||
|
:initial_device_display_name,
|
||
|
:password,
|
||
|
:username,
|
||
|
:inhibit_login
|
||
|
])
|
||
|
|> validate_required([:password, :username])
|
||
|
end
|
||
|
|
||
|
def handle_error(conn, cs) do
|
||
|
put_error(conn, get_register_error(cs))
|
||
|
end
|
||
|
|
||
|
defp get_register_error(%Changeset{errors: [error | _]}), do: get_register_error(error)
|
||
|
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
|
||
|
end
|