diff options
author | Alexander Strizhakov <alex.strizhakov@gmail.com> | 2020-11-26 11:12:44 +0300 |
---|---|---|
committer | Alexander Strizhakov <alex.strizhakov@gmail.com> | 2020-11-27 08:10:52 +0300 |
commit | 6aadb1cb409a80632d17bba487cfabfdb0b13d34 (patch) | |
tree | 27f5e1f593a3f032c1e332ef525fc5eeb4af88bb /lib | |
parent | 2b4e3555222792a54755e8c6be7d2e8d44b1c99d (diff) | |
download | pleroma-6aadb1cb409a80632d17bba487cfabfdb0b13d34.tar.gz |
digest algorithm is taken from header
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/plugs/digest_plug.ex | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/pleroma/web/plugs/digest_plug.ex b/lib/pleroma/web/plugs/digest_plug.ex index b521b3073..fb2723b97 100644 --- a/lib/pleroma/web/plugs/digest_plug.ex +++ b/lib/pleroma/web/plugs/digest_plug.ex @@ -7,8 +7,22 @@ defmodule Pleroma.Web.Plugs.DigestPlug do require Logger def read_body(conn, opts) do + digest_algorithm = + with [digest_header] <- Conn.get_req_header(conn, "digest") do + digest_header + |> String.split("=", parts: 2) + |> List.first() + else + _ -> "SHA-256" + end + + unless String.downcase(digest_algorithm) == "sha-256" do + raise ArgumentError, + message: "invalid value for digest algorithm, got: #{digest_algorithm}" + end + {:ok, body, conn} = Conn.read_body(conn, opts) - digest = "SHA-256=" <> (:crypto.hash(:sha256, body) |> Base.encode64()) - {:ok, body, Conn.assign(conn, :digest, digest)} + encoded_digest = :crypto.hash(:sha256, body) |> Base.encode64() + {:ok, body, Conn.assign(conn, :digest, "#{digest_algorithm}=#{encoded_digest}")} end end |