Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

114 řádky
3.0KB

  1. defmodule Pleroma.MediaProxyTest do
  2. use ExUnit.Case
  3. import Pleroma.Web.MediaProxy
  4. describe "when enabled" do
  5. setup do
  6. enabled = Pleroma.Config.get([:media_proxy, :enabled])
  7. unless enabled do
  8. Pleroma.Config.put([:media_proxy, :enabled], true)
  9. on_exit(fn -> Pleroma.Config.put([:media_proxy, :enabled], enabled) end)
  10. end
  11. :ok
  12. end
  13. test "ignores invalid url" do
  14. assert url(nil) == nil
  15. assert url("") == nil
  16. end
  17. test "ignores relative url" do
  18. assert url("/local") == "/local"
  19. assert url("/") == "/"
  20. end
  21. test "ignores local url" do
  22. local_url = Pleroma.Web.Endpoint.url() <> "/hello"
  23. local_root = Pleroma.Web.Endpoint.url()
  24. assert url(local_url) == local_url
  25. assert url(local_root) == local_root
  26. end
  27. test "encodes and decodes URL" do
  28. url = "https://pleroma.soykaf.com/static/logo.png"
  29. encoded = url(url)
  30. assert String.starts_with?(
  31. encoded,
  32. Pleroma.Config.get([:media_proxy, :base_url], Pleroma.Web.base_url())
  33. )
  34. assert String.ends_with?(encoded, "/logo.png")
  35. assert decode_result(encoded) == url
  36. end
  37. test "encodes and decodes URL without a path" do
  38. url = "https://pleroma.soykaf.com"
  39. encoded = url(url)
  40. assert decode_result(encoded) == url
  41. end
  42. test "encodes and decodes URL without an extension" do
  43. url = "https://pleroma.soykaf.com/path/"
  44. encoded = url(url)
  45. assert String.ends_with?(encoded, "/path")
  46. assert decode_result(encoded) == url
  47. end
  48. test "encodes and decodes URL and ignores query params for the path" do
  49. url = "https://pleroma.soykaf.com/static/logo.png?93939393939&bunny=true"
  50. encoded = url(url)
  51. assert String.ends_with?(encoded, "/logo.png")
  52. assert decode_result(encoded) == url
  53. end
  54. test "validates signature" do
  55. secret_key_base = Pleroma.Config.get([Pleroma.Web.Endpoint, :secret_key_base])
  56. on_exit(fn ->
  57. Pleroma.Config.put([Pleroma.Web.Endpoint, :secret_key_base], secret_key_base)
  58. end)
  59. encoded = url("https://pleroma.social")
  60. Pleroma.Config.put(
  61. [Pleroma.Web.Endpoint, :secret_key_base],
  62. "00000000000000000000000000000000000000000000000"
  63. )
  64. [_, "proxy", sig, base64 | _] = URI.parse(encoded).path |> String.split("/")
  65. assert decode_url(sig, base64) == {:error, :invalid_signature}
  66. end
  67. end
  68. describe "when disabled" do
  69. setup do
  70. enabled = Pleroma.Config.get([:media_proxy, :enabled])
  71. if enabled do
  72. Pleroma.Config.put([:media_proxy, :enabled], false)
  73. on_exit(fn ->
  74. Pleroma.Config.put([:media_proxy, :enabled], enabled)
  75. :ok
  76. end)
  77. end
  78. :ok
  79. end
  80. test "does not encode remote urls" do
  81. assert url("https://google.fr") == "https://google.fr"
  82. end
  83. end
  84. defp decode_result(encoded) do
  85. [_, "proxy", sig, base64 | _] = URI.parse(encoded).path |> String.split("/")
  86. {:ok, decoded} = decode_url(sig, base64)
  87. decoded
  88. end
  89. end