Skip to content

Commit e71da92

Browse files
committed
use signature_method dynamically in api call
1 parent d10f717 commit e71da92

File tree

2 files changed

+231
-182
lines changed

2 files changed

+231
-182
lines changed

lib/lti_result.ex

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,31 +27,36 @@ 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(parameters, "oauth_signature_method", 0),
35+
basestring <- base_string(url, parameters),
36+
signature <- generate_signature(secret, signature_method, basestring) do
37+
case signature == received_signature do
38+
true ->
39+
{:ok, signature}
40+
41+
false ->
42+
{:error, [:unmatching_signatures]}
4243
end
4344
end
4445
end
4546

46-
defp generate_signature(secret, basestring) do
47-
:sha
47+
defp generate_signature(secret, signature_method, basestring) do
48+
signature_method
49+
|> get_signature_method()
4850
|> :crypto.hmac(
4951
percent_encode(secret) <> "&",
5052
basestring
5153
)
5254
|> Base.encode64()
5355
end
5456

57+
defp get_signature_method("HMAC-SHA256"), do: :sha256
58+
defp get_signature_method(_), do: :sha
59+
5560
defp extract_header_elements(header) do
5661
header
5762
|> String.trim_leading("OAuth ")

0 commit comments

Comments
 (0)