From 9c7da2ef4834729bd6bff21063bf81c7be5f1635 Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Sat, 26 May 2018 14:02:57 +0900 Subject: output repeats at ActivityPub outbox --- lib/pleroma/web/activity_pub/views/user_view.ex | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex index ffd76b529..011ae18a3 100644 --- a/lib/pleroma/web/activity_pub/views/user_view.ex +++ b/lib/pleroma/web/activity_pub/views/user_view.ex @@ -98,9 +98,6 @@ defmodule Pleroma.Web.ActivityPub.UserView do info = User.user_info(user) params = %{ - "type" => ["Create", "Announce"], - "actor_id" => user.ap_id, - "whole_db" => true, "limit" => "10" } @@ -111,10 +108,8 @@ defmodule Pleroma.Web.ActivityPub.UserView do params end - activities = ActivityPub.fetch_public_activities(params) - min_id = Enum.at(activities, 0).id - - activities = Enum.reverse(activities) + activities = ActivityPub.fetch_public_activities(user, nil, params) + min_id = Enum.at(Enum.reverse(activities), 0).id max_id = Enum.at(activities, 0).id collection = -- cgit v1.2.3 From e90b734f1c41c13e08b7461f5bfb42745ea7ba08 Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Sat, 26 May 2018 14:10:12 +0900 Subject: debug --- lib/pleroma/web/activity_pub/views/user_view.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex index 011ae18a3..719bd128b 100644 --- a/lib/pleroma/web/activity_pub/views/user_view.ex +++ b/lib/pleroma/web/activity_pub/views/user_view.ex @@ -108,7 +108,7 @@ defmodule Pleroma.Web.ActivityPub.UserView do params end - activities = ActivityPub.fetch_public_activities(user, nil, params) + activities = ActivityPub.fetch_user_activities(user, nil, params) min_id = Enum.at(Enum.reverse(activities), 0).id max_id = Enum.at(activities, 0).id -- cgit v1.2.3 From f42ffbe9a855494c182c97f5eb641e800e562aa4 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 12 Jun 2018 14:52:54 +0300 Subject: Initial invites support + tests. --- lib/pleroma/UserInviteToken.ex | 40 ++++++++++++++++++++++++++++++ lib/pleroma/web/router.ex | 4 +-- lib/pleroma/web/twitter_api/twitter_api.ex | 36 +++++++++++++++++++-------- 3 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 lib/pleroma/UserInviteToken.ex (limited to 'lib') diff --git a/lib/pleroma/UserInviteToken.ex b/lib/pleroma/UserInviteToken.ex new file mode 100644 index 000000000..48ee1019a --- /dev/null +++ b/lib/pleroma/UserInviteToken.ex @@ -0,0 +1,40 @@ +defmodule Pleroma.UserInviteToken do + use Ecto.Schema + + import Ecto.Changeset + + alias Pleroma.{User, UserInviteToken, Repo} + + schema "user_invite_tokens" do + field(:token, :string) + field(:used, :boolean, default: false) + + timestamps() + end + + def create_token do + token = :crypto.strong_rand_bytes(32) |> Base.url_encode64() + + token = %UserInviteToken{ + used: false, + token: token + } + + Repo.insert(token) + end + + def used_changeset(struct) do + struct + |> cast(%{}, []) + |> put_change(:used, true) + end + + def mark_as_used(token) do + with %{used: false} = token <- Repo.get_by(UserInviteToken, %{token: token}), + {:ok, token} <- Repo.update(used_changeset(token)) do + {:ok, token} + else + _e -> {:error, token} + end + end +end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index ee6a373d3..127bf4d9e 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -194,9 +194,7 @@ defmodule Pleroma.Web.Router do get("/statuses/show/:id", TwitterAPI.Controller, :fetch_status) get("/statusnet/conversation/:id", TwitterAPI.Controller, :fetch_conversation) - if @registrations_open do - post("/account/register", TwitterAPI.Controller, :register) - end + post("/account/register", TwitterAPI.Controller, :register) get("/search", TwitterAPI.Controller, :search) get("/statusnet/tags/timeline/:tag", TwitterAPI.Controller, :public_and_external_timeline) diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index ccc6fe8e7..8608ee9ac 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -1,11 +1,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do - alias Pleroma.{User, Activity, Repo, Object} + alias Pleroma.{UserInviteToken, User, Activity, Repo, Object} alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.TwitterAPI.UserView alias Pleroma.Web.{OStatus, CommonAPI} import Ecto.Query + @instance Application.get_env(:pleroma, :instance) @httpoison Application.get_env(:pleroma, :httpoison) + @registrations_open Keyword.get(@instance, :registrations_open) def create_status(%User{} = user, %{"status" => _} = data) do CommonAPI.post(user, data) @@ -124,6 +126,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do end def register_user(params) do + tokenString = params["token"] + params = %{ nickname: params["nickname"], name: params["fullname"], @@ -133,17 +137,29 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do password_confirmation: params["confirm"] } - changeset = User.register_changeset(%User{}, params) + # no need to query DB if registration is open + unless @registrations_open || is_nil(tokenString) do + token = Repo.get_by(UserInviteToken, %{token: tokenString}) + end + + cond do + @registrations_open || !is_nil(token) && !token.used -> + changeset = User.register_changeset(%User{}, params) - with {:ok, user} <- Repo.insert(changeset) do - {:ok, user} - else - {:error, changeset} -> - errors = - Ecto.Changeset.traverse_errors(changeset, fn {msg, _opts} -> msg end) - |> Jason.encode!() + with {:ok, user} <- Repo.insert(changeset) do + !@registrations_open && UserInviteToken.mark_as_used(token.token) + {:ok, user} + else + {:error, changeset} -> + errors = + Ecto.Changeset.traverse_errors(changeset, fn {msg, _opts} -> msg end) + |> Jason.encode!() + + {:error, %{error: errors}} + end - {:error, %{error: errors}} + !@registrations_open && is_nil(token) -> {:error, "Invalid token"} + !@registrations_open && token.used -> {:error, "Expired token"} end end -- cgit v1.2.3 From 9c1cf1befb9905282f6b8afcfee3cf3578f41431 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 12 Jun 2018 15:01:40 +0300 Subject: formatting --- lib/pleroma/web/twitter_api/twitter_api.ex | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 8608ee9ac..ce0da3340 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -143,7 +143,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do end cond do - @registrations_open || !is_nil(token) && !token.used -> + @registrations_open || (!is_nil(token) && !token.used) -> changeset = User.register_changeset(%User{}, params) with {:ok, user} <- Repo.insert(changeset) do @@ -155,11 +155,14 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do Ecto.Changeset.traverse_errors(changeset, fn {msg, _opts} -> msg end) |> Jason.encode!() - {:error, %{error: errors}} + {:error, %{error: errors}} end - !@registrations_open && is_nil(token) -> {:error, "Invalid token"} - !@registrations_open && token.used -> {:error, "Expired token"} + !@registrations_open && is_nil(token) -> + {:error, "Invalid token"} + + !@registrations_open && token.used -> + {:error, "Expired token"} end end -- cgit v1.2.3 From 0b1ca6a584219083e2d312abe2c1bdd8fab98e38 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sun, 17 Jun 2018 14:30:07 +0300 Subject: Token-generating task --- lib/mix/tasks/generate_invite_token.ex | 25 +++++++++++++++++++++ lib/pleroma/UserInviteToken.ex | 40 ---------------------------------- lib/pleroma/user_invite_token.ex | 40 ++++++++++++++++++++++++++++++++++ lib/pleroma/web/router.ex | 5 +++++ 4 files changed, 70 insertions(+), 40 deletions(-) create mode 100644 lib/mix/tasks/generate_invite_token.ex delete mode 100644 lib/pleroma/UserInviteToken.ex create mode 100644 lib/pleroma/user_invite_token.ex (limited to 'lib') diff --git a/lib/mix/tasks/generate_invite_token.ex b/lib/mix/tasks/generate_invite_token.ex new file mode 100644 index 000000000..a5f41ef0e --- /dev/null +++ b/lib/mix/tasks/generate_invite_token.ex @@ -0,0 +1,25 @@ +defmodule Mix.Tasks.GenerateInviteToken do + use Mix.Task + + @shortdoc "Generate password reset link for user" + def run([]) do + Mix.Task.run("app.start") + + with {:ok, token} <- Pleroma.UserInviteToken.create_token() do + IO.puts("Generated user invite token") + + IO.puts( + "Url: #{ + Pleroma.Web.Router.Helpers.redirect_url( + Pleroma.Web.Endpoint, + :registration_page, + token.token + ) + }" + ) + else + _ -> + IO.puts("Error creating token") + end + end +end diff --git a/lib/pleroma/UserInviteToken.ex b/lib/pleroma/UserInviteToken.ex deleted file mode 100644 index 48ee1019a..000000000 --- a/lib/pleroma/UserInviteToken.ex +++ /dev/null @@ -1,40 +0,0 @@ -defmodule Pleroma.UserInviteToken do - use Ecto.Schema - - import Ecto.Changeset - - alias Pleroma.{User, UserInviteToken, Repo} - - schema "user_invite_tokens" do - field(:token, :string) - field(:used, :boolean, default: false) - - timestamps() - end - - def create_token do - token = :crypto.strong_rand_bytes(32) |> Base.url_encode64() - - token = %UserInviteToken{ - used: false, - token: token - } - - Repo.insert(token) - end - - def used_changeset(struct) do - struct - |> cast(%{}, []) - |> put_change(:used, true) - end - - def mark_as_used(token) do - with %{used: false} = token <- Repo.get_by(UserInviteToken, %{token: token}), - {:ok, token} <- Repo.update(used_changeset(token)) do - {:ok, token} - else - _e -> {:error, token} - end - end -end diff --git a/lib/pleroma/user_invite_token.ex b/lib/pleroma/user_invite_token.ex new file mode 100644 index 000000000..48ee1019a --- /dev/null +++ b/lib/pleroma/user_invite_token.ex @@ -0,0 +1,40 @@ +defmodule Pleroma.UserInviteToken do + use Ecto.Schema + + import Ecto.Changeset + + alias Pleroma.{User, UserInviteToken, Repo} + + schema "user_invite_tokens" do + field(:token, :string) + field(:used, :boolean, default: false) + + timestamps() + end + + def create_token do + token = :crypto.strong_rand_bytes(32) |> Base.url_encode64() + + token = %UserInviteToken{ + used: false, + token: token + } + + Repo.insert(token) + end + + def used_changeset(struct) do + struct + |> cast(%{}, []) + |> put_change(:used, true) + end + + def mark_as_used(token) do + with %{used: false} = token <- Repo.get_by(UserInviteToken, %{token: token}), + {:ok, token} <- Repo.update(used_changeset(token)) do + {:ok, token} + else + _e -> {:error, token} + end + end +end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 127bf4d9e..dcbf7f008 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -344,6 +344,7 @@ defmodule Pleroma.Web.Router do end scope "/", Fallback do + get("/registration/:token", RedirectController, :registration_page) get("/*path", RedirectController, :redirector) end end @@ -358,4 +359,8 @@ defmodule Fallback.RedirectController do |> send_file(200, "priv/static/index.html") end end + + def registration_page(conn, params) do + redirector(conn, params) + end end -- cgit v1.2.3 From 082920044abeadb9daf593d7e58d210634f8b4a5 Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Thu, 21 Jun 2018 14:04:12 -0400 Subject: Normalize file extension for uploaded files --- lib/pleroma/upload.ex | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/upload.ex b/lib/pleroma/upload.ex index 43df0d418..6793c4671 100644 --- a/lib/pleroma/upload.ex +++ b/lib/pleroma/upload.ex @@ -110,20 +110,20 @@ defmodule Pleroma.Upload do if should_dedupe do create_name(uuid, List.last(String.split(file.filename, ".")), type) else - unless String.contains?(file.filename, ".") do - case type do - "image/png" -> file.filename <> ".png" - "image/jpeg" -> file.filename <> ".jpg" - "image/gif" -> file.filename <> ".gif" - "video/webm" -> file.filename <> ".webm" - "video/mp4" -> file.filename <> ".mp4" - "audio/mpeg" -> file.filename <> ".mp3" - "audio/ogg" -> file.filename <> ".ogg" - "audio/wav" -> file.filename <> ".wav" - _ -> file.filename + parts = String.split(file.filename, ".") + + new_filename = + if length(parts) > 1 do + Enum.drop(parts, -1) |> Enum.join(".") + else + Enum.join(parts) end - else - file.filename + + case type do + "application/octet-stream" -> file.filename + "audio/mpeg" -> new_filename <> ".mp3" + "image/jpeg" -> new_filename <> ".jpg" + _ -> Enum.join([new_filename, String.split(type, "/") |> List.last()], ".") end end end -- cgit v1.2.3 From 835345754d31da32a8614d780ce8db8e99f1983d Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 3 Jul 2018 17:26:04 +0200 Subject: /web/* template: Add class system-font --- lib/pleroma/web/templates/mastodon_api/mastodon/index.html.eex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/templates/mastodon_api/mastodon/index.html.eex b/lib/pleroma/web/templates/mastodon_api/mastodon/index.html.eex index 6a00b9e2c..0862412ea 100644 --- a/lib/pleroma/web/templates/mastodon_api/mastodon/index.html.eex +++ b/lib/pleroma/web/templates/mastodon_api/mastodon/index.html.eex @@ -19,7 +19,7 @@ - +
-- cgit v1.2.3 From f944f8157ac078aef5edda64059a5d6d3837bf53 Mon Sep 17 00:00:00 2001 From: hakabahitoyo Date: Sat, 14 Jul 2018 00:21:38 +0900 Subject: /api/v1/suggestions endpoint --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 5 +++++ lib/pleroma/web/router.ex | 2 ++ 2 files changed, 7 insertions(+) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 09e6b0b59..0184d52c8 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1070,4 +1070,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do |> put_status(500) |> json("Something went wrong") end + + def suggestions(conn, _) do + conn + |> json("SUGGESTIONS!") + end end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 34652cdde..f1c08c681 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -140,6 +140,8 @@ defmodule Pleroma.Web.Router do get("/domain_blocks", MastodonAPIController, :domain_blocks) post("/domain_blocks", MastodonAPIController, :block_domain) delete("/domain_blocks", MastodonAPIController, :unblock_domain) + + get("/suggestions", MastodonAPIController, :suggestions) end scope "/api/web", Pleroma.Web.MastodonAPI do -- cgit v1.2.3 From 4a21c1b343c3f62d78da1651ed490daf4dde5d97 Mon Sep 17 00:00:00 2001 From: hakabahitoyo Date: Sat, 14 Jul 2018 00:44:18 +0900 Subject: mock /api/v1/suggestions --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 0184d52c8..0f50eba84 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1071,8 +1071,12 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do |> json("Something went wrong") end - def suggestions(conn, _) do + def suggestions(%{assigns: %{user: user}} = conn, _) do + res = %{ + host: (String.replace Web.base_url(), "https://", ""), + user: user.nickname + } conn - |> json("SUGGESTIONS!") + |> json(res) end end -- cgit v1.2.3 From 3812b627ca546287e20a55cd49544a36eefffa0b Mon Sep 17 00:00:00 2001 From: hakabahitoyo Date: Sat, 14 Jul 2018 00:52:23 +0900 Subject: better mock /api/v1/suggestions --- .../web/mastodon_api/mastodon_api_controller.ex | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 0f50eba84..fb334352d 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1072,10 +1072,20 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do end def suggestions(%{assigns: %{user: user}} = conn, _) do - res = %{ - host: (String.replace Web.base_url(), "https://", ""), - user: user.nickname - } + res = [ + %{ + username: "vaginaplant", + acct: "vaginaplant@3.distsn.org", + display_name: "Hakaba Hitoyo", + note: "Recommendation Fairness Warrior", + avatar: "https://3.distsn.org/media/1c0cbe9d-8b87-496f-b964-1af8116b8f67/D38B0A8B021DC5565D06CF40EBB744E4B7CF8F7F16347094F9CD469348DCC267.jpeg", + avatar_static: "https://3.distsn.org/media/1c0cbe9d-8b87-496f-b964-1af8116b8f67/D38B0A8B021DC5565D06CF40EBB744E4B7CF8F7F16347094F9CD469348DCC267.jpeg" + }, + %{ + username: user.nickname, + acct: user.nickname <> "@" <> (String.replace Web.base_url(), "https://", "") + } + ] conn |> json(res) end -- cgit v1.2.3 From eb0afda3a72aa08a991e25b05c98ae798655f413 Mon Sep 17 00:00:00 2001 From: hakabahitoyo Date: Sat, 14 Jul 2018 10:04:37 +0900 Subject: http access to third party user recommendation --- .../web/mastodon_api/mastodon_api_controller.ex | 30 ++++++++++------------ 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index fb334352d..4f48a141b 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -11,6 +11,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do import Ecto.Query require Logger + @httpoison Application.get_env(:pleroma, :httpoison) + action_fallback(:errors) def create_app(conn, params) do @@ -1072,21 +1074,17 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do end def suggestions(%{assigns: %{user: user}} = conn, _) do - res = [ - %{ - username: "vaginaplant", - acct: "vaginaplant@3.distsn.org", - display_name: "Hakaba Hitoyo", - note: "Recommendation Fairness Warrior", - avatar: "https://3.distsn.org/media/1c0cbe9d-8b87-496f-b964-1af8116b8f67/D38B0A8B021DC5565D06CF40EBB744E4B7CF8F7F16347094F9CD469348DCC267.jpeg", - avatar_static: "https://3.distsn.org/media/1c0cbe9d-8b87-496f-b964-1af8116b8f67/D38B0A8B021DC5565D06CF40EBB744E4B7CF8F7F16347094F9CD469348DCC267.jpeg" - }, - %{ - username: user.nickname, - acct: user.nickname <> "@" <> (String.replace Web.base_url(), "https://", "") - } - ] - conn - |> json(res) + host = String.replace Web.base_url(), "https://", "" + user = user.nickname + api = "http://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-filtered-api.cgi?{{host}}+{{user}}" + url = String.replace(api, "{{host}}", host) |> String.replace("{{user}}", user) + with {:ok, %{status_code: 200, body: body}} <- + @httpoison.get(url), + {:ok, data} <- Jason.decode(body) do + conn + |> json(data) + else + e -> Logger.error("Could not decode user at fetch #{url}, #{inspect(e)}") + end end end -- cgit v1.2.3 From 127882a5d51d8243eae44ad7ed73bf6010804760 Mon Sep 17 00:00:00 2001 From: hakabahitoyo Date: Sat, 14 Jul 2018 11:41:09 +0900 Subject: configurable --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 4f48a141b..fd60db3d6 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1073,10 +1073,12 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do |> json("Something went wrong") end + @suggestions Application.get_env(:pleroma, :suggestions) + def suggestions(%{assigns: %{user: user}} = conn, _) do host = String.replace Web.base_url(), "https://", "" user = user.nickname - api = "http://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-filtered-api.cgi?{{host}}+{{user}}" + api = Keyword.get(@suggestions, :third_party_engine, "") url = String.replace(api, "{{host}}", host) |> String.replace("{{user}}", user) with {:ok, %{status_code: 200, body: body}} <- @httpoison.get(url), -- cgit v1.2.3 From 2eeaf01627efb2a13d73f4cde764d3cb1fef3e98 Mon Sep 17 00:00:00 2001 From: hakabahitoyo Date: Sat, 14 Jul 2018 14:03:30 +0900 Subject: id field --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index fd60db3d6..d87a6cb19 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1081,10 +1081,13 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do api = Keyword.get(@suggestions, :third_party_engine, "") url = String.replace(api, "{{host}}", host) |> String.replace("{{user}}", user) with {:ok, %{status_code: 200, body: body}} <- - @httpoison.get(url), + @httpoison.get(url, [], [timeout: 300000, recv_timeout: 300000]), {:ok, data} <- Jason.decode(body) do + data2 = Enum.slice(data, 0, 40) |> Enum.map(fn(x) -> + Map.put(x, "id", User.get_or_fetch(x["acct"]).id) + end) conn - |> json(data) + |> json(data2) else e -> Logger.error("Could not decode user at fetch #{url}, #{inspect(e)}") end -- cgit v1.2.3 From e7c580828c109247de11624bae8c7286b02441e5 Mon Sep 17 00:00:00 2001 From: hakabahitoyo Date: Sun, 15 Jul 2018 20:36:26 +0900 Subject: format --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index d87a6cb19..e397b911d 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1076,16 +1076,20 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do @suggestions Application.get_env(:pleroma, :suggestions) def suggestions(%{assigns: %{user: user}} = conn, _) do - host = String.replace Web.base_url(), "https://", "" + host = String.replace(Web.base_url(), "https://", "") user = user.nickname api = Keyword.get(@suggestions, :third_party_engine, "") url = String.replace(api, "{{host}}", host) |> String.replace("{{user}}", user) + with {:ok, %{status_code: 200, body: body}} <- - @httpoison.get(url, [], [timeout: 300000, recv_timeout: 300000]), + @httpoison.get(url, [], timeout: 300_000, recv_timeout: 300_000), {:ok, data} <- Jason.decode(body) do - data2 = Enum.slice(data, 0, 40) |> Enum.map(fn(x) -> - Map.put(x, "id", User.get_or_fetch(x["acct"]).id) - end) + data2 = + Enum.slice(data, 0, 40) + |> Enum.map(fn x -> + Map.put(x, "id", User.get_or_fetch(x["acct"]).id) + end) + conn |> json(data2) else -- cgit v1.2.3 From df3233e7e798563afe4b5a937b0bdd13e101973b Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Tue, 17 Jul 2018 13:20:58 +0900 Subject: improve getting host name --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index e397b911d..2f8139fe6 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1076,7 +1076,11 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do @suggestions Application.get_env(:pleroma, :suggestions) def suggestions(%{assigns: %{user: user}} = conn, _) do - host = String.replace(Web.base_url(), "https://", "") + host = + Application.get_env(:pleroma, Pleroma.Web.Endpoint) + |> Keyword.get(:url) + |> Keyword.get(:host) + user = user.nickname api = Keyword.get(@suggestions, :third_party_engine, "") url = String.replace(api, "{{host}}", host) |> String.replace("{{user}}", user) -- cgit v1.2.3 From d76f0d87bebd655bcbc4259a47a4ee8fd4f00887 Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Tue, 17 Jul 2018 16:45:18 +0900 Subject: do nothing if configuration is skipped --- .../web/mastodon_api/mastodon_api_controller.ex | 45 ++++++++++++---------- 1 file changed, 25 insertions(+), 20 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 2f8139fe6..ac8f794e9 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1076,28 +1076,33 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do @suggestions Application.get_env(:pleroma, :suggestions) def suggestions(%{assigns: %{user: user}} = conn, _) do - host = - Application.get_env(:pleroma, Pleroma.Web.Endpoint) - |> Keyword.get(:url) - |> Keyword.get(:host) - - user = user.nickname - api = Keyword.get(@suggestions, :third_party_engine, "") - url = String.replace(api, "{{host}}", host) |> String.replace("{{user}}", user) - - with {:ok, %{status_code: 200, body: body}} <- - @httpoison.get(url, [], timeout: 300_000, recv_timeout: 300_000), - {:ok, data} <- Jason.decode(body) do - data2 = - Enum.slice(data, 0, 40) - |> Enum.map(fn x -> - Map.put(x, "id", User.get_or_fetch(x["acct"]).id) - end) + api = Keyword.get(@suggestions, :third_party_engine, false) + + if api do + host = + Application.get_env(:pleroma, Pleroma.Web.Endpoint) + |> Keyword.get(:url) + |> Keyword.get(:host) + + user = user.nickname + url = String.replace(api, "{{host}}", host) |> String.replace("{{user}}", user) + + with {:ok, %{status_code: 200, body: body}} <- + @httpoison.get(url, [], timeout: 300_000, recv_timeout: 300_000), + {:ok, data} <- Jason.decode(body) do + data2 = + Enum.slice(data, 0, 40) + |> Enum.map(fn x -> + Map.put(x, "id", User.get_or_fetch(x["acct"]).id) + end) - conn - |> json(data2) + conn + |> json(data2) + else + e -> Logger.error("Could not decode user at fetch #{url}, #{inspect(e)}") + end else - e -> Logger.error("Could not decode user at fetch #{url}, #{inspect(e)}") + json(conn, []) end end end -- cgit v1.2.3 From 2b7b1b3e6b276e1db7e610d46298f74a0f0c70f1 Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Tue, 17 Jul 2018 16:56:30 +0900 Subject: add suggestionsThirdPartyEngine into /nodeinfo/2.0.json --- lib/pleroma/web/nodeinfo/nodeinfo_controller.ex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index 12aca4a10..77401c554 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -21,6 +21,7 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do def nodeinfo(conn, %{"version" => "2.0"}) do instance = Application.get_env(:pleroma, :instance) media_proxy = Application.get_env(:pleroma, :media_proxy) + suggestions = Application.get_env(:pleroma, :suggestions) stats = Stats.get_stats() response = %{ @@ -43,7 +44,8 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do }, metadata: %{ nodeName: Keyword.get(instance, :name), - mediaProxy: Keyword.get(media_proxy, :enabled) + mediaProxy: Keyword.get(media_proxy, :enabled), + suggestionsThirdPartyEngine: Keyword.get(@suggestions, :third_party_engine, false) } } -- cgit v1.2.3 From 8ff336e02a5a4861ba856b3d10e57cb44f1f3a45 Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Tue, 17 Jul 2018 17:00:14 +0900 Subject: debug --- lib/pleroma/web/nodeinfo/nodeinfo_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index 77401c554..5f7d6e86e 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -45,7 +45,7 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do metadata: %{ nodeName: Keyword.get(instance, :name), mediaProxy: Keyword.get(media_proxy, :enabled), - suggestionsThirdPartyEngine: Keyword.get(@suggestions, :third_party_engine, false) + suggestionsThirdPartyEngine: Keyword.get(suggestions, :third_party_engine, false) } } -- cgit v1.2.3 From 5b4a21317de6a32001699b33964c7eaeb4f0bec8 Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Tue, 17 Jul 2018 17:29:18 +0900 Subject: correct error message --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index ac8f794e9..2ad6521cc 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1099,7 +1099,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do conn |> json(data2) else - e -> Logger.error("Could not decode user at fetch #{url}, #{inspect(e)}") + e -> Logger.error("Could not retrieve suggestions at fetch #{url}, #{inspect(e)}") end else json(conn, []) -- cgit v1.2.3 From e4dd58307a692aaa503fccc9cdf9ebae61293f6f Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Wed, 18 Jul 2018 09:58:59 +0900 Subject: better configuration --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 4 ++-- lib/pleroma/web/nodeinfo/nodeinfo_controller.ex | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 2ad6521cc..5b79f9600 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1076,9 +1076,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do @suggestions Application.get_env(:pleroma, :suggestions) def suggestions(%{assigns: %{user: user}} = conn, _) do - api = Keyword.get(@suggestions, :third_party_engine, false) + if Keyword.get(@suggestions, :enabled, false) do + api = Keyword.get(@suggestions, :third_party_engine, false) - if api do host = Application.get_env(:pleroma, Pleroma.Web.Endpoint) |> Keyword.get(:url) diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index 5f7d6e86e..e80e63f27 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -45,6 +45,7 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do metadata: %{ nodeName: Keyword.get(instance, :name), mediaProxy: Keyword.get(media_proxy, :enabled), + suggestions: Keyword.get(suggestions, :enabled, false), suggestionsThirdPartyEngine: Keyword.get(suggestions, :third_party_engine, false) } } -- cgit v1.2.3 From b12d17d2ce270e0d964f599efd4f16fba95b17ce Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Wed, 18 Jul 2018 13:36:20 +0900 Subject: configurable timeout --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 5 +++-- lib/pleroma/web/nodeinfo/nodeinfo_controller.ex | 7 +++++-- 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 5b79f9600..396f11a70 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1077,7 +1077,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do def suggestions(%{assigns: %{user: user}} = conn, _) do if Keyword.get(@suggestions, :enabled, false) do - api = Keyword.get(@suggestions, :third_party_engine, false) + api = Keyword.get(@suggestions, :third_party_engine, "") + timeout = Keyword.get(@suggestions, :timeout, 5000) host = Application.get_env(:pleroma, Pleroma.Web.Endpoint) @@ -1088,7 +1089,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do url = String.replace(api, "{{host}}", host) |> String.replace("{{user}}", user) with {:ok, %{status_code: 200, body: body}} <- - @httpoison.get(url, [], timeout: 300_000, recv_timeout: 300_000), + @httpoison.get(url, [], timeout: timeout, recv_timeout: timeout), {:ok, data} <- Jason.decode(body) do data2 = Enum.slice(data, 0, 40) diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index e80e63f27..42d322f89 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -45,8 +45,11 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do metadata: %{ nodeName: Keyword.get(instance, :name), mediaProxy: Keyword.get(media_proxy, :enabled), - suggestions: Keyword.get(suggestions, :enabled, false), - suggestionsThirdPartyEngine: Keyword.get(suggestions, :third_party_engine, false) + suggestions: %{ + enabled: Keyword.get(suggestions, :enabled, false), + thirdPartyEngine: Keyword.get(suggestions, :third_party_engine, ""), + timeout: Keyword.get(suggestions, :timeout, 5000) + } } } -- cgit v1.2.3 From 3623504e5d7b4dd6dd250151685343109de1e889 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 18 Jun 2018 12:45:15 +0200 Subject: [Pleroma.Formatter]: Add support for non-HTTP schemes in URIs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The call to the regex in add_links is there just to be sure it’s a legal URI, it can be removed if you want to get more performance. The URI Schemes list is sorted, but with http(s) at the start (in case it might make it faster for common links). Closes: https://git.pleroma.social/pleroma/pleroma/issues/127 --- lib/pleroma/formatter.ex | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 0aaf21538..fe3da09ac 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -165,8 +165,29 @@ defmodule Pleroma.Formatter do @emoji end - @link_regex ~r/https?:\/\/[\w\.\/?=\-#\+%&@~'\(\):]+[\w\/]/u + @link_regex ~r/[0-9a-z+\-\.]+:[0-9a-z$-_.+!*'(),]+/ui + + # IANA got a list https://www.iana.org/assignments/uri-schemes/ but + # Stuff like ipfs isn’t in it + # There is very niche stuff + @uri_schemes [ + "https://", + "http://", + "dat://", + "dweb://", + "gopher://", + "ipfs://", + "ipns://", + "irc:", + "ircs:", + "magnet:", + "mailto:", + "mumble:", + "ssb://", + "xmpp:" + ] + # TODO: make it use something other than @link_regex def html_escape(text) do Regex.split(@link_regex, text, include_captures: true) |> Enum.map_every(2, fn chunk -> @@ -176,11 +197,14 @@ defmodule Pleroma.Formatter do |> Enum.join("") end - @doc "changes http:... links to html links" + @doc "changes scheme:... urls to html links" def add_links({subs, text}) do links = - Regex.scan(@link_regex, text) - |> Enum.map(fn [url] -> {Ecto.UUID.generate(), url} end) + text + |> String.split([" ", "\t", "
"]) + |> Enum.filter(fn word -> String.starts_with?(word, @uri_schemes) end) + |> Enum.filter(fn word -> Regex.match?(@link_regex, word) end) + |> Enum.map(fn url -> {Ecto.UUID.generate(), url} end) |> Enum.sort_by(fn {_, url} -> -String.length(url) end) uuid_text = -- cgit v1.2.3 From d5091c3175786e5bcb0449f26cafe1795fd5f5d9 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 30 Jul 2018 21:59:04 +0200 Subject: Allow additionnal schemes in the config --- lib/pleroma/formatter.ex | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index fe3da09ac..e15c08fd6 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -199,10 +199,14 @@ defmodule Pleroma.Formatter do @doc "changes scheme:... urls to html links" def add_links({subs, text}) do + additionnal_schemes = + Application.get_env(:pleroma, :uri_schemes, []) + |> Keyword.get(:additionnal_schemes, []) + links = text |> String.split([" ", "\t", "
"]) - |> Enum.filter(fn word -> String.starts_with?(word, @uri_schemes) end) + |> Enum.filter(fn word -> String.starts_with?(word, @uri_schemes ++ additionnal_schemes) end) |> Enum.filter(fn word -> Regex.match?(@link_regex, word) end) |> Enum.map(fn url -> {Ecto.UUID.generate(), url} end) |> Enum.sort_by(fn {_, url} -> -String.length(url) end) -- cgit v1.2.3 From f72cfada1ad5cf7ca398ceddf4f70b3b192310ca Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Thu, 2 Aug 2018 18:03:35 +0900 Subject: add suggestions/web config --- lib/pleroma/web/nodeinfo/nodeinfo_controller.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index f9a6d9c25..2fab60274 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -50,7 +50,8 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do suggestions: %{ enabled: Keyword.get(suggestions, :enabled, false), thirdPartyEngine: Keyword.get(suggestions, :third_party_engine, ""), - timeout: Keyword.get(suggestions, :timeout, 5000) + timeout: Keyword.get(suggestions, :timeout, 5000), + web: Keyword.get(suggestions, :web, "") } } } -- cgit v1.2.3 From 0ee29994a5506420f9b1c26568ad15a5d7db3d6e Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Sun, 5 Aug 2018 00:35:29 +0000 Subject: formatter: preserve case of hashtags when generating hashtag links, we used the casefolded version that we use in the link URLs, instead of the original version. accordingly, adjust the formatter to use the original text for the links, while keeping the casefolded version for the URLs. --- lib/pleroma/formatter.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 0aaf21538..d199c9243 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -244,8 +244,8 @@ defmodule Pleroma.Formatter do subs = subs ++ - Enum.map(tags, fn {_, tag, uuid} -> - url = "" + Enum.map(tags, fn {tag_text, tag, uuid} -> + url = "" {uuid, url} end) -- cgit v1.2.3 From 275c42e4382b47099d6bf70404ab8a97768628b5 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Sun, 5 Aug 2018 01:10:05 +0000 Subject: user: filter out duplicate follow requests --- lib/pleroma/user.ex | 1 + 1 file changed, 1 insertion(+) (limited to 'lib') diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index df22d29a8..fa0ea171d 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -398,6 +398,7 @@ defmodule Pleroma.User do Enum.map(reqs, fn req -> req.actor end) |> Enum.uniq() |> Enum.map(fn ap_id -> get_by_ap_id(ap_id) end) + |> Enum.filter(fn u -> !following?(u, user) end) {:ok, users} end -- cgit v1.2.3 From c2d1a5e9c4f4ef316a2833914c8f134c00c95b75 Mon Sep 17 00:00:00 2001 From: eal Date: Tue, 7 Aug 2018 21:56:50 +0300 Subject: MastoAPI AccountView: render profile emoji. --- lib/pleroma/web/mastodon_api/views/account_view.ex | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index f33d615cf..cc5261616 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -14,6 +14,18 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do header = User.banner_url(user) |> MediaProxy.url() user_info = User.user_info(user) + emojis = + (user.info["source_data"]["tag"] || []) + |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end) + |> Enum.map(fn %{"icon" => %{"url" => url}, "name" => name} -> + %{ + "shortcode" => String.trim(name, ":"), + "url" => MediaProxy.url(url), + "static_url" => MediaProxy.url(url), + "visible_in_picker" => false + } + end) + %{ id: to_string(user.id), username: hd(String.split(user.nickname, "@")), @@ -30,7 +42,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do avatar_static: image, header: header, header_static: header, - emojis: [], + emojis: emojis, fields: [], source: %{ note: "", -- cgit v1.2.3 From cee63ad3f725a90fdd1a438520c33377cee8ad81 Mon Sep 17 00:00:00 2001 From: eal Date: Wed, 8 Aug 2018 08:38:25 +0300 Subject: TwitterAPI user view: add screen_name_html and description_html. --- lib/pleroma/web/twitter_api/views/user_view.ex | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex index 9c8460378..30cf266bd 100644 --- a/lib/pleroma/web/twitter_api/views/user_view.ex +++ b/lib/pleroma/web/twitter_api/views/user_view.ex @@ -1,6 +1,7 @@ defmodule Pleroma.Web.TwitterAPI.UserView do use Pleroma.Web, :view alias Pleroma.User + alias Pleroma.Formatter alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MediaProxy @@ -28,9 +29,19 @@ defmodule Pleroma.Web.TwitterAPI.UserView do user_info = User.get_cached_user_info(user) + emoji = + (user.info["source_data"]["tag"] || []) + |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end) + |> Enum.map(fn %{"icon" => %{"url" => url}, "name" => name} -> + {String.trim(name, ":"), url} + end) + + bio = HtmlSanitizeEx.strip_tags(user.bio) + data = %{ "created_at" => user.inserted_at |> Utils.format_naive_asctime(), - "description" => HtmlSanitizeEx.strip_tags(user.bio), + "description" => bio, + "description_html" => bio |> Formatter.emojify(emoji), "favourites_count" => 0, "followers_count" => user_info[:follower_count], "following" => following, @@ -47,6 +58,7 @@ defmodule Pleroma.Web.TwitterAPI.UserView do "delete_others_notice" => !!user.info["is_moderator"] }, "screen_name" => user.nickname, + "screen_name_html" => Formatter.emojify(user.nickname, emoji), "statuses_count" => user_info[:note_count], "statusnet_profile_url" => user.ap_id, "cover_photo" => User.banner_url(user) |> MediaProxy.url(), -- cgit v1.2.3 From ed9738e031e02a9338bedd3a8f3ff73329c101e7 Mon Sep 17 00:00:00 2001 From: eal Date: Wed, 8 Aug 2018 09:24:50 +0300 Subject: Add tests for emoji in user profiles Also use the correct field in TwitterAPI... --- lib/pleroma/web/twitter_api/views/user_view.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex index 30cf266bd..30aaaf1ce 100644 --- a/lib/pleroma/web/twitter_api/views/user_view.ex +++ b/lib/pleroma/web/twitter_api/views/user_view.ex @@ -50,6 +50,7 @@ defmodule Pleroma.Web.TwitterAPI.UserView do "friends_count" => user_info[:following_count], "id" => user.id, "name" => user.name, + "name_html" => Formatter.emojify(user.name, emoji), "profile_image_url" => image, "profile_image_url_https" => image, "profile_image_url_profile_size" => image, @@ -58,7 +59,6 @@ defmodule Pleroma.Web.TwitterAPI.UserView do "delete_others_notice" => !!user.info["is_moderator"] }, "screen_name" => user.nickname, - "screen_name_html" => Formatter.emojify(user.nickname, emoji), "statuses_count" => user_info[:note_count], "statusnet_profile_url" => user.ap_id, "cover_photo" => User.banner_url(user) |> MediaProxy.url(), -- cgit v1.2.3 From 37b802682ce1231f99976538a11c1584d48f47f4 Mon Sep 17 00:00:00 2001 From: eal Date: Thu, 9 Aug 2018 13:07:03 +0300 Subject: HTML-sanitize usernames before emojifying. --- lib/pleroma/web/twitter_api/views/user_view.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex index 30aaaf1ce..7d0f0e703 100644 --- a/lib/pleroma/web/twitter_api/views/user_view.ex +++ b/lib/pleroma/web/twitter_api/views/user_view.ex @@ -50,7 +50,7 @@ defmodule Pleroma.Web.TwitterAPI.UserView do "friends_count" => user_info[:following_count], "id" => user.id, "name" => user.name, - "name_html" => Formatter.emojify(user.name, emoji), + "name_html" => HtmlSanitizeEx.strip_tags(user.name) |> Formatter.emojify(emoji), "profile_image_url" => image, "profile_image_url_https" => image, "profile_image_url_profile_size" => image, -- cgit v1.2.3 From db5cdfa333c80eb9da419956d843ac123835994c Mon Sep 17 00:00:00 2001 From: eal Date: Thu, 9 Aug 2018 20:47:29 +0300 Subject: Remote follow: don't show confusing error if already following --- lib/pleroma/web/twitter_api/controllers/util_controller.ex | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 47fc79350..24ebdf007 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -99,6 +99,10 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do conn |> render("followed.html", %{error: false}) else + # Was already following user + {:error, "Could not follow user:" <> _rest} -> + render(conn, "followed.html", %{error: false}) + _e -> conn |> render("follow_login.html", %{ @@ -117,6 +121,11 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do conn |> render("followed.html", %{error: false}) else + # Was already following user + {:error, "Could not follow user:" <> _rest} -> + conn + |> render("followed.html", %{error: false}) + e -> Logger.debug("Remote follow failed with error #{inspect(e)}") -- cgit v1.2.3 From e7b00f202f717ca3c7ca2d624d6ad7d79f499ac6 Mon Sep 17 00:00:00 2001 From: "trqx@goat.si" Date: Thu, 9 Aug 2018 16:17:45 +0200 Subject: fix gopher server informational messages some gopher clients did not accept those lines due to a missing tab --- lib/pleroma/gopher/server.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/gopher/server.ex b/lib/pleroma/gopher/server.ex index f6abcd4d0..4bdd27959 100644 --- a/lib/pleroma/gopher/server.ex +++ b/lib/pleroma/gopher/server.ex @@ -54,7 +54,7 @@ defmodule Pleroma.Gopher.Server.ProtocolHandler do String.split(text, "\r") |> Enum.map(fn text -> - "i#{text}\tfake\(NULL)\t0\r\n" + "i#{text}\tfake\t(NULL)\t0\r\n" end) |> Enum.join("") end -- cgit v1.2.3 From af30f3f648db36338c997c3900a9504a8fca6fd5 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Fri, 10 Aug 2018 18:01:42 +0200 Subject: lib/pleroma/gopher/server.ex: Fix errorneous empty lines --- lib/pleroma/gopher/server.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/gopher/server.ex b/lib/pleroma/gopher/server.ex index 4bdd27959..97a1dea77 100644 --- a/lib/pleroma/gopher/server.ex +++ b/lib/pleroma/gopher/server.ex @@ -77,14 +77,14 @@ defmodule Pleroma.Gopher.Server.ProtocolHandler do link("Post ##{activity.id} by #{user.nickname}", "/notices/#{activity.id}") <> info("#{like_count} likes, #{announcement_count} repeats") <> - "\r\n" <> + "i\tfake\t(NULL)\t0\r\n" <> info( HtmlSanitizeEx.strip_tags( String.replace(activity.data["object"]["content"], "
", "\r") ) ) end) - |> Enum.join("\r\n") + |> Enum.join("i\tfake\t(NULL)\t0\r\n") end def response("") do -- cgit v1.2.3 From 1e9d152d608c83c906ed9a4ca2c6a21d644e2728 Mon Sep 17 00:00:00 2001 From: lambda Date: Sun, 12 Aug 2018 11:11:08 +0000 Subject: Update generate_invite_token.ex --- lib/mix/tasks/generate_invite_token.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/mix/tasks/generate_invite_token.ex b/lib/mix/tasks/generate_invite_token.ex index a5f41ef0e..c4daa9a6c 100644 --- a/lib/mix/tasks/generate_invite_token.ex +++ b/lib/mix/tasks/generate_invite_token.ex @@ -1,7 +1,7 @@ defmodule Mix.Tasks.GenerateInviteToken do use Mix.Task - @shortdoc "Generate password reset link for user" + @shortdoc "Generate invite token for user" def run([]) do Mix.Task.run("app.start") -- cgit v1.2.3 From ffd9ad1f0ca745ac592f7ed763aa2250ff84ff08 Mon Sep 17 00:00:00 2001 From: lain Date: Sun, 12 Aug 2018 18:41:33 +0200 Subject: Fix for elixir 1.7. --- lib/pleroma/web/twitter_api/twitter_api.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 9d8815ce7..3bc2f350f 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -134,8 +134,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do } # no need to query DB if registration is open - unless @registrations_open || is_nil(tokenString) do - token = Repo.get_by(UserInviteToken, %{token: tokenString}) + token = unless @registrations_open || is_nil(tokenString) do + Repo.get_by(UserInviteToken, %{token: tokenString}) end cond do -- cgit v1.2.3 From 8c0c93004127f58d1d4f8b3458de66830c30ad29 Mon Sep 17 00:00:00 2001 From: lain Date: Sun, 12 Aug 2018 19:42:21 +0200 Subject: formatting --- lib/pleroma/web/twitter_api/twitter_api.ex | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 3bc2f350f..dbad08e66 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -134,9 +134,10 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do } # no need to query DB if registration is open - token = unless @registrations_open || is_nil(tokenString) do - Repo.get_by(UserInviteToken, %{token: tokenString}) - end + token = + unless @registrations_open || is_nil(tokenString) do + Repo.get_by(UserInviteToken, %{token: tokenString}) + end cond do @registrations_open || (!is_nil(token) && !token.used) -> -- cgit v1.2.3 From f446e75577d456e365eedb4e047a586d86e97b7a Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Tue, 14 Aug 2018 17:05:11 +0000 Subject: activitypub: transmogrifier: add necessary translations for kroeg --- lib/pleroma/web/activity_pub/transmogrifier.ex | 27 +++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 2ebc526df..e5fb6e033 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -21,6 +21,10 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do Enum.at(actor, 0) end + def get_actor(%{"actor" => actor}) when is_map(actor) do + actor["id"] + end + def get_actor(%{"actor" => actor_list}) do Enum.find(actor_list, fn %{"type" => type} -> type == "Person" end) |> Map.get("id") @@ -38,6 +42,24 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do |> fix_emoji |> fix_tag |> fix_content_map + |> fix_addressing + end + + def fix_addressing_list(map, field) do + if is_binary(map[field]) do + map + |> Map.put(field, [map[field]]) + else + map + end + end + + def fix_addressing(map) do + map + |> fix_addressing_list("to") + |> fix_addressing_list("cc") + |> fix_addressing_list("bto") + |> fix_addressing_list("bcc") end def fix_actor(%{"attributedTo" => actor} = object) do @@ -143,7 +165,10 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do def handle_incoming(%{"type" => "Create", "object" => %{"type" => objtype} = object} = data) when objtype in ["Article", "Note"] do actor = get_actor(data) - data = Map.put(data, "actor", actor) + + data = + Map.put(data, "actor", actor) + |> fix_addressing with nil <- Activity.get_create_activity_by_object_ap_id(object["id"]), %User{} = user <- User.get_or_fetch_by_ap_id(data["actor"]) do -- cgit v1.2.3 From b5a92b119955939b5c0be0cf3fd5119ad31a2adf Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Thu, 16 Aug 2018 23:36:35 +0000 Subject: mastodon api: add undocumented fields to json response, return app id as string like mastodon itself does --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index cd9525252..d3b95e793 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -19,9 +19,12 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do with cs <- App.register_changeset(%App{}, params) |> IO.inspect(), {:ok, app} <- Repo.insert(cs) |> IO.inspect() do res = %{ - id: app.id, + id: app.id |> to_string, + name: app.name, client_id: app.client_id, - client_secret: app.client_secret + client_secret: app.client_secret, + redirect_uris: app.redirect_uris, + website: app.website } json(conn, res) -- cgit v1.2.3 From a3ef2ebb35901532fbf3fb754ae5a2832ed31a2b Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Thu, 16 Aug 2018 23:49:35 +0000 Subject: mastodon api controller: client_name, not name --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index d3b95e793..f17e2eda2 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -20,7 +20,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do {:ok, app} <- Repo.insert(cs) |> IO.inspect() do res = %{ id: app.id |> to_string, - name: app.name, + name: app.client_name, client_id: app.client_id, client_secret: app.client_secret, redirect_uris: app.redirect_uris, -- cgit v1.2.3 From 6698749073b711a63c093325dbecb1021882af24 Mon Sep 17 00:00:00 2001 From: shadowfacts Date: Fri, 17 Aug 2018 12:48:24 +0000 Subject: Fix typo in app creation response Mastodon sends redirect_uri (singular), so should Pleroma. --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index f17e2eda2..b8c605e83 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -23,7 +23,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do name: app.client_name, client_id: app.client_id, client_secret: app.client_secret, - redirect_uris: app.redirect_uris, + redirect_uri: app.redirect_uris, website: app.website } -- cgit v1.2.3 From 51a21284c6ed361a9f03cdca103d31c668b4962e Mon Sep 17 00:00:00 2001 From: eal Date: Mon, 20 Aug 2018 14:51:13 +0300 Subject: ActivityPub: follow redirects when fetching user --- lib/pleroma/web/activity_pub/activity_pub.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index ec605b694..cb14f6a57 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -565,7 +565,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do def fetch_and_prepare_user_from_ap_id(ap_id) do with {:ok, %{status_code: 200, body: body}} <- - @httpoison.get(ap_id, Accept: "application/activity+json"), + @httpoison.get(ap_id, [Accept: "application/activity+json"], follow_redirect: true), {:ok, data} <- Jason.decode(body) do user_data_from_user_object(data) else -- cgit v1.2.3 From 145546e52a44c57993ca49d4abd4646193c1e3bc Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Wed, 21 Mar 2018 00:51:47 +0000 Subject: common api: format hashtags in the same way as we format mentions --- lib/pleroma/web/common_api/utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 30089f553..eace3c8a1 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -109,7 +109,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do |> Enum.sort_by(fn {tag, _} -> -String.length(tag) end) Enum.reduce(tags, text, fn {full, tag}, text -> - url = "#" + url = "" String.replace(text, full, url) end) end -- cgit v1.2.3 From c033d2004b8d5a8e2d5fd2553d6e20bad7bb57a5 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Mon, 20 Aug 2018 18:40:05 +0000 Subject: formatting --- lib/pleroma/web/common_api/utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index eace3c8a1..c7b0d7935 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -109,7 +109,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do |> Enum.sort_by(fn {tag, _} -> -String.length(tag) end) Enum.reduce(tags, text, fn {full, tag}, text -> - url = "" + url = "" String.replace(text, full, url) end) end -- cgit v1.2.3 From 175f0bebbc8ee420082b10b00e49e490f65d4c5f Mon Sep 17 00:00:00 2001 From: ensra Date: Tue, 21 Aug 2018 10:53:53 +0100 Subject: mastodon api: sanitize the bio HTML --- lib/pleroma/web/mastodon_api/views/account_view.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index cc5261616..d9edcae7f 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -36,7 +36,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do followers_count: user_info.follower_count, following_count: user_info.following_count, statuses_count: user_info.note_count, - note: user.bio || "", + note: HtmlSanitizeEx.basic_html(user.bio) || "", url: user.ap_id, avatar: image, avatar_static: image, -- cgit v1.2.3 From 5debd7b5cc31a6dedd8d0c8bc177be2cd1b995aa Mon Sep 17 00:00:00 2001 From: ensra Date: Tue, 21 Aug 2018 14:03:36 +0100 Subject: Twitter API: Support Mastodon-style bios (multi-line, with links, and user mentions) --- lib/pleroma/web/twitter_api/twitter_api_controller.ex | 15 +++++++++++++-- lib/pleroma/web/twitter_api/views/user_view.ex | 6 ++---- 2 files changed, 15 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 65e67396b..dfa6d2464 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -1,7 +1,9 @@ defmodule Pleroma.Web.TwitterAPI.Controller do use Pleroma.Web, :controller + alias Pleroma.Formatter alias Pleroma.Web.TwitterAPI.{TwitterAPI, UserView, ActivityView, NotificationView} alias Pleroma.Web.CommonAPI + alias Pleroma.Web.CommonAPI.Utils, as: CommonUtils alias Pleroma.{Repo, Activity, User, Notification} alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Utils @@ -411,8 +413,17 @@ defmodule Pleroma.Web.TwitterAPI.Controller do def update_profile(%{assigns: %{user: user}} = conn, params) do params = if bio = params["description"] do - bio_brs = Regex.replace(~r/\r?\n/, bio, "
") - Map.put(params, "bio", bio_brs) + mentions = Formatter.parse_mentions(bio) + tags = Formatter.parse_tags(bio) + emoji = + (user.info["source_data"]["tag"] || []) + |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end) + |> Enum.map(fn %{"icon" => %{"url" => url}, "name" => name} -> + {String.trim(name, ":"), url} + end) + bio_html = CommonUtils.format_input(bio, mentions, tags) + |> Formatter.emojify(emoji) + Map.put(params, "bio", bio_html) else params end diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex index 7d0f0e703..25fda1aa8 100644 --- a/lib/pleroma/web/twitter_api/views/user_view.ex +++ b/lib/pleroma/web/twitter_api/views/user_view.ex @@ -36,12 +36,10 @@ defmodule Pleroma.Web.TwitterAPI.UserView do {String.trim(name, ":"), url} end) - bio = HtmlSanitizeEx.strip_tags(user.bio) - data = %{ "created_at" => user.inserted_at |> Utils.format_naive_asctime(), - "description" => bio, - "description_html" => bio |> Formatter.emojify(emoji), + "description" => HtmlSanitizeEx.strip_tags(user.bio |> String.replace("
", "\n")), + "description_html" => HtmlSanitizeEx.basic_html(user.bio), "favourites_count" => 0, "followers_count" => user_info[:follower_count], "following" => following, -- cgit v1.2.3 From cdb3dd48ab7177a21e1cdcef4bcff00bf5dc124f Mon Sep 17 00:00:00 2001 From: ensra Date: Tue, 21 Aug 2018 14:12:55 +0100 Subject: Format --- lib/pleroma/web/twitter_api/twitter_api_controller.ex | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index dfa6d2464..b3a56b27e 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -415,15 +415,16 @@ defmodule Pleroma.Web.TwitterAPI.Controller do if bio = params["description"] do mentions = Formatter.parse_mentions(bio) tags = Formatter.parse_tags(bio) + emoji = (user.info["source_data"]["tag"] || []) |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end) |> Enum.map(fn %{"icon" => %{"url" => url}, "name" => name} -> {String.trim(name, ":"), url} end) + bio_html = CommonUtils.format_input(bio, mentions, tags) - |> Formatter.emojify(emoji) - Map.put(params, "bio", bio_html) + Map.put(params, "bio", bio_html |> Formatter.emojify(emoji)) else params end -- cgit v1.2.3 From 1495d04789239f78e06c7b4af4219f54be15eeaa Mon Sep 17 00:00:00 2001 From: ensra Date: Tue, 21 Aug 2018 14:51:27 +0100 Subject: fix test for converting bio \r\n to
. --- lib/pleroma/web/common_api/utils.ex | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index c7b0d7935..869f4c566 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -64,7 +64,6 @@ defmodule Pleroma.Web.CommonAPI.Utils do def make_content_html(status, mentions, attachments, tags, no_attachment_links \\ false) do status - |> String.replace("\r", "") |> format_input(mentions, tags) |> maybe_add_attachments(attachments, no_attachment_links) end @@ -95,7 +94,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do def format_input(text, mentions, tags) do text |> Formatter.html_escape() - |> String.replace("\n", "
") + |> String.replace(~r/\r?\n/, "
") |> (&{[], &1}).() |> Formatter.add_links() |> Formatter.add_user_links(mentions) -- cgit v1.2.3 From ef4f982e2c6447733679f3e490c2666c7a795a5f Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 1 Aug 2018 03:24:39 +0200 Subject: Pleroma.Web.ActivityPub.Transmogrifier: Fix actor being a list of objects (Peertube) --- lib/pleroma/web/activity_pub/transmogrifier.ex | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index e5fb6e033..39e2bb8a9 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -18,18 +18,18 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do end def get_actor(%{"actor" => actor}) when is_list(actor) do - Enum.at(actor, 0) + if is_binary(Enum.at(actor, 0)) do + Enum.at(actor, 0) + else + Enum.find(actor, fn %{"type" => type} -> type == "Person" end) + |> Map.get("id") + end end def get_actor(%{"actor" => actor}) when is_map(actor) do actor["id"] end - def get_actor(%{"actor" => actor_list}) do - Enum.find(actor_list, fn %{"type" => type} -> type == "Person" end) - |> Map.get("id") - end - @doc """ Modifies an incoming AP object (mastodon format) to our internal format. """ -- cgit v1.2.3 From 74c74decf522104cb08c600a96849e6b0fab1780 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Thu, 12 Jul 2018 19:06:28 +0200 Subject: Basic peertube support. --- lib/pleroma/web/activity_pub/transmogrifier.ex | 7 +++++-- lib/pleroma/web/activity_pub/utils.ex | 20 +++++++++++++++----- .../twitter_api/representers/activity_representer.ex | 11 ++++++++++- .../twitter_api/representers/object_representer.ex | 4 ++-- 4 files changed, 32 insertions(+), 10 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 39e2bb8a9..279bf6365 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -94,8 +94,11 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do def fix_in_reply_to(object), do: object def fix_context(object) do + context = object["context"] || object["conversation"] || Utils.generate_context_id() + object - |> Map.put("context", object["conversation"]) + |> Map.put("context", context) + |> Map.put("conversation", context) end def fix_attachments(object) do @@ -163,7 +166,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do # - tags # - emoji def handle_incoming(%{"type" => "Create", "object" => %{"type" => objtype} = object} = data) - when objtype in ["Article", "Note"] do + when objtype in ["Article", "Note", "Video"] do actor = get_actor(data) data = diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 8b41a3bec..7cdc1656b 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -128,7 +128,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do Inserts a full object if it is contained in an activity. """ def insert_full_object(%{"object" => %{"type" => type} = object_data}) - when is_map(object_data) and type in ["Article", "Note"] do + when is_map(object_data) and type in ["Article", "Note", "Video"] do with {:ok, _} <- Object.create(object_data) do :ok end @@ -204,13 +204,17 @@ defmodule Pleroma.Web.ActivityPub.Utils do end def add_like_to_object(%Activity{data: %{"actor" => actor}}, object) do - with likes <- [actor | object.data["likes"] || []] |> Enum.uniq() do + likes = if is_list(object.data["likes"]), do: object.data["likes"], else: [] + + with likes <- [actor | likes] |> Enum.uniq() do update_likes_in_object(likes, object) end end def remove_like_from_object(%Activity{data: %{"actor" => actor}}, object) do - with likes <- (object.data["likes"] || []) |> List.delete(actor) do + likes = if is_list(object.data["likes"]), do: object.data["likes"], else: [] + + with likes <- likes |> List.delete(actor) do update_likes_in_object(likes, object) end end @@ -357,13 +361,19 @@ defmodule Pleroma.Web.ActivityPub.Utils do end def add_announce_to_object(%Activity{data: %{"actor" => actor}}, object) do - with announcements <- [actor | object.data["announcements"] || []] |> Enum.uniq() do + announcements = + if is_list(object.data["announcements"]), do: object.data["announcements"], else: [] + + with announcements <- [actor | announcements] |> Enum.uniq() do update_element_in_object("announcement", announcements, object) end end def remove_announce_from_object(%Activity{data: %{"actor" => actor}}, object) do - with announcements <- (object.data["announcements"] || []) |> List.delete(actor) do + announcements = + if is_list(object.data["announcements"]), do: object.data["announcements"], else: [] + + with announcements <- announcements |> List.delete(actor) do update_element_in_object("announcement", announcements, object) 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 26bfb79af..9abea59a7 100644 --- a/lib/pleroma/web/twitter_api/representers/activity_representer.ex +++ b/lib/pleroma/web/twitter_api/representers/activity_representer.ex @@ -170,6 +170,15 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do HtmlSanitizeEx.basic_html(content) |> Formatter.emojify(object["emoji"]) + video = + if object["type"] == "Video" do + vid = [object] + else + [] + end + + attachments = (object["attachment"] || []) ++ video + %{ "id" => activity.id, "uri" => activity.data["object"]["id"], @@ -181,7 +190,7 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do "created_at" => created_at, "in_reply_to_status_id" => object["inReplyToStatusId"], "statusnet_conversation_id" => conversation_id, - "attachments" => (object["attachment"] || []) |> ObjectRepresenter.enum_to_list(opts), + "attachments" => attachments |> ObjectRepresenter.enum_to_list(opts), "attentions" => attentions, "fave_num" => like_count, "repeat_num" => announcement_count, diff --git a/lib/pleroma/web/twitter_api/representers/object_representer.ex b/lib/pleroma/web/twitter_api/representers/object_representer.ex index 9af8a1691..60e30191f 100644 --- a/lib/pleroma/web/twitter_api/representers/object_representer.ex +++ b/lib/pleroma/web/twitter_api/representers/object_representer.ex @@ -7,7 +7,7 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter do %{ url: url["href"] |> Pleroma.Web.MediaProxy.url(), - mimetype: url["mediaType"], + mimetype: url["mediaType"] || url["mimeType"], id: data["uuid"], oembed: false } @@ -16,7 +16,7 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter do def to_map(%Object{data: %{"url" => url} = data}, _opts) when is_binary(url) do %{ url: url |> Pleroma.Web.MediaProxy.url(), - mimetype: data["mediaType"], + mimetype: data["mediaType"] || url["mimeType"], id: data["uuid"], oembed: false } -- cgit v1.2.3 From c381d0b57737b0a011a42de7ff369c57c4962383 Mon Sep 17 00:00:00 2001 From: lain Date: Sun, 25 Mar 2018 17:00:30 +0200 Subject: Use activitypub to fetch posts. This falls back to ostatus. --- .../web/mastodon_api/mastodon_api_controller.ex | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index b8c605e83..e89cd63a2 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -5,7 +5,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do alias Pleroma.Web.MastodonAPI.{StatusView, AccountView, MastodonView, ListView} alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Utils - alias Pleroma.Web.{CommonAPI, OStatus} + alias Pleroma.Web.CommonAPI alias Pleroma.Web.OAuth.{Authorization, Token, App} alias Comeonin.Pbkdf2 import Ecto.Query @@ -658,12 +658,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do fetched = if Regex.match?(~r/https?:/, query) do - with {:ok, activities} <- OStatus.fetch_activity_from_url(query) do - activities - |> Enum.filter(fn - %{data: %{"type" => "Create"}} -> true - _ -> false - end) + with {:ok, object} <- ActivityPub.fetch_object_from_id(query) do + [Activity.get_create_activity_by_object_ap_id(object.data["id"])] else _e -> [] end @@ -710,12 +706,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do fetched = if Regex.match?(~r/https?:/, query) do - with {:ok, activities} <- OStatus.fetch_activity_from_url(query) do - activities - |> Enum.filter(fn - %{data: %{"type" => "Create"}} -> true - _ -> false - end) + with {:ok, object} <- ActivityPub.fetch_object_from_id(query) do + [Activity.get_create_activity_by_object_ap_id(object.data["id"])] else _e -> [] end -- cgit v1.2.3 From a6b021a52b8d73a2ac5fdbe1298d46be25137223 Mon Sep 17 00:00:00 2001 From: lain Date: Sun, 25 Mar 2018 17:07:40 +0200 Subject: Render peertube videos in mastodon. --- lib/pleroma/web/mastodon_api/views/status_view.ex | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 5dbd59dd9..9625da822 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -99,8 +99,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do repeated = opts[:for] && opts[:for].ap_id in (object["announcements"] || []) favorited = opts[:for] && opts[:for].ap_id in (object["likes"] || []) - attachments = - render_many(object["attachment"] || [], StatusView, "attachment.json", as: :attachment) + attachment_data = object["attachment"] || [] + attachment_data = attachment_data ++ if object["type"] == "Video", do: [object], else: [] + attachments = render_many(attachment_data, StatusView, "attachment.json", as: :attachment) created_at = Utils.to_masto_date(object["published"]) @@ -151,7 +152,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do end def render("attachment.json", %{attachment: attachment}) do - [%{"mediaType" => media_type, "href" => href} | _] = attachment["url"] + [attachment | _] = attachment["url"] + media_type = attachment["mediaType"] || attachment["mimeType"] + href = attachment["href"] type = cond do -- cgit v1.2.3 From 3b8ef245326fb788a0345689c0ac5f01edc19361 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Thu, 14 Jun 2018 00:26:37 +0200 Subject: Fix attachement rendering --- lib/pleroma/web/mastodon_api/views/status_view.ex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 9625da822..7226a407e 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -152,9 +152,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do end def render("attachment.json", %{attachment: attachment}) do - [attachment | _] = attachment["url"] - media_type = attachment["mediaType"] || attachment["mimeType"] - href = attachment["href"] + [attachment_url | _] = attachment["url"] + media_type = attachment_url["mediaType"] || attachment_url["mimeType"] + href = attachment_url["href"] type = cond do -- cgit v1.2.3 From f5b056e3ce0d160427025e46f405d6d277c2970b Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Sat, 4 Aug 2018 00:58:55 +0200 Subject: [Pleroma.Web.ActivityPub.Transmogrifier]: Fix likes --- lib/pleroma/web/activity_pub/transmogrifier.ex | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'lib') diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 279bf6365..5e07d5ea9 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -42,6 +42,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do |> fix_emoji |> fix_tag |> fix_content_map + |> fix_likes |> fix_addressing end @@ -67,6 +68,20 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do |> Map.put("actor", get_actor(%{"actor" => actor})) end + def fix_likes(%{"likes" => likes} = object) + when is_bitstring(likes) do + # Check for standardisation + # This is what Peertube does + # curl -H 'Accept: application/activity+json' $likes | jq .totalItems + object + |> Map.put("likes", []) + |> Map.put("like_count", 0) + end + + def fix_likes(object) do + object + end + def fix_in_reply_to(%{"inReplyTo" => in_reply_to_id} = object) when not is_nil(in_reply_to_id) do case ActivityPub.fetch_object_from_id(in_reply_to_id) do -- cgit v1.2.3 From 046741c60d46d5f4de5356af79022bcb05bbaad6 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Fri, 10 Aug 2018 01:19:00 +0200 Subject: [Pleroma.Web.MastodonAPI.StatusView] Support Peertube Video titles --- lib/pleroma/web/mastodon_api/views/status_view.ex | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 7226a407e..3eca43a92 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -211,6 +211,19 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do end end + def render_content(%{"type" => "Video"} = object) do + name = object["name"] + + content = + if !!name and name != "" do + "

#{name}

#{object["content"]}" + else + object["content"] + end + + HtmlSanitizeEx.basic_html(content) + end + def render_content(%{"type" => "Article"} = object) do summary = object["name"] -- cgit v1.2.3 From 5dde6e4a003dfd4fbd9b6e8102b74a376b0d4c36 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 22 Aug 2018 01:46:26 +0200 Subject: [Pleroma.Web.MastodonAPI.StatusView] Fix rendering peertube videos --- lib/pleroma/web/mastodon_api/views/status_view.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 3eca43a92..6962aa54f 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -216,7 +216,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do content = if !!name and name != "" do - "

#{name}

#{object["content"]}" + "

#{name}

#{object["content"]}" else object["content"] end -- cgit v1.2.3 From d5bdd55b5d70b44bfd409f5f6942dea882e1c823 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Wed, 22 Aug 2018 01:47:25 +0200 Subject: [Pleroma.Web.TwitterAPI.UserView]: Do not fail if user.bio is nil --- lib/pleroma/web/twitter_api/views/user_view.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex index 25fda1aa8..712557f77 100644 --- a/lib/pleroma/web/twitter_api/views/user_view.ex +++ b/lib/pleroma/web/twitter_api/views/user_view.ex @@ -38,7 +38,7 @@ defmodule Pleroma.Web.TwitterAPI.UserView do data = %{ "created_at" => user.inserted_at |> Utils.format_naive_asctime(), - "description" => HtmlSanitizeEx.strip_tags(user.bio |> String.replace("
", "\n")), + "description" => HtmlSanitizeEx.strip_tags((user.bio || "") |> String.replace("
", "\n")), "description_html" => HtmlSanitizeEx.basic_html(user.bio), "favourites_count" => 0, "followers_count" => user_info[:follower_count], -- cgit v1.2.3 From 52b44184b40930a4ca7b4dc463631d7439feb726 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Thu, 23 Aug 2018 01:23:02 +0000 Subject: transmogrifier: reject activities lacking a valid ID --- lib/pleroma/web/activity_pub/transmogrifier.ex | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'lib') diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 5e07d5ea9..1367bc7e3 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -177,6 +177,12 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do def fix_content_map(object), do: object + # disallow objects with bogus IDs + def handle_incoming(%{"id" => nil}), do: :error + def handle_incoming(%{"id" => ""}), do: :error + # length of https:// = 8, should validate better, but good enough for now. + def handle_incoming(%{"id" => id}) when not (is_binary(id) and length(id) > 8), do: :error + # TODO: validate those with a Ecto scheme # - tags # - emoji -- cgit v1.2.3 From a909fe45a6d680cc5a069cc7c340818ecbca54dc Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Thu, 23 Aug 2018 01:34:36 +0000 Subject: formatting --- lib/pleroma/web/twitter_api/views/user_view.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex index 712557f77..32f93153d 100644 --- a/lib/pleroma/web/twitter_api/views/user_view.ex +++ b/lib/pleroma/web/twitter_api/views/user_view.ex @@ -38,7 +38,8 @@ defmodule Pleroma.Web.TwitterAPI.UserView do data = %{ "created_at" => user.inserted_at |> Utils.format_naive_asctime(), - "description" => HtmlSanitizeEx.strip_tags((user.bio || "") |> String.replace("
", "\n")), + "description" => + HtmlSanitizeEx.strip_tags((user.bio || "") |> String.replace("
", "\n")), "description_html" => HtmlSanitizeEx.basic_html(user.bio), "favourites_count" => 0, "followers_count" => user_info[:follower_count], -- cgit v1.2.3 From bf9f68b68142453ee0a30829134285dff11af039 Mon Sep 17 00:00:00 2001 From: hakabahitoyo Date: Thu, 23 Aug 2018 11:52:18 +0900 Subject: debug --- lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index e89cd63a2..f482de6fd 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -1116,7 +1116,14 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do data2 = Enum.slice(data, 0, 40) |> Enum.map(fn x -> - Map.put(x, "id", User.get_or_fetch(x["acct"]).id) + Map.put( + x, + "id", + case User.get_or_fetch(x["acct"]) do + %{id: id} -> id + _ -> 0 + end + ) end) conn -- cgit v1.2.3 From 09cb40220336f464e63ad4f56370c284028ccc94 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Fri, 24 Aug 2018 18:03:41 +0000 Subject: fe config: add collapse_message_with_subject fe option --- lib/pleroma/web/twitter_api/controllers/util_controller.ex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 24ebdf007..7dbac620e 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -175,7 +175,9 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do showWhoToFollowPanel: Keyword.get(@instance_fe, :show_who_to_follow_panel), scopeOptionsEnabled: Keyword.get(@instance_fe, :scope_options_enabled), whoToFollowProvider: Keyword.get(@instance_fe, :who_to_follow_provider), - whoToFollowLink: Keyword.get(@instance_fe, :who_to_follow_link) + whoToFollowLink: Keyword.get(@instance_fe, :who_to_follow_link), + collapseMessageWithSubject: + Keyword.get(@instance_fe, :collapse_message_with_subject) } } }) -- cgit v1.2.3 From 3e10d13909d3801d26b5cbf86a376e2ed370e2cc Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Fri, 24 Aug 2018 18:18:48 +0000 Subject: formatter: adjust regexp captures to match local users with single character nicknames (closes #163) --- lib/pleroma/formatter.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 3e71a3b5f..cf2944c38 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -16,7 +16,7 @@ defmodule Pleroma.Formatter do def parse_mentions(text) do # Modified from https://www.w3.org/TR/html5/forms.html#valid-e-mail-address regex = - ~r/@[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/u + ~r/@[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]*@?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/u Regex.scan(regex, text) |> List.flatten() -- cgit v1.2.3 From 290798b8215c2f61ad6e6ccb5463ce599486f2a5 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Fri, 24 Aug 2018 20:01:13 +0000 Subject: http: fix TLS server name indication by default, hackney only sent TLS server name indication if TLS was locked to TLS 1.2. since there are many instances out there not speaking TLS 1.2, it is not acceptable to lock SNI to TLS 1.2. closes #261 --- lib/pleroma/http/http.ex | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pleroma/http/http.ex b/lib/pleroma/http/http.ex index 84f34eb4a..c19bccf60 100644 --- a/lib/pleroma/http/http.ex +++ b/lib/pleroma/http/http.ex @@ -1,5 +1,23 @@ defmodule Pleroma.HTTP do - use HTTPoison.Base + require HTTPoison + + def request(method, url, body \\ "", headers \\ [], options \\ []) do + options = + process_request_options(options) + |> process_sni_options(url) + + HTTPoison.request(method, url, body, headers, options) + end + + defp process_sni_options(options, url) do + uri = URI.parse(url) + host = uri.host |> to_charlist() + + case uri.scheme do + "https" -> options ++ [ssl: [server_name_indication: host]] + _ -> options + end + end def process_request_options(options) do config = Application.get_env(:pleroma, :http, []) @@ -10,4 +28,9 @@ defmodule Pleroma.HTTP do _ -> options ++ [proxy: proxy] end end + + def get(url, headers \\ [], options \\ []), do: request(:get, url, "", headers, options) + + def post(url, body, headers \\ [], options \\ []), + do: request(:post, url, body, headers, options) end -- cgit v1.2.3 From aab2bdddf4456c99d5d5042183c1225f7e771f56 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Sat, 25 Aug 2018 00:03:25 +0000 Subject: twitter api: provide object descriptions as attachment description field --- lib/pleroma/web/twitter_api/representers/object_representer.ex | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/representers/object_representer.ex b/lib/pleroma/web/twitter_api/representers/object_representer.ex index 60e30191f..6aa794a59 100644 --- a/lib/pleroma/web/twitter_api/representers/object_representer.ex +++ b/lib/pleroma/web/twitter_api/representers/object_representer.ex @@ -9,7 +9,8 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter do url: url["href"] |> Pleroma.Web.MediaProxy.url(), mimetype: url["mediaType"] || url["mimeType"], id: data["uuid"], - oembed: false + oembed: false, + description: data["name"] } end @@ -18,7 +19,8 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter do url: url |> Pleroma.Web.MediaProxy.url(), mimetype: data["mediaType"] || url["mimeType"], id: data["uuid"], - oembed: false + oembed: false, + description: data["name"] } end -- cgit v1.2.3 From 946a0769c4cc84f27bca5d5f79413f4cc9fef39b Mon Sep 17 00:00:00 2001 From: hakabahitoyo Date: Sun, 26 Aug 2018 17:40:15 +0900 Subject: remove unused settings from /api/statusnet/config --- lib/pleroma/web/twitter_api/controllers/util_controller.ex | 3 --- 1 file changed, 3 deletions(-) (limited to 'lib') diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 7dbac620e..d1ecebf61 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -172,10 +172,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do redirectRootLogin: Keyword.get(@instance_fe, :redirect_root_login), chatDisabled: !Keyword.get(@instance_chat, :enabled), showInstanceSpecificPanel: Keyword.get(@instance_fe, :show_instance_panel), - showWhoToFollowPanel: Keyword.get(@instance_fe, :show_who_to_follow_panel), scopeOptionsEnabled: Keyword.get(@instance_fe, :scope_options_enabled), - whoToFollowProvider: Keyword.get(@instance_fe, :who_to_follow_provider), - whoToFollowLink: Keyword.get(@instance_fe, :who_to_follow_link), collapseMessageWithSubject: Keyword.get(@instance_fe, :collapse_message_with_subject) } -- cgit v1.2.3