chore: fix dialyzer errors on ce version

```
apps/emqx_dashboard/src/emqx_dashboard.erl
Line 225 Column 17: The pattern {'error', 'unauthorized_role'} can never match the type {'error','not_found' | 'token_timeout'} | {'ok',binary()}
```
This commit is contained in:
Thales Macedo Garitezi 2023-09-21 09:58:40 -03:00
parent beea1be9f0
commit 85a8c174d9
3 changed files with 35 additions and 20 deletions

View File

@ -210,6 +210,11 @@ filter_false(K, V, S) -> [{K, V} | S].
listener_name(Protocol) ->
list_to_atom(atom_to_list(Protocol) ++ ":dashboard").
-if(?EMQX_RELEASE_EDITION =/= ee).
%% dialyzer complains about the `unauthorized_role' clause...
-dialyzer({no_match, [authorize/1]}).
-endif.
authorize(Req) ->
case cowboy_req:parse_header(<<"authorization">>, Req) of
{basic, Username, Password} ->

View File

@ -374,6 +374,10 @@ sign_token(Username, Password) ->
Error
end.
-spec verify_token(_, Token :: binary()) ->
Result ::
{ok, binary()}
| {error, token_timeout | not_found | unauthorized_role}.
verify_token(Req, Token) ->
emqx_dashboard_token:verify(Req, Token).

View File

@ -122,23 +122,16 @@ do_sign(#?ADMIN{username = Username} = User, Password) ->
_ = mria:transaction(?DASHBOARD_SHARD, fun mnesia:write/1, [JWTRec]),
{ok, Token}.
-spec do_verify(_, Token :: binary()) ->
Result ::
{ok, binary()}
| {error, token_timeout | not_found | unauthorized_role}.
do_verify(Req, Token) ->
case lookup(Token) of
{ok, JWT = #?ADMIN_JWT{exptime = ExpTime, extra = Extra, username = Username}} ->
{ok, JWT = #?ADMIN_JWT{exptime = ExpTime, extra = _Extra, username = _Username}} ->
case ExpTime > erlang:system_time(millisecond) of
true ->
case check_rbac(Req, Extra) of
true ->
NewJWT = JWT#?ADMIN_JWT{exptime = jwt_expiration_time()},
{atomic, Res} = mria:transaction(
?DASHBOARD_SHARD,
fun mnesia:write/1,
[NewJWT]
),
{Res, Username};
_ ->
{error, unauthorized_role}
end;
check_rbac(Req, JWT);
_ ->
{error, token_timeout}
end;
@ -254,15 +247,28 @@ clean_expired_jwt(Now) ->
ok = destroy(JWTList).
-if(?EMQX_RELEASE_EDITION == ee).
check_rbac(Req, Extra) ->
emqx_dashboard_rbac:check_rbac(Req, Extra).
check_rbac(Req, JWT) ->
#?ADMIN_JWT{exptime = _ExpTime, extra = Extra, username = _Username} = JWT,
case emqx_dashboard_rbac:check_rbac(Req, Extra) of
true ->
save_new_jwt(JWT);
_ ->
{error, unauthorized_role}
end.
-else.
-dialyzer({nowarn_function, [check_rbac/2]}).
-dialyzer({no_match, [do_verify/2]}).
check_rbac(_Req, _Extra) ->
true.
check_rbac(_Req, JWT) ->
save_new_jwt(JWT).
-endif.
save_new_jwt(OldJWT) ->
#?ADMIN_JWT{exptime = _ExpTime, extra = _Extra, username = Username} = OldJWT,
NewJWT = OldJWT#?ADMIN_JWT{exptime = jwt_expiration_time()},
{atomic, Res} = mria:transaction(
?DASHBOARD_SHARD,
fun mnesia:write/1,
[NewJWT]
),
{Res, Username}.