defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
alias Pleroma.{User, Activity, Repo, Object}
alias Pleroma.Web.ActivityPub.ActivityPub
- alias Pleroma.Web.ActivityPub.Utils
- alias Pleroma.Web.TwitterAPI.Representers.{ActivityRepresenter, UserRepresenter}
+ alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter
+ alias Pleroma.Web.TwitterAPI.UserView
alias Pleroma.Web.OStatus
alias Pleroma.Formatter
- import Ecto.Query
import Pleroma.Web.TwitterAPI.Utils
+ @httpoison Application.get_env(:pleroma, :httpoison)
+
def to_for_user_and_mentions(user, mentions, inReplyTo) do
default_to = [
User.ap_followers(user),
changeset = User.register_changeset(%User{}, params)
with {:ok, user} <- Repo.insert(changeset) do
- {:ok, UserRepresenter.to_map(user)}
+ {:ok, user}
else
{:error, changeset} ->
errors = Ecto.Changeset.traverse_errors(changeset, fn {msg, _opts} -> msg end)
def context_to_conversation_id(context) do
with %Object{id: id} <- Object.get_cached_by_ap_id(context) do
id
- else _e ->
- changeset = Object.context_mapping(context)
- {:ok, %{id: id}} = Repo.insert(changeset)
- id
+ else _e ->
+ changeset = Object.context_mapping(context)
+ case Repo.insert(changeset) do
+ {:ok, %{id: id}} -> id
+ # This should be solved by an upsert, but it seems ecto
+ # has problems accessing the constraint inside the jsonb.
+ {:error, _} -> Object.get_cached_by_ap_id(context).id
+ end
end
end
def get_external_profile(for_user, uri) do
with {:ok, %User{} = user} <- OStatus.find_or_make_user(uri) do
- {:ok, UserRepresenter.to_map(user, %{for: for_user})}
+ with url <- user.info["topic"],
+ {:ok, %{body: body}} <- @httpoison.get(url, [], follow_redirect: true, timeout: 10000, recv_timeout: 20000) do
+ OStatus.handle_incoming(body)
+ end
+ {:ok, UserView.render("show.json", %{user: user, for: for_user})}
else _e ->
{:error, "Couldn't find user"}
end