logo

pleroma

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

aws_signed_url_test.exs (2663B)


  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. # Relies on Cachex, needs to be synchronous
  6. use Pleroma.DataCase
  7. test "s3 signed url is parsed correct for expiration time" do
  8. url = "https://pleroma.social/amz"
  9. {:ok, timestamp} =
  10. Timex.now()
  11. |> DateTime.truncate(:second)
  12. |> Timex.format("{ISO:Basic:Z}")
  13. # in seconds
  14. valid_till = 30
  15. metadata = construct_metadata(timestamp, valid_till, url)
  16. expire_time =
  17. Timex.parse!(timestamp, "{ISO:Basic:Z}") |> Timex.to_unix() |> Kernel.+(valid_till)
  18. assert expire_time == Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl.ttl(metadata, url)
  19. end
  20. test "s3 signed url is parsed and correct ttl is set for rich media" do
  21. url = "https://pleroma.social/amz"
  22. {:ok, timestamp} =
  23. Timex.now()
  24. |> DateTime.truncate(:second)
  25. |> Timex.format("{ISO:Basic:Z}")
  26. # in seconds
  27. valid_till = 30
  28. metadata = construct_metadata(timestamp, valid_till, url)
  29. body = """
  30. <meta name="twitter:card" content="Pleroma" />
  31. <meta name="twitter:site" content="Pleroma" />
  32. <meta name="twitter:title" content="Pleroma" />
  33. <meta name="twitter:description" content="Pleroma" />
  34. <meta name="twitter:image" content="#{Map.get(metadata, :image)}" />
  35. """
  36. Tesla.Mock.mock(fn
  37. %{
  38. method: :get,
  39. url: "https://pleroma.social/amz"
  40. } ->
  41. %Tesla.Env{status: 200, body: body}
  42. end)
  43. Cachex.put(:rich_media_cache, url, metadata)
  44. Pleroma.Web.RichMedia.Parser.set_ttl_based_on_image(metadata, url)
  45. {:ok, cache_ttl} = Cachex.ttl(:rich_media_cache, url)
  46. # as there is delay in setting and pulling the data from cache we ignore 1 second
  47. # make it 2 seconds for flakyness
  48. assert_in_delta(valid_till * 1000, cache_ttl, 2000)
  49. end
  50. defp construct_s3_url(timestamp, valid_till) do
  51. "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"
  52. end
  53. defp construct_metadata(timestamp, valid_till, url) do
  54. %{
  55. image: construct_s3_url(timestamp, valid_till),
  56. site: "Pleroma",
  57. title: "Pleroma",
  58. description: "Pleroma",
  59. url: url
  60. }
  61. end
  62. end