diff options
author | Roger Braun <roger@rogerbraun.net> | 2017-03-23 15:51:34 +0100 |
---|---|---|
committer | Roger Braun <roger@rogerbraun.net> | 2017-03-23 15:51:34 +0100 |
commit | 9ad045fd587f83386d9582136c971dbcd4410b67 (patch) | |
tree | 54494c309d4f9b34cae343b8a2e4cc4a5878f4d0 /lib | |
parent | 30650e5bc610810d129bf02891a73ac11340710b (diff) | |
download | pleroma-9ad045fd587f83386d9582136c971dbcd4410b67.tar.gz pleroma-9ad045fd587f83386d9582136c971dbcd4410b67.zip |
Return user specific json for logged in users.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/user.ex | 4 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/representers/activity_representer.ex | 4 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/representers/user_representer.ex | 13 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api.ex | 10 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api_controller.ex | 13 |
5 files changed, 28 insertions, 16 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index a10b43b78..67f590ee8 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -53,4 +53,8 @@ defmodule Pleroma.User do |> follow_changeset(%{following: following}) |> Repo.update end + + def following?(%User{} = follower, %User{} = followed) do + Enum.member?(follower.following, User.ap_followers(followed)) + 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 171878162..a0f20c37c 100644 --- a/lib/pleroma/web/twitter_api/representers/activity_representer.ex +++ b/lib/pleroma/web/twitter_api/representers/activity_representer.ex @@ -3,12 +3,12 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do alias Pleroma.Web.TwitterAPI.Representers.UserRepresenter alias Pleroma.Activity - def to_map(%Activity{} = activity, %{user: user}) do + def to_map(%Activity{} = activity, %{user: user} = opts) do content = get_in(activity.data, ["object", "content"]) published = get_in(activity.data, ["object", "published"]) %{ "id" => activity.id, - "user" => UserRepresenter.to_map(user), + "user" => UserRepresenter.to_map(user, opts), "attentions" => [], "statusnet_html" => content, "text" => content, diff --git a/lib/pleroma/web/twitter_api/representers/user_representer.ex b/lib/pleroma/web/twitter_api/representers/user_representer.ex index 079e25021..8875d26ff 100644 --- a/lib/pleroma/web/twitter_api/representers/user_representer.ex +++ b/lib/pleroma/web/twitter_api/representers/user_representer.ex @@ -1,14 +1,23 @@ defmodule Pleroma.Web.TwitterAPI.Representers.UserRepresenter do use Pleroma.Web.TwitterAPI.Representers.BaseRepresenter + alias Pleroma.User + + def to_map(user, opts \\ %{}) do - def to_map(user, options) do image = "https://placehold.it/48x48" + + following = if opts[:for] do + User.following?(opts[:for], user) + else + false + end + map = %{ "id" => user.id, "name" => user.name, "screen_name" => user.nickname, "description" => user.bio, - "following" => false, + "following" => following, # Fake fields "favourites_count" => 0, "statuses_count" => 0, diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 2ef679397..58fd51a62 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -26,12 +26,12 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do def fetch_friend_statuses(user, opts \\ %{}) do ActivityPub.fetch_activities(user.following, opts) - |> activities_to_statuses + |> activities_to_statuses(%{for: user}) end - def fetch_public_statuses(opts \\ %{}) do + def fetch_public_statuses(user, opts \\ %{}) do ActivityPub.fetch_public_activities(opts) - |> activities_to_statuses + |> activities_to_statuses(%{for: user}) end def follow(%User{} = follower, followed_id) do @@ -50,11 +50,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do end end - defp activities_to_statuses(activities) do + defp activities_to_statuses(activities, opts) do Enum.map(activities, fn(activity) -> actor = get_in(activity.data, ["actor"]) user = Repo.get_by!(User, ap_id: actor) - ActivityRepresenter.to_map(activity, %{user: user}) + ActivityRepresenter.to_map(activity, Map.merge(opts, %{user: user})) end) end end diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index d574f1003..42485933b 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -4,7 +4,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do alias Pleroma.Web.TwitterAPI.Representers.{UserRepresenter, ActivityRepresenter} def verify_credentials(%{assigns: %{user: user}} = conn, _params) do - response = user |> UserRepresenter.to_json + response = user |> UserRepresenter.to_json(%{for: user}) conn |> json_reply(200, response) @@ -16,8 +16,8 @@ defmodule Pleroma.Web.TwitterAPI.Controller do |> json_reply(200, ActivityRepresenter.to_json(activity, %{user: user})) end - def public_timeline(conn, params) do - statuses = TwitterAPI.fetch_public_statuses(params) + def public_timeline(%{assigns: %{user: user}} = conn, params) do + statuses = TwitterAPI.fetch_public_statuses(user, params) {:ok, json} = Poison.encode(statuses) conn @@ -35,22 +35,21 @@ defmodule Pleroma.Web.TwitterAPI.Controller do def follow(%{assigns: %{user: user}} = conn, %{ "user_id" => followed_id }) do { :ok, _user, follower } = TwitterAPI.follow(user, followed_id) - response = follower |> UserRepresenter.to_json + response = follower |> UserRepresenter.to_json(%{for: user}) conn |> json_reply(200, response) end def unfollow(%{assigns: %{user: user}} = conn, %{ "user_id" => followed_id }) do - { :ok, _user, follower } = TwitterAPI.unfollow(user, followed_id) + { :ok, user, follower } = TwitterAPI.unfollow(user, followed_id) - response = follower |> UserRepresenter.to_json + response = follower |> UserRepresenter.to_json(%{for: user}) conn |> json_reply(200, response) end - defp json_reply(conn, status, json) do conn |> put_resp_content_type("application/json") |