From 4656f433f94f132449df019beae1013f71728d0e Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 15 Jan 2019 11:00:17 +0300 Subject: Move metadata.ex out of ostatus --- lib/pleroma/web/metadata.ex | 82 +++++++++++++++++++++++++++++++++++++ lib/pleroma/web/ostatus/metadata.ex | 82 ------------------------------------- 2 files changed, 82 insertions(+), 82 deletions(-) create mode 100644 lib/pleroma/web/metadata.ex delete mode 100644 lib/pleroma/web/ostatus/metadata.ex (limited to 'lib') diff --git a/lib/pleroma/web/metadata.ex b/lib/pleroma/web/metadata.ex new file mode 100644 index 000000000..9935726fc --- /dev/null +++ b/lib/pleroma/web/metadata.ex @@ -0,0 +1,82 @@ +defmodule Pleroma.Web.Metadata do + alias Phoenix.HTML + alias Pleroma.{Formatter, User} + alias Pleroma.Web.MediaProxy + + def build_tags(params) do + if(meta_enabled?(:opengraph), do: opengraph_tags(params), else: []) + |> Enum.map(&to_tag/1) + |> Enum.map(&HTML.safe_to_string/1) + |> Enum.join("\n") + end + + def meta_enabled?(type) do + Pleroma.Config.get([:metadata, type], false) + end + + # opengraph for single status + defp opengraph_tags(%{activity: activity, user: user}) do + with truncated_content = scrub_html_and_truncate(activity.data["object"]["content"]) do + [ + {:meta, + [ + property: "og:title", + content: "#{user.name} (@#{user.nickname}@#{pleroma_domain()}) post ##{activity.id}" + ], []}, + {:meta, [property: "og:url", content: activity.data["id"]], []}, + {:meta, [property: "og:description", content: truncated_content], []}, + {:meta, [property: "og:image", content: user_avatar_url(user)], []}, + {:meta, [property: "og:image:width", content: 120], []}, + {:meta, [property: "og:image:height", content: 120], []}, + {:meta, [property: "twitter:card", content: "summary"], []} + ] + end + end + + # opengraph for user card + defp opengraph_tags(%{user: user}) do + with truncated_bio = scrub_html_and_truncate(user.bio) do + [ + {:meta, + [ + property: "og:title", + content: "#{user.name} (@#{user.nickname}@#{pleroma_domain()}) profile" + ], []}, + {:meta, [property: "og:url", content: User.profile_url(user)], []}, + {:meta, [property: "og:description", content: truncated_bio], []}, + {:meta, [property: "og:image", content: user_avatar_url(user)], []}, + {:meta, [property: "og:image:width", content: 120], []}, + {:meta, [property: "og:image:height", content: 120], []}, + {:meta, [property: "twitter:card", content: "summary"], []} + ] + end + end + + def to_tag(data) do + with {name, attrs, _content = []} <- data do + HTML.Tag.tag(name, attrs) + else + {name, attrs, content} -> + HTML.Tag.content_tag(name, content, attrs) + + _ -> + raise ArgumentError, message: "make_tag invalid args" + end + end + + defp scrub_html_and_truncate(content) do + content + # html content comes from DB already encoded, decode first and scrub after + |> HtmlEntities.decode() + |> Pleroma.HTML.strip_tags() + |> Formatter.truncate() + end + + defp user_avatar_url(user) do + User.avatar_url(user) |> MediaProxy.url() + end + + def pleroma_domain do + Pleroma.Web.Endpoint.host() + end +end diff --git a/lib/pleroma/web/ostatus/metadata.ex b/lib/pleroma/web/ostatus/metadata.ex deleted file mode 100644 index 9935726fc..000000000 --- a/lib/pleroma/web/ostatus/metadata.ex +++ /dev/null @@ -1,82 +0,0 @@ -defmodule Pleroma.Web.Metadata do - alias Phoenix.HTML - alias Pleroma.{Formatter, User} - alias Pleroma.Web.MediaProxy - - def build_tags(params) do - if(meta_enabled?(:opengraph), do: opengraph_tags(params), else: []) - |> Enum.map(&to_tag/1) - |> Enum.map(&HTML.safe_to_string/1) - |> Enum.join("\n") - end - - def meta_enabled?(type) do - Pleroma.Config.get([:metadata, type], false) - end - - # opengraph for single status - defp opengraph_tags(%{activity: activity, user: user}) do - with truncated_content = scrub_html_and_truncate(activity.data["object"]["content"]) do - [ - {:meta, - [ - property: "og:title", - content: "#{user.name} (@#{user.nickname}@#{pleroma_domain()}) post ##{activity.id}" - ], []}, - {:meta, [property: "og:url", content: activity.data["id"]], []}, - {:meta, [property: "og:description", content: truncated_content], []}, - {:meta, [property: "og:image", content: user_avatar_url(user)], []}, - {:meta, [property: "og:image:width", content: 120], []}, - {:meta, [property: "og:image:height", content: 120], []}, - {:meta, [property: "twitter:card", content: "summary"], []} - ] - end - end - - # opengraph for user card - defp opengraph_tags(%{user: user}) do - with truncated_bio = scrub_html_and_truncate(user.bio) do - [ - {:meta, - [ - property: "og:title", - content: "#{user.name} (@#{user.nickname}@#{pleroma_domain()}) profile" - ], []}, - {:meta, [property: "og:url", content: User.profile_url(user)], []}, - {:meta, [property: "og:description", content: truncated_bio], []}, - {:meta, [property: "og:image", content: user_avatar_url(user)], []}, - {:meta, [property: "og:image:width", content: 120], []}, - {:meta, [property: "og:image:height", content: 120], []}, - {:meta, [property: "twitter:card", content: "summary"], []} - ] - end - end - - def to_tag(data) do - with {name, attrs, _content = []} <- data do - HTML.Tag.tag(name, attrs) - else - {name, attrs, content} -> - HTML.Tag.content_tag(name, content, attrs) - - _ -> - raise ArgumentError, message: "make_tag invalid args" - end - end - - defp scrub_html_and_truncate(content) do - content - # html content comes from DB already encoded, decode first and scrub after - |> HtmlEntities.decode() - |> Pleroma.HTML.strip_tags() - |> Formatter.truncate() - end - - defp user_avatar_url(user) do - User.avatar_url(user) |> MediaProxy.url() - end - - def pleroma_domain do - Pleroma.Web.Endpoint.host() - end -end -- cgit v1.2.3