From a4335e391f6818b9ea09520f60ca8c436d643f38 Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Wed, 31 Jan 2018 22:51:25 +0900 Subject: [PATCH 1/8] provide instance thumbnail at /api/v1/instance --- .../web/mastodon_api/mastodon_api_controller.ex | 1 + priv/static/instance-thumbnail.jpeg | Bin 0 -> 47702 bytes 2 files changed, 1 insertion(+) create mode 100644 priv/static/instance-thumbnail.jpeg diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 0615ac11a..ce30453cb 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -103,6 +103,7 @@ def masto_instance(conn, _params) do streaming_api: String.replace(Web.base_url, ["http","https"], "wss") }, stats: Stats.get_stats, + thumbnail: Web.base_url <> "/static/instance-thumbnail.jpeg", max_toot_chars: Keyword.get(@instance, :limit) } diff --git a/priv/static/instance-thumbnail.jpeg b/priv/static/instance-thumbnail.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b7e01264423996c3f97edaa72c5da199b30b96e4 GIT binary patch literal 47702 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 Date: Wed, 31 Jan 2018 22:57:43 +0900 Subject: [PATCH 2/8] provide instance thumbnail at /api/v1/instance (debug) --- priv/static/{ => static}/instance-thumbnail.jpeg | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename priv/static/{ => static}/instance-thumbnail.jpeg (100%) diff --git a/priv/static/instance-thumbnail.jpeg b/priv/static/static/instance-thumbnail.jpeg similarity index 100% rename from priv/static/instance-thumbnail.jpeg rename to priv/static/static/instance-thumbnail.jpeg From e47f60c05376b9e2af0c90a984014003aac22104 Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Wed, 31 Jan 2018 23:04:34 +0900 Subject: [PATCH 3/8] provide instance thumbnail at /api/v1/instance (debug) --- .../web/mastodon_api/mastodon_api_controller.ex | 2 +- .../thumbnail.jpeg} | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename priv/static/{static/instance-thumbnail.jpeg => instance/thumbnail.jpeg} (100%) diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index ce30453cb..e16a2a092 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -103,7 +103,7 @@ def masto_instance(conn, _params) do streaming_api: String.replace(Web.base_url, ["http","https"], "wss") }, stats: Stats.get_stats, - thumbnail: Web.base_url <> "/static/instance-thumbnail.jpeg", + thumbnail: Web.base_url <> "/instance/thumbnail.jpeg", max_toot_chars: Keyword.get(@instance, :limit) } diff --git a/priv/static/static/instance-thumbnail.jpeg b/priv/static/instance/thumbnail.jpeg similarity index 100% rename from priv/static/static/instance-thumbnail.jpeg rename to priv/static/instance/thumbnail.jpeg From 03c15a54f562dfcc26afeefbe00921e446ff5c31 Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Wed, 31 Jan 2018 23:09:47 +0900 Subject: [PATCH 4/8] provide instance thumbnail at /api/v1/instance (debug) --- lib/pleroma/web/endpoint.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index b57cf3917..725d2ee64 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -12,7 +12,7 @@ defmodule Pleroma.Web.Endpoint do at: "/media", from: "uploads", gzip: false plug Plug.Static, at: "/", from: :pleroma, - only: ~w(index.html static finmoji emoji packs sounds sw.js) + only: ~w(index.html static finmoji emoji packs sounds instance sw.js) # Code reloading can be explicitly enabled under the # :code_reloader configuration of your endpoint. From ab8b9ababab97ed40720b86bb1d2631dbdcf4c61 Mon Sep 17 00:00:00 2001 From: eal Date: Wed, 31 Jan 2018 16:23:31 +0200 Subject: [PATCH 5/8] Split emoji to default and custom. --- config/{emoji.txt => emoji_default.txt} | 0 lib/pleroma/formatter.ex | 20 +++++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) rename config/{emoji.txt => emoji_default.txt} (100%) diff --git a/config/emoji.txt b/config/emoji_default.txt similarity index 100% rename from config/emoji.txt rename to config/emoji_default.txt diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 8b736797b..fdf91f56e 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -104,13 +104,19 @@ def html_escape(text) do {finmoji, "/finmoji/128px/#{finmoji}-128.png"} end) - @emoji_from_file (with {:ok, file} <- File.read("config/emoji.txt") do - file - |> String.trim - |> String.split("\n") - |> Enum.map(fn(line) -> - [name, file] = String.split(line, ", ") - {name, file} + @emoji_from_file (with {:ok, default} <- File.read("config/emoji.txt") do + custom = + with {:ok, custom} <- File.read("config/custom_emoji.txt") do + custom + else + _e -> "" + end + (default <> "\n" <> custom) + |> String.trim() + |> String.split(~r/\n+/) + |> Enum.map(fn(line) -> + [name, file] = String.split(line, ~r/,\s*/) + {name, file} end) else _ -> [] From 15cb3f2b01dfd914fa414174602ad03b41dfa768 Mon Sep 17 00:00:00 2001 From: eal Date: Wed, 31 Jan 2018 23:47:42 +0200 Subject: [PATCH 6/8] Revert renaming emoji.txt --- config/{emoji_default.txt => emoji.txt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename config/{emoji_default.txt => emoji.txt} (100%) diff --git a/config/emoji_default.txt b/config/emoji.txt similarity index 100% rename from config/emoji_default.txt rename to config/emoji.txt From ab83e0de6d389428cec11fe94280d675a38f00d0 Mon Sep 17 00:00:00 2001 From: eal Date: Thu, 1 Feb 2018 21:41:19 +0200 Subject: [PATCH 7/8] TwitterAPI: Add is_local to user view. --- lib/pleroma/web/twitter_api/views/user_view.ex | 1 + test/web/twitter_api/views/user_view_test.exs | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex index 1b995f42f..f49bcc0fb 100644 --- a/lib/pleroma/web/twitter_api/views/user_view.ex +++ b/lib/pleroma/web/twitter_api/views/user_view.ex @@ -47,6 +47,7 @@ def render("user.json", %{user: user = %User{}} = assigns) do "statusnet_profile_url" => user.ap_id, "cover_photo" => User.banner_url(user) |> MediaProxy.url(), "background_image" => image_url(user.info["background"]) |> MediaProxy.url(), + "is_local" => user.local } if assigns[:token] do diff --git a/test/web/twitter_api/views/user_view_test.exs b/test/web/twitter_api/views/user_view_test.exs index 3f84e4116..e68230a86 100644 --- a/test/web/twitter_api/views/user_view_test.exs +++ b/test/web/twitter_api/views/user_view_test.exs @@ -56,7 +56,8 @@ test "A user" do "rights" => %{}, "statusnet_profile_url" => user.ap_id, "cover_photo" => banner, - "background_image" => nil + "background_image" => nil, + "is_local" => true } assert represented == UserView.render("show.json", %{user: user}) @@ -88,7 +89,8 @@ test "A user for a given other follower", %{user: user} do "rights" => %{}, "statusnet_profile_url" => user.ap_id, "cover_photo" => banner, - "background_image" => nil + "background_image" => nil, + "is_local" => true } assert represented == UserView.render("show.json", %{user: user, for: follower}) @@ -121,7 +123,8 @@ test "A user that follows you", %{user: user} do "rights" => %{}, "statusnet_profile_url" => follower.ap_id, "cover_photo" => banner, - "background_image" => nil + "background_image" => nil, + "is_local" => true } assert represented == UserView.render("show.json", %{user: follower, for: user}) @@ -154,7 +157,8 @@ test "A blocked user for the blocker", %{user: user} do "rights" => %{}, "statusnet_profile_url" => user.ap_id, "cover_photo" => banner, - "background_image" => nil + "background_image" => nil, + "is_local" => true } blocker = Repo.get(User, blocker.id) From 29be70c0082ea09f03896c7e52e2b8a9cdbea641 Mon Sep 17 00:00:00 2001 From: eal Date: Fri, 2 Feb 2018 00:00:48 +0200 Subject: [PATCH 8/8] Add remote following of local profiles. --- lib/pleroma/web/router.ex | 1 + .../twitter_api/util/subscribe.html.eex | 10 +++++++++ .../controllers/util_controller.ex | 21 +++++++++++++++++++ lib/pleroma/web/web_finger/web_finger.ex | 4 +++- test/web/ostatus/ostatus_test.exs | 6 ++++-- 5 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 63dbd6245..6e9f40955 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -62,6 +62,7 @@ def user_fetcher(username) do pipe_through :pleroma_html get "/ostatus_subscribe", UtilController, :remote_follow post "/ostatus_subscribe", UtilController, :do_remote_follow + post "/main/ostatus", UtilController, :remote_subscribe end scope "/api/pleroma", Pleroma.Web.TwitterAPI do diff --git a/lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex b/lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex new file mode 100644 index 000000000..f60accebf --- /dev/null +++ b/lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex @@ -0,0 +1,10 @@ +<%= if @error do %> +

Error: <%= @error %>

+<% else %> +

Remotely follow <%= @nickname %>

+ <%= form_for @conn, util_path(@conn, :remote_subscribe), [as: "user"], fn f -> %> + <%= hidden_input f, :nickname, value: @nickname %> + <%= text_input f, :profile, placeholder: "Your account ID, e.g. lain@quitter.se" %> + <%= submit "Follow" %> + <% end %> +<% end %> diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index a1d56e3ab..0b7c64015 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -3,6 +3,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do require Logger alias Pleroma.Web alias Pleroma.Web.OStatus + alias Pleroma.Web.WebFinger alias Comeonin.Pbkdf2 alias Pleroma.Formatter alias Pleroma.Web.ActivityPub.ActivityPub @@ -32,6 +33,26 @@ def help_test(conn, _params) do json(conn, "ok") end + def remote_subscribe(conn, %{"nickname" => nick, "profile" => _}) do + with %User{} = user <- User.get_cached_by_nickname(nick), + avatar = User.avatar_url(user) do + conn + |> render("subscribe.html", %{nickname: nick, avatar: avatar, error: false}) + else + _e -> render(conn, "subscribe.html", %{nickname: nick, avatar: nil, error: "Could not find user"}) + end + end + def remote_subscribe(conn, %{"user" => %{"nickname" => nick, "profile" => profile}}) do + with {:ok, %{"subscribe_address" => template}} <- WebFinger.finger(profile), + %User{ap_id: ap_id} <- User.get_cached_by_nickname(nick) do + conn + |> Phoenix.Controller.redirect(external: String.replace(template, "{uri}", ap_id)) + else + _e -> + render(conn, "subscribe.html", %{nickname: nick, avatar: nil, error: "Something went wrong."}) + end + end + def remote_follow(%{assigns: %{user: user}} = conn, %{"acct" => acct}) do {err, followee} = OStatus.find_or_make_user(acct) avatar = User.avatar_url(followee) diff --git a/lib/pleroma/web/web_finger/web_finger.ex b/lib/pleroma/web/web_finger/web_finger.ex index 4ae3eab59..95e717b17 100644 --- a/lib/pleroma/web/web_finger/web_finger.ex +++ b/lib/pleroma/web/web_finger/web_finger.ex @@ -69,11 +69,13 @@ defp webfinger_from_xml(doc) do topic = XML.string_from_xpath(~s{//Link[@rel="http://schemas.google.com/g/2010#updates-from"]/@href}, doc) subject = XML.string_from_xpath("//Subject", doc) salmon = XML.string_from_xpath(~s{//Link[@rel="salmon"]/@href}, doc) + subscribe_address = XML.string_from_xpath(~s{//Link[@rel="http://ostatus.org/schema/1.0/subscribe"]/@template}, doc) data = %{ "magic_key" => magic_key, "topic" => topic, "subject" => subject, - "salmon" => salmon + "salmon" => salmon, + "subscribe_address" => subscribe_address } {:ok, data} end diff --git a/test/web/ostatus/ostatus_test.exs b/test/web/ostatus/ostatus_test.exs index de01612b3..b27f8cb55 100644 --- a/test/web/ostatus/ostatus_test.exs +++ b/test/web/ostatus/ostatus_test.exs @@ -302,7 +302,8 @@ test "it returns user info in a hash" do "host" => "social.heldscal.la", "fqn" => user, "bio" => "cofe", - "avatar" => %{"type" => "Image", "url" => [%{"href" => "https://social.heldscal.la/avatar/29191-original-20170421154949.jpeg", "mediaType" => "image/jpeg", "type" => "Link"}]} + "avatar" => %{"type" => "Image", "url" => [%{"href" => "https://social.heldscal.la/avatar/29191-original-20170421154949.jpeg", "mediaType" => "image/jpeg", "type" => "Link"}]}, + "subscribe_address" => "https://social.heldscal.la/main/ostatussub?profile={uri}" } assert data == expected end @@ -325,7 +326,8 @@ test "it works with the uri" do "host" => "social.heldscal.la", "fqn" => user, "bio" => "cofe", - "avatar" => %{"type" => "Image", "url" => [%{"href" => "https://social.heldscal.la/avatar/29191-original-20170421154949.jpeg", "mediaType" => "image/jpeg", "type" => "Link"}]} + "avatar" => %{"type" => "Image", "url" => [%{"href" => "https://social.heldscal.la/avatar/29191-original-20170421154949.jpeg", "mediaType" => "image/jpeg", "type" => "Link"}]}, + "subscribe_address" => "https://social.heldscal.la/main/ostatussub?profile={uri}" } assert data == expected end