From 95913ba28b565634814c58f1a2b9145abd85712d Mon Sep 17 00:00:00 2001
From: Thomas Citharel <tcit@tcit.fr>
Date: Mon, 7 Jun 2021 16:39:14 +0200
Subject: [PATCH] Handle crypto for different OTP versions better in media
 proxy

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
---
 lib/web/media_proxy.ex | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/lib/web/media_proxy.ex b/lib/web/media_proxy.ex
index 549f0918d..a7c9fe4fb 100644
--- a/lib/web/media_proxy.ex
+++ b/lib/web/media_proxy.ex
@@ -58,7 +58,19 @@ defmodule Mobilizon.Web.MediaProxy do
   end
 
   defp signed_url(url) do
-    :crypto.mac(:hmac, :sha, Config.get([Web.Endpoint, :secret_key_base]), url)
+    sha_hmac(Config.get([Web.Endpoint, :secret_key_base]), url)
+  end
+
+  @compile {:no_warn_undefined, {:crypto, :mac, 4}}
+  @compile {:no_warn_undefined, {:crypto, :hmac, 3}}
+  defp sha_hmac(key, url) do
+    # :crypto.hmac was removed in OTP24, but :crypto.mac was added in OTP 22.1
+    # TODO: Remove me when we don't support OTP 21/22 anymore
+    if function_exported?(:crypto, :mac, 4) do
+      :crypto.mac(:hmac, :sha, key, url)
+    else
+      :crypto.hmac(:sha, key, url)
+    end
   end
 
   def filename(url_or_path) do