Skip to content

Commit c721d12

Browse files
Clean up code, fix dialyzer error
1 parent a04e76f commit c721d12

File tree

3 files changed

+49
-99
lines changed

3 files changed

+49
-99
lines changed

deps/oauth2_client/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ PROJECT = oauth2_client
22
PROJECT_DESCRIPTION = OAuth2 client from the RabbitMQ Project
33

44
BUILD_DEPS = rabbit
5-
DEPS = rabbit_common jose
5+
DEPS = rabbit_common jose
66
TEST_DEPS = rabbitmq_ct_helpers cowboy
77
LOCAL_DEPS = ssl inets crypto public_key
88

99
PLT_APPS = rabbit
1010

11+
1112
DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk
1213
DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk
1314

deps/oauth2_client/include/types.hrl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
-type introspect_token_request() :: #introspect_token_request{}.
9191

9292
-record(unsuccessful_introspect_token_response, {
93-
error :: integer(),
93+
error :: binary() | string() | number(),
9494
error_description :: binary() | string() | undefined
9595
}).
9696

@@ -99,8 +99,8 @@
9999
-record(signing_key, {
100100
id :: string(),
101101
type :: hs256 | rs256,
102-
key :: option(binary()),
103-
private_key :: option(binary()),
104-
public_key :: option(binary())
102+
key :: option(#{binary() => binary()})
103+
% private_key :: option(binary()),
104+
% public_key :: option(binary())
105105
}).
106106
-type signing_key() :: #signing_key{}.

deps/oauth2_client/src/oauth2_client.erl

Lines changed: 43 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
-include("oauth2_client.hrl").
2222
-include_lib("kernel/include/logger.hrl").
23+
-include_lib("jose/include/jose_jwk.hrl").
2324

2425
-spec get_access_token(oauth_provider(), access_token_request()) ->
2526
{ok, successful_access_token_response()} |
@@ -78,18 +79,11 @@ introspect_token(Token) ->
7879
sign_token(TokenPayload) ->
7980
case get_opaque_token_signing_key() of
8081
{error, _} = Error -> Error;
81-
SK ->
82-
case SK#signing_key.type of
83-
hs256 ->
84-
{_, Value} = sign_token_hs(TokenPayload, SK#signing_key.key, SK#signing_key.id),
85-
{ok, Value};
86-
_ -> {error, not_implemented}
87-
end
82+
{ok, SK} ->
83+
{_, Value} = sign_token_hs(TokenPayload, SK#signing_key.key, SK#signing_key.id),
84+
{ok, Value}
8885
end.
8986

90-
sign_token_hs(Token, #{<<"kid">> := TokenKey} = Jwk) ->
91-
sign_token_hs(Token, Jwk, TokenKey).
92-
9387
sign_token_hs(Token, Jwk, TokenKey) ->
9488
Jws0 = #{
9589
<<"alg">> => <<"HS256">>,
@@ -98,13 +92,6 @@ sign_token_hs(Token, Jwk, TokenKey) ->
9892
Jws = maps:put(<<"kid">>, TokenKey, Jws0),
9993
sign_token(Token, Jwk, Jws).
10094

101-
sign_token_rsa(Token, Jwk, TokenKey) ->
102-
Jws = #{
103-
<<"alg">> => <<"RS256">>,
104-
<<"kid">> => TokenKey
105-
},
106-
sign_token(Token, Jwk, Jws).
107-
10895
sign_token(Token, Jwk, Jws) ->
10996
Signed = jose_jwt:sign(Jwk, Jws, Token),
11097
jose_jws:compact(Signed).
@@ -418,7 +405,7 @@ get_opaque_token_signing_key() ->
418405
case get_env(opaque_token_signing_key) of
419406
undefined -> {error, missing_opaque_token_signing_key};
420407
List ->
421-
parse_signing_key_configuration(List)
408+
{ok, parse_signing_key_configuration(List)}
422409
end.
423410

424411
-spec get_opaque_token_signing_key(string()|binary()) -> {ok, signing_key()} | {error, any()}.
@@ -436,49 +423,50 @@ get_opaque_token_signing_key(KeyId) ->
436423
parse_signing_key_configuration(List) ->
437424
SK0 = case proplists:get_value(id, List, undefined) of
438425
undefined -> {error, missing_signing_key_id};
439-
Id -> #signing_key{id = Id}
426+
Id -> #signing_key{id = Id, type = hs256}
440427
end,
441428
case {SK0, proplists:get_value(type, List, hs256)} of
442429
{{error, _} = Error, _} ->
443430
Error;
444431
{_, hs256} ->
445-
Sk1 = case proplists:get_value(key, List, undefined) of
432+
SK1OrError = case proplists:get_value(key, List, undefined) of
446433
undefined -> {error, missing_symmetrical_key_value};
447-
SymKey -> SK0#signing_key{
448-
type = hs256,
449-
key = case make_jwk(#{
450-
<<"alg">> => <<"HS256">>,
451-
<<"value">> => SymKey,
452-
<<"kty">> => <<"MAC">>,
453-
<<"use">> => <<"sig">>}) of
454-
{error, _} = Error -> Error;
455-
{ok, Val} -> Val
456-
end
457-
}
458-
end,
459-
case Sk1#signing_key.key of
434+
SymKey ->
435+
case make_jwk(#{
436+
<<"alg">> => <<"HS256">>,
437+
<<"value">> => SymKey,
438+
<<"kty">> => <<"MAC">>,
439+
<<"use">> => <<"sig">>}) of
440+
{error, _} = Error -> Error;
441+
{ok, Val} ->
442+
SK0#signing_key{
443+
key =Val
444+
}
445+
end
446+
end,
447+
case SK1OrError of
460448
{error, _} = Error1 -> Error1;
461-
_ -> Sk1
462-
end;
463-
{_, rs256} ->
464-
Sk2 = case proplists:get_value(key_pem_file, List, undefined) of
465-
undefined ->
466-
{error, missing_key_pem_file};
467-
PrivateKey ->
468-
case proplists:get_value(cert_pem_file, List, undefined) of
469-
undefined ->
470-
{error, missing_cert_pem_file};
471-
PublicKey ->
472-
SK0#signing_key{type = hs256,
473-
private_key = PrivateKey,
474-
public_key = PublicKey}
475-
end
476-
end,
477-
case {Sk2#signing_key.private_key, Sk2#signing_key.public_key} of
478-
{{error, _} = Error2, _} -> Error2;
479-
{_, {error, _} = Error3} -> Error3;
480-
{_, _} -> Sk2
449+
SK1 -> SK1
481450
end;
451+
% {_, rs256} ->
452+
% Sk2 = case proplists:get_value(key_pem_file, List, undefined) of
453+
% undefined ->
454+
% {error, missing_key_pem_file};
455+
% PrivateKey ->
456+
% case proplists:get_value(cert_pem_file, List, undefined) of
457+
% undefined ->
458+
% {error, missing_cert_pem_file};
459+
% PublicKey ->
460+
% SK0#signing_key{type = hs256,
461+
% private_key = PrivateKey,
462+
% public_key = PublicKey}
463+
% end
464+
% end,
465+
% case {Sk2#signing_key.private_key, Sk2#signing_key.public_key} of
466+
% {{error, _} = Error2, _} -> Error2;
467+
% {_, {error, _} = Error3} -> Error3;
468+
% {_, _} -> Sk2
469+
% end;
482470
{_, _} -> {error, unsupported_signing_type}
483471
end.
484472

@@ -929,62 +917,23 @@ set_env(Par, Val) ->
929917
application:set_env(rabbitmq_auth_backend_oauth2, Par, Val).
930918

931919

932-
-include_lib("jose/include/jose_jwk.hrl").
933920

934-
-spec make_jwk(binary() | map()) -> {ok, #{binary() => binary()}} | {error, term()}.
935-
make_jwk(Json) when is_binary(Json); is_list(Json) ->
936-
JsonMap = jose:decode(iolist_to_binary(Json)),
937-
make_jwk(JsonMap);
921+
-spec make_jwk(map()) -> {ok, #{binary() => binary()}} | {error, term()}.
938922

939923
make_jwk(JsonMap) when is_map(JsonMap) ->
940924
case JsonMap of
941925
#{<<"kty">> := <<"MAC">>, <<"value">> := _Value} ->
942926
{ok, mac_to_oct(JsonMap)};
943-
#{<<"kty">> := <<"RSA">>, <<"n">> := _N, <<"e">> := _E} ->
944-
{ok, fix_alg(JsonMap)};
945-
#{<<"kty">> := <<"oct">>, <<"k">> := _K} ->
946-
{ok, fix_alg(JsonMap)};
947-
#{<<"kty">> := <<"OKP">>, <<"crv">> := _Crv, <<"x">> := _X} ->
948-
{ok, fix_alg(JsonMap)};
949-
#{<<"kty">> := <<"EC">>} ->
950-
{ok, fix_alg(JsonMap)};
951-
#{<<"kty">> := Kty} when Kty == <<"oct">>;
952-
Kty == <<"MAC">>;
953-
Kty == <<"RSA">>;
954-
Kty == <<"OKP">>;
955-
Kty == <<"EC">> ->
956-
{error, {fields_missing_for_kty, Kty}};
957927
#{<<"kty">> := _Kty} ->
958928
{error, unknown_kty};
959929
#{} ->
960930
{error, no_kty}
961931
end.
962932

963-
from_pem(Pem) ->
964-
case jose_jwk:from_pem(Pem) of
965-
#jose_jwk{} = Jwk -> {ok, Jwk};
966-
Other ->
967-
error_logger:warning_msg("Error parsing jwk from pem: ", [Other]),
968-
{error, invalid_pem_string}
969-
end.
970-
971-
from_pem_file(FileName) ->
972-
case filelib:is_file(FileName) of
973-
false ->
974-
{error, enoent};
975-
true ->
976-
case jose_jwk:from_pem_file(FileName) of
977-
#jose_jwk{} = Jwk -> {ok, Jwk};
978-
Other ->
979-
error_logger:warning_msg("Error parsing jwk from pem file: ", [Other]),
980-
{error, invalid_pem_file}
981-
end
982-
end.
983-
984933
mac_to_oct(#{<<"kty">> := <<"MAC">>, <<"value">> := Value} = Key) ->
985934
OktKey = maps:merge(Key,
986935
#{<<"kty">> => <<"oct">>,
987-
<<"k">> => base64url:encode(Value)}),
936+
<<"k">> => base64:encode(Value)}),
988937
fix_alg(OktKey).
989938

990939
fix_alg(#{<<"alg">> := Alg} = Key) ->

0 commit comments

Comments
 (0)