+ registrations_open = Pleroma.Config.get([:instance, :registrations_open])
+ registration_process(registrations_open, params, token)
+ end
+ end
+
+ defp registration_process(_registration_open = true, params, _token) do
+ create_user(params)
+ end
+
+ defp registration_process(registration_open, params, token)
+ when registration_open == false or is_nil(registration_open) do
+ invite =
+ unless is_nil(token) do
+ Repo.get_by(UserInviteToken, %{token: token})
+ end
+
+ valid_invite? = invite && UserInviteToken.valid_invite?(invite)
+
+ case invite do
+ nil ->
+ {:error, "Invalid token"}
+
+ invite when valid_invite? ->
+ UserInviteToken.update_usage!(invite)
+ create_user(params)
+
+ _ ->
+ {:error, "Expired token"}
+ end
+ end
+
+ defp create_user(params) do
+ changeset = User.register_changeset(%User{}, params)
+
+ case User.register(changeset) do
+ {:ok, user} ->
+ {:ok, user}
+