diff options
Diffstat (limited to 'lib/pleroma/web/twitter_api')
-rw-r--r-- | lib/pleroma/web/twitter_api/controllers/util_controller.ex | 14 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/representers/activity_representer.ex | 3 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api.ex | 35 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/utils.ex | 101 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/views/user_view.ex | 2 |
5 files changed, 12 insertions, 143 deletions
diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 41881e742..25ed912c9 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -6,15 +6,16 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do json(conn, "ok") end + @instance Application.get_env(:pleroma, :instance) def config(conn, _params) do case get_format(conn) do "xml" -> response = """ <config> <site> - <name>#{Web.base_url}</name> + <name>#{Keyword.get(@instance, :name)}</name> <site>#{Web.base_url}</site> - <textlimit>5000</textlimit> + <textlimit>#{Keyword.get(@instance, :limit)}</textlimit> </site> </config> """ @@ -24,22 +25,23 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do _ -> json(conn, %{ site: %{ - name: Web.base_url, + name: Keyword.get(@instance, :name), server: Web.base_url, - textlimit: 5000 + textlimit: Keyword.get(@instance, :limit) } }) end end def version(conn, _params) do + version = Keyword.get(@instance, :version) case get_format(conn) do "xml" -> - response = "<version>Pleroma Dev</version>" + response = "<version>#{version}</version>" conn |> put_resp_content_type("application/xml") |> send_resp(200, response) - _ -> json(conn, "Pleroma Dev") + _ -> json(conn, version) end end end diff --git a/lib/pleroma/web/twitter_api/representers/activity_representer.ex b/lib/pleroma/web/twitter_api/representers/activity_representer.ex index b0769de89..8f7b89175 100644 --- a/lib/pleroma/web/twitter_api/representers/activity_representer.ex +++ b/lib/pleroma/web/twitter_api/representers/activity_representer.ex @@ -2,7 +2,8 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do use Pleroma.Web.TwitterAPI.Representers.BaseRepresenter alias Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter alias Pleroma.{Activity, User} - alias Pleroma.Web.TwitterAPI.{TwitterAPI, UserView, Utils} + alias Pleroma.Web.TwitterAPI.{TwitterAPI, UserView} + alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Formatter defp user_by_ap_id(user_list, ap_id) do diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 657823d1d..017130370 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -6,43 +6,10 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do alias Pleroma.Web.{OStatus, CommonAPI} alias Pleroma.Formatter - import Pleroma.Web.TwitterAPI.Utils - @httpoison Application.get_env(:pleroma, :httpoison) - def to_for_user_and_mentions(user, mentions, inReplyTo) do - default_to = [ - user.follower_address, - "https://www.w3.org/ns/activitystreams#Public" - ] - - to = default_to ++ Enum.map(mentions, fn ({_, %{ap_id: ap_id}}) -> ap_id end) - if inReplyTo do - Enum.uniq([inReplyTo.data["actor"] | to]) - else - to - end - end - - def get_replied_to_activity(id) when not is_nil(id) do - Repo.get(Activity, id) - end - - def get_replied_to_activity(_), do: nil - def create_status(%User{} = user, %{"status" => status} = data) do - with attachments <- attachments_from_ids(data["media_ids"]), - mentions <- Formatter.parse_mentions(status), - inReplyTo <- get_replied_to_activity(data["in_reply_to_status_id"]), - to <- to_for_user_and_mentions(user, mentions, inReplyTo), - content_html <- make_content_html(status, mentions, attachments), - context <- make_context(inReplyTo), - tags <- Formatter.parse_tags(status), - object <- make_note_data(user.ap_id, to, context, content_html, attachments, inReplyTo, tags) do - res = ActivityPub.create(to, user, context, object) - User.update_note_count(user) - res - end + CommonAPI.post(user, data) end def fetch_friend_statuses(user, opts \\ %{}) do diff --git a/lib/pleroma/web/twitter_api/utils.ex b/lib/pleroma/web/twitter_api/utils.ex deleted file mode 100644 index 055588031..000000000 --- a/lib/pleroma/web/twitter_api/utils.ex +++ /dev/null @@ -1,101 +0,0 @@ -defmodule Pleroma.Web.TwitterAPI.Utils do - alias Pleroma.{Repo, Object, Formatter, User, Activity} - alias Pleroma.Web.ActivityPub.Utils - alias Calendar.Strftime - - def attachments_from_ids(ids) do - Enum.map(ids || [], fn (media_id) -> - Repo.get(Object, media_id).data - end) - end - - defp shortname(name) do - if String.length(name) < 30 do - name - else - String.slice(name, 0..30) <> "…" - end - end - - def add_attachments(text, attachments) do - attachment_text = Enum.map(attachments, fn - (%{"url" => [%{"href" => href} | _]}) -> - name = URI.decode(Path.basename(href)) - "<a href=\"#{href}\" class='attachment'>#{shortname(name)}</a>" - _ -> "" - end) - Enum.join([text | attachment_text], "<br>\n") - end - - def format_input(text, mentions) do - HtmlSanitizeEx.strip_tags(text) - |> Formatter.linkify - |> String.replace("\n", "<br>\n") - |> add_user_links(mentions) - end - - def add_user_links(text, mentions) do - mentions = mentions - |> Enum.sort_by(fn ({name, _}) -> -String.length(name) end) - |> Enum.map(fn({name, user}) -> {name, user, Ecto.UUID.generate} end) - - # This replaces the mention with a unique reference first so it doesn't - # contain parts of other replaced mentions. There probably is a better - # solution for this... - step_one = mentions - |> Enum.reduce(text, fn ({match, _user, uuid}, text) -> - String.replace(text, match, uuid) - end) - - Enum.reduce(mentions, step_one, fn ({match, %User{ap_id: ap_id}, uuid}, text) -> - short_match = String.split(match, "@") |> tl() |> hd() - String.replace(text, uuid, "<a href='#{ap_id}'>@#{short_match}</a>") - end) - end - - def make_content_html(status, mentions, attachments) do - status - |> format_input(mentions) - |> add_attachments(attachments) - end - - def make_context(%Activity{data: %{"context" => context}}), do: context - def make_context(_), do: Utils.generate_context_id - - # TODO: Move this to a more fitting space - def make_note_data(actor, to, context, content_html, attachments, inReplyTo, tags) do - object = %{ - "type" => "Note", - "to" => to, - "content" => content_html, - "context" => context, - "attachment" => attachments, - "actor" => actor, - "tag" => tags |> Enum.map(fn ({_, tag}) -> tag end) - } - - if inReplyTo do - object - |> Map.put("inReplyTo", inReplyTo.data["object"]["id"]) - |> Map.put("inReplyToStatusId", inReplyTo.id) - else - object - end - end - - def format_naive_asctime(date) do - date |> DateTime.from_naive!("Etc/UTC") |> format_asctime - end - - def format_asctime(date) do - Strftime.strftime!(date, "%a %b %d %H:%M:%S %z %Y") - end - - def date_to_asctime(date) do - with {:ok, date, _offset} <- date |> DateTime.from_iso8601 do - format_asctime(date) - else _e -> - "" - end - end -end diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex index 932c018a6..f72e951eb 100644 --- a/lib/pleroma/web/twitter_api/views/user_view.ex +++ b/lib/pleroma/web/twitter_api/views/user_view.ex @@ -1,7 +1,7 @@ defmodule Pleroma.Web.TwitterAPI.UserView do use Pleroma.Web, :view alias Pleroma.User - alias Pleroma.Web.TwitterAPI.Utils + alias Pleroma.Web.CommonAPI.Utils def render("show.json", %{user: user = %User{}} = assigns) do render_one(user, Pleroma.Web.TwitterAPI.UserView, "user.json", assigns) |