X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Ftwitter_api%2Ftwitter_api.ex;h=735d88832e5bf962c7e46c1cc4d44fca78dd7047;hb=9167a2ebe30f3835f2e9139443dc60f8f0c44563;hp=76dbc77a1a4bff2b92b289a06e3c525d94a8ead5;hpb=7a47afed3c52f537e9a4851372d76ccf95459799;p=akkoma diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 76dbc77a1..735d88832 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -1,7 +1,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do alias Pleroma.{User, Activity, Repo, Object} alias Pleroma.Web.ActivityPub.ActivityPub - alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter + alias Pleroma.Web.TwitterAPI.Representers.{ActivityRepresenter, UserRepresenter} import Ecto.Query @@ -13,6 +13,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do context = ActivityPub.generate_context_id content = HtmlSanitizeEx.strip_tags(data["status"]) + |> String.replace("\n", "
") mentions = parse_mentions(content) @@ -150,6 +151,19 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do {:ok, status} end + def retweet(%User{} = user, %Activity{data: %{"object" => object}} = activity) do + object = Object.get_by_ap_id(object["id"]) + + {:ok, _announce_activity, object} = ActivityPub.announce(user, object) + new_data = activity.data + |> Map.put("object", object.data) + + status = %{activity | data: new_data} + |> activity_to_status(%{for: user}) + + {:ok, status} + end + def upload(%Plug.Upload{} = file, format \\ "xml") do {:ok, object} = ActivityPub.upload(file) @@ -214,6 +228,28 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do end end + def register_user(params) do + params = %{ + nickname: params["nickname"], + name: params["fullname"], + bio: params["bio"], + email: params["email"], + password: params["password"], + password_confirmation: params["confirm"] + } + + changeset = User.register_changeset(%User{}, params) + + with {:ok, user} <- Repo.insert(changeset) do + {:ok, UserRepresenter.to_map(user)} + else + {:error, changeset} -> + errors = Ecto.Changeset.traverse_errors(changeset, fn {msg, opts} -> msg end) + |> Poison.encode! + {:error, %{error: errors}} + end + end + defp activities_to_statuses(activities, opts) do Enum.map(activities, fn(activity) -> activity_to_status(activity, opts) @@ -229,6 +265,16 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do ActivityRepresenter.to_map(activity, Map.merge(opts, %{user: user, liked_activity: liked_activity})) end + # For announces, fetch the announced activity and the user. + defp activity_to_status(%Activity{data: %{"type" => "Announce"}} = activity, opts) do + actor = get_in(activity.data, ["actor"]) + user = User.get_cached_by_ap_id(actor) + [announced_activity] = Activity.all_by_object_ap_id(activity.data["object"]) + announced_actor = User.get_cached_by_ap_id(announced_activity.data["actor"]) + + ActivityRepresenter.to_map(activity, Map.merge(opts, %{users: [user, announced_actor], announced_activity: announced_activity})) + end + defp activity_to_status(activity, opts) do actor = get_in(activity.data, ["actor"]) user = User.get_cached_by_ap_id(actor)