- # Fake this as good as possible...
- """
- <?xml version="1.0" encoding="UTF-8"?>
- <rsp stat="ok" xmlns:atom="http://www.w3.org/2005/Atom">
- <mediaid>#{object.id}</mediaid>
- <media_id>#{object.id}</media_id>
- <media_id_string>#{object.id}</media_id_string>
- <media_url>#{href}</media_url>
- <mediaurl>#{href}</mediaurl>
- <atom:link rel="enclosure" href="#{href}" type="#{type}"></atom:link>
- </rsp>
- """
- end
-
- defp add_conversation_id(activity) do
- if is_integer(activity.data["statusnetConversationId"]) do
- {:ok, activity}
+ case format do
+ "xml" ->
+ # Fake this as good as possible...
+ """
+ <?xml version="1.0" encoding="UTF-8"?>
+ <rsp stat="ok" xmlns:atom="http://www.w3.org/2005/Atom">
+ <mediaid>#{object.id}</mediaid>
+ <media_id>#{object.id}</media_id>
+ <media_id_string>#{object.id}</media_id_string>
+ <media_url>#{href}</media_url>
+ <mediaurl>#{href}</mediaurl>
+ <atom:link rel="enclosure" href="#{href}" type="#{type}"></atom:link>
+ </rsp>
+ """
+
+ "json" ->
+ %{
+ media_id: object.id,
+ media_id_string: "#{object.id}}",
+ media_url: href,
+ size: 0
+ }
+ |> Jason.encode!()
+ end
+ end
+
+ def register_user(params) do
+ tokenString = params["token"]
+
+ params = %{
+ nickname: params["nickname"],
+ name: params["fullname"],
+ bio: User.parse_bio(params["bio"]),
+ email: params["email"],
+ password: params["password"],
+ password_confirmation: params["confirm"]
+ }
+
+ registrations_open = Pleroma.Config.get([:instance, :registrations_open])
+
+ # no need to query DB if registration is open
+ token =
+ unless registrations_open || is_nil(tokenString) do
+ Repo.get_by(UserInviteToken, %{token: tokenString})
+ end
+
+ cond do
+ registrations_open || (!is_nil(token) && !token.used) ->
+ changeset = User.register_changeset(%User{info: %{}}, params)
+
+ with {:ok, user} <- Repo.insert(changeset) do
+ !registrations_open && UserInviteToken.mark_as_used(token.token)
+ {:ok, user}
+ else
+ {:error, changeset} ->
+ errors =
+ Ecto.Changeset.traverse_errors(changeset, fn {msg, _opts} -> msg end)
+ |> Jason.encode!()
+
+ {:error, %{error: errors}}
+ end
+
+ !registrations_open && is_nil(token) ->
+ {:error, "Invalid token"}
+
+ !registrations_open && token.used ->
+ {:error, "Expired token"}
+ end
+ end
+
+ def get_by_id_or_nickname(id_or_nickname) do
+ if !is_integer(id_or_nickname) && :error == Integer.parse(id_or_nickname) do
+ Repo.get_by(User, nickname: id_or_nickname)
+ else
+ Repo.get(User, id_or_nickname)
+ end
+ end
+
+ def get_user(user \\ nil, params) do
+ case params do
+ %{"user_id" => user_id} ->
+ case target = get_by_id_or_nickname(user_id) do
+ nil ->
+ {:error, "No user with such user_id"}
+
+ _ ->
+ {:ok, target}
+ end
+
+ %{"screen_name" => nickname} ->
+ case target = Repo.get_by(User, nickname: nickname) do
+ nil ->
+ {:error, "No user with such screen_name"}
+
+ _ ->
+ {:ok, target}
+ end
+
+ _ ->
+ if user do
+ {:ok, user}
+ else
+ {:error, "You need to specify screen_name or user_id"}
+ end
+ end
+ end
+
+ defp parse_int(string, default)
+
+ defp parse_int(string, default) when is_binary(string) do
+ with {n, _} <- Integer.parse(string) do
+ n