logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://anongit.hacktivis.me/git/pleroma.git/

aws_signed_url_test.exs (3370B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrlTest do
  5. use Pleroma.DataCase, async: false
  6. use Oban.Testing, repo: Pleroma.Repo, testing: :inline
  7. import Mox
  8. alias Pleroma.Tests.ObanHelpers
  9. alias Pleroma.UnstubbedConfigMock, as: ConfigMock
  10. alias Pleroma.Web.RichMedia.Card
  11. alias Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl
  12. setup do
  13. ConfigMock
  14. |> stub_with(Pleroma.Test.StaticConfig)
  15. clear_config([:rich_media, :enabled], true)
  16. :ok
  17. end
  18. test "s3 signed url is parsed correct for expiration time" do
  19. url = "https://pleroma.social/amz"
  20. {:ok, timestamp} =
  21. Timex.now()
  22. |> DateTime.truncate(:second)
  23. |> Timex.format("{ISO:Basic:Z}")
  24. # in seconds
  25. valid_till = 30
  26. metadata = construct_metadata(timestamp, valid_till, url)
  27. expire_time =
  28. Timex.parse!(timestamp, "{ISO:Basic:Z}") |> Timex.to_unix() |> Kernel.+(valid_till)
  29. assert expire_time == Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl.ttl(metadata, url)
  30. end
  31. test "s3 signed url is parsed and correct ttl is set for rich media" do
  32. url = "https://pleroma.social/amz"
  33. {:ok, timestamp} =
  34. Timex.now()
  35. |> DateTime.truncate(:second)
  36. |> Timex.format("{ISO:Basic:Z}")
  37. # in seconds
  38. valid_till = 30
  39. metadata = construct_metadata(timestamp, valid_till, url)
  40. body = """
  41. <meta name="twitter:card" content="Pleroma" />
  42. <meta name="twitter:site" content="Pleroma" />
  43. <meta name="twitter:title" content="Pleroma" />
  44. <meta name="twitter:description" content="Pleroma" />
  45. <meta name="twitter:image" content="#{Map.get(metadata, "image")}" />
  46. """
  47. Tesla.Mock.mock(fn
  48. %{
  49. method: :get,
  50. url: ^url
  51. } ->
  52. %Tesla.Env{status: 200, body: body}
  53. %{method: :head} ->
  54. %Tesla.Env{status: 200}
  55. end)
  56. Card.get_or_backfill_by_url(url)
  57. # Find the backfill job
  58. expected_job =
  59. [
  60. worker: "Pleroma.Workers.RichMediaWorker",
  61. args: %{"op" => "backfill", "url" => url}
  62. ]
  63. assert_enqueued(expected_job)
  64. # Run it manually
  65. ObanHelpers.perform_all()
  66. [%Oban.Job{scheduled_at: scheduled_at} | _] = all_enqueued()
  67. timestamp_dt = Timex.parse!(timestamp, "{ISO:Basic:Z}")
  68. assert DateTime.diff(scheduled_at, timestamp_dt) == valid_till
  69. end
  70. test "AWS URL for an image without expiration works" do
  71. og_data = %{"image" => "https://amazonaws.com/image.png"}
  72. assert is_nil(AwsSignedUrl.ttl(og_data, ""))
  73. end
  74. defp construct_s3_url(timestamp, valid_till) do
  75. "https://pleroma.s3.ap-southeast-1.amazonaws.com/sachin%20%281%29%20_a%20-%25%2Aasdasd%20BNN%20bnnn%20.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIBLWWK6RGDQXDLJQ%2F20190716%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=#{timestamp}&X-Amz-Expires=#{valid_till}&X-Amz-Signature=04ffd6b98634f4b1bbabc62e0fac4879093cd54a6eed24fe8eb38e8369526bbf&X-Amz-SignedHeaders=host"
  76. end
  77. defp construct_metadata(timestamp, valid_till, url) do
  78. %{
  79. "image" => construct_s3_url(timestamp, valid_till),
  80. "site" => "Pleroma",
  81. "title" => "Pleroma",
  82. "description" => "Pleroma",
  83. "url" => url
  84. }
  85. end
  86. end