Skip to content

Commit 86eeca9

Browse files
committed
use signature_method dynamically in api call
1 parent d45fb80 commit 86eeca9

File tree

2 files changed

+249
-195
lines changed

2 files changed

+249
-195
lines changed

lib/lti_result.ex

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,31 +27,41 @@ defmodule LTIResult do
2727
{:ok, "iyyQNRQyXTlpLJPJns3ireWjQxo%3D"}
2828
"""
2929
def signature(url, oauth_header, secret) do
30-
{parameters, [{"oauth_signature", received_signature}]} =
31-
extract_header_elements(oauth_header)
32-
33-
with {:ok, _} <- validate_parameters(parameters) do
34-
basestring = base_string(url, parameters)
35-
36-
signature = generate_signature(secret, basestring)
37-
38-
if signature == received_signature do
39-
{:ok, signature}
40-
else
41-
{:error, [:unmatching_signatures]}
30+
with {parameters, [{"oauth_signature", received_signature}]} <-
31+
extract_header_elements(oauth_header),
32+
{:ok, _} <- validate_parameters(parameters),
33+
{_, signature_method} <-
34+
List.keyfind(
35+
parameters,
36+
"oauth_signature_method",
37+
0,
38+
{"oauth_signature_method", "HMAC-SHA1"}
39+
),
40+
basestring <- base_string(url, parameters),
41+
signature <- generate_signature(secret, signature_method, basestring) do
42+
case signature == received_signature do
43+
true ->
44+
{:ok, signature}
45+
46+
false ->
47+
{:error, [:unmatching_signatures]}
4248
end
4349
end
4450
end
4551

46-
defp generate_signature(secret, basestring) do
47-
:sha
52+
defp generate_signature(secret, signature_method, basestring) do
53+
signature_method
54+
|> get_signature_method()
4855
|> LTI.hmac_fun(
4956
percent_encode(secret) <> "&",
5057
basestring
5158
)
5259
|> Base.encode64()
5360
end
5461

62+
defp get_signature_method("HMAC-SHA256"), do: :sha256
63+
defp get_signature_method(_), do: :sha
64+
5565
defp extract_header_elements(header) do
5666
header
5767
|> String.trim_leading("OAuth ")

0 commit comments

Comments
 (0)