diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api.ex | 59 | 
1 files changed, 36 insertions, 23 deletions
| diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 9b081a316..a578fbbf4 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -163,36 +163,49 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do        {:error, %{error: Jason.encode!(%{captcha: [error]})}}      else        registrations_open = Pleroma.Config.get([:instance, :registrations_open]) +      registration_process(registrations_open, params, token_string) +    end +  end -      # no need to query DB if registration is open -      token = -        unless registrations_open || is_nil(token_string) do -          Repo.get_by(UserInviteToken, %{token: token_string}) -        end +  defp registration_process(_registration_open = true, params, _token_string) do +    create_user(params) +  end -      cond do -        registrations_open || (!is_nil(token) && !token.used) -> -          changeset = User.register_changeset(%User{}, params) +  defp registration_process(registration_open, params, token_string) +       when registration_open == false or is_nil(registration_open) do +    token = +      unless is_nil(token_string) do +        Repo.get_by(UserInviteToken, %{token: token_string}) +      end -          with {:ok, user} <- User.register(changeset) do -            !registrations_open && UserInviteToken.mark_as_used(token.token) +    valid_token? = token && UserInviteToken.valid_token?(token) -            {:ok, user} -          else -            {:error, changeset} -> -              errors = -                Ecto.Changeset.traverse_errors(changeset, fn {msg, _opts} -> msg end) -                |> Jason.encode!() +    case token do +      nil -> +        {:error, "Invalid token"} -              {:error, %{error: errors}} -          end +      token when valid_token? -> +        UserInviteToken.update_usage(token) +        create_user(params) -        !registrations_open && is_nil(token) -> -          {:error, "Invalid token"} +      _ -> +        {:error, "Expired token"} +    end +  end -        !registrations_open && token.used -> -          {:error, "Expired token"} -      end +  defp create_user(params) do +    changeset = User.register_changeset(%User{}, params) + +    case User.register(changeset) do +      {:ok, user} -> +        {:ok, user} + +      {:error, changeset} -> +        errors = +          Ecto.Changeset.traverse_errors(changeset, fn {msg, _opts} -> msg end) +          |> Jason.encode!() + +        {:error, %{error: errors}}      end    end | 
