diff options
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/views/status_view.ex | 4 | ||||
| -rw-r--r-- | lib/pleroma/web/rich_media/parser.ex | 5 | ||||
| -rw-r--r-- | test/fixtures/rich_media/ogp-missing-data.html | 8 | ||||
| -rw-r--r-- | test/fixtures/rich_media/ogp.html | 1 | ||||
| -rw-r--r-- | test/support/http_request_mock.ex | 8 | ||||
| -rw-r--r-- | test/web/mastodon_api/mastodon_api_controller_test.exs | 81 | ||||
| -rw-r--r-- | test/web/rich_media/parser_test.exs | 2 | 
8 files changed, 87 insertions, 23 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index f689160e9..b4abb6eb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -112,6 +112,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).  - Mastodon API: Correct `reblogged`, `favourited`, and `bookmarked` values in the reblog status JSON  - Mastodon API: Exposing default scope of the user to anyone  - Mastodon API: Make `irreversible` field default to `false` [`POST /api/v1/filters`] +- Mastodon API: Replace missing non-nullable Card attributes with empty strings  - User-Agent is now sent correctly for all HTTP requests.  - MRF: Simple policy now properly delists imported or relayed statuses diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index e55f9b96e..84ab20a1c 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -290,8 +290,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do        provider_url: page_url_data.scheme <> "://" <> page_url_data.host,        url: page_url,        image: image_url |> MediaProxy.url(), -      title: rich_media[:title], -      description: rich_media[:description], +      title: rich_media[:title] || "", +      description: rich_media[:description] || "",        pleroma: %{          opengraph: rich_media        } diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex index 62e8fa610..e4595800c 100644 --- a/lib/pleroma/web/rich_media/parser.ex +++ b/lib/pleroma/web/rich_media/parser.ex @@ -37,7 +37,10 @@ defmodule Pleroma.Web.RichMedia.Parser do      try do        {:ok, %Tesla.Env{body: html}} = Pleroma.HTTP.get(url, [], adapter: @hackney_options) -      html |> maybe_parse() |> clean_parsed_data() |> check_parsed_data() +      html +      |> maybe_parse() +      |> clean_parsed_data() +      |> check_parsed_data()      rescue        e ->          {:error, "Parsing error: #{inspect(e)}"} diff --git a/test/fixtures/rich_media/ogp-missing-data.html b/test/fixtures/rich_media/ogp-missing-data.html new file mode 100644 index 000000000..5746dc2f4 --- /dev/null +++ b/test/fixtures/rich_media/ogp-missing-data.html @@ -0,0 +1,8 @@ +<html prefix="og: http://ogp.me/ns#"> +  <head> +    <title>Pleroma</title> +    <meta property="og:title" content="Pleroma" /> +    <meta property="og:type" content="website" /> +    <meta property="og:url" content="https://pleroma.social/" /> +  </head> +</html> diff --git a/test/fixtures/rich_media/ogp.html b/test/fixtures/rich_media/ogp.html index c886b5871..4b5a33595 100644 --- a/test/fixtures/rich_media/ogp.html +++ b/test/fixtures/rich_media/ogp.html @@ -5,5 +5,6 @@      <meta property="og:type" content="video.movie" />      <meta property="og:url" content="http://www.imdb.com/title/tt0117500/" />      <meta property="og:image" content="http://ia.media-imdb.com/images/rock.jpg" /> +    <meta property="og:description" content="Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.">    </head>  </html> diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index 5b355bfe6..66d7d5ba9 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -728,6 +728,14 @@ defmodule HttpRequestMock do      {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/ogp.html")}}    end +  def get("http://example.com/ogp-missing-data", _, _, _) do +    {:ok, +     %Tesla.Env{ +       status: 200, +       body: File.read!("test/fixtures/rich_media/ogp-missing-data.html") +     }} +  end +    def get("http://example.com/malformed", _, _, _) do      {:ok,       %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/malformed-data.html")}} diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 1d9f5a816..93ef630f2 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -2684,33 +2684,50 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do                 |> post("/api/v1/statuses/#{activity_two.id}/pin")                 |> json_response(400)      end +  end -    test "Status rich-media Card", %{conn: conn, user: user} do +  describe "cards" do +    setup do        Pleroma.Config.put([:rich_media, :enabled], true) + +      on_exit(fn -> +        Pleroma.Config.put([:rich_media, :enabled], false) +      end) + +      user = insert(:user) +      %{user: user} +    end + +    test "returns rich-media card", %{conn: conn, user: user} do        {:ok, activity} = CommonAPI.post(user, %{"status" => "http://example.com/ogp"}) +      card_data = %{ +        "image" => "http://ia.media-imdb.com/images/rock.jpg", +        "provider_name" => "www.imdb.com", +        "provider_url" => "http://www.imdb.com", +        "title" => "The Rock", +        "type" => "link", +        "url" => "http://www.imdb.com/title/tt0117500/", +        "description" => +          "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.", +        "pleroma" => %{ +          "opengraph" => %{ +            "image" => "http://ia.media-imdb.com/images/rock.jpg", +            "title" => "The Rock", +            "type" => "video.movie", +            "url" => "http://www.imdb.com/title/tt0117500/", +            "description" => +              "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer." +          } +        } +      } +        response =          conn          |> get("/api/v1/statuses/#{activity.id}/card")          |> json_response(200) -      assert response == %{ -               "image" => "http://ia.media-imdb.com/images/rock.jpg", -               "provider_name" => "www.imdb.com", -               "provider_url" => "http://www.imdb.com", -               "title" => "The Rock", -               "type" => "link", -               "url" => "http://www.imdb.com/title/tt0117500/", -               "description" => nil, -               "pleroma" => %{ -                 "opengraph" => %{ -                   "image" => "http://ia.media-imdb.com/images/rock.jpg", -                   "title" => "The Rock", -                   "type" => "video.movie", -                   "url" => "http://www.imdb.com/title/tt0117500/" -                 } -               } -             } +      assert response == card_data        # works with private posts        {:ok, activity} = @@ -2722,9 +2739,33 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do          |> get("/api/v1/statuses/#{activity.id}/card")          |> json_response(200) -      assert response_two == response +      assert response_two == card_data +    end + +    test "replaces missing description with an empty string", %{conn: conn, user: user} do +      {:ok, activity} = CommonAPI.post(user, %{"status" => "http://example.com/ogp-missing-data"}) + +      response = +        conn +        |> get("/api/v1/statuses/#{activity.id}/card") +        |> json_response(:ok) -      Pleroma.Config.put([:rich_media, :enabled], false) +      assert response == %{ +               "type" => "link", +               "title" => "Pleroma", +               "description" => "", +               "image" => nil, +               "provider_name" => "pleroma.social", +               "provider_url" => "https://pleroma.social", +               "url" => "https://pleroma.social/", +               "pleroma" => %{ +                 "opengraph" => %{ +                   "title" => "Pleroma", +                   "type" => "website", +                   "url" => "https://pleroma.social/" +                 } +               } +             }      end    end diff --git a/test/web/rich_media/parser_test.exs b/test/web/rich_media/parser_test.exs index 47b127cf9..3a9cc1854 100644 --- a/test/web/rich_media/parser_test.exs +++ b/test/web/rich_media/parser_test.exs @@ -44,6 +44,8 @@ defmodule Pleroma.Web.RichMedia.ParserTest do                %{                  image: "http://ia.media-imdb.com/images/rock.jpg",                  title: "The Rock", +                description: +                  "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.",                  type: "video.movie",                  url: "http://www.imdb.com/title/tt0117500/"                }}  | 
