|
|
@@ -40,6 +40,7 @@
|
|
|
on_client_disconnected/4,
|
|
|
on_client_connack/4,
|
|
|
on_client_check_authz_complete/6,
|
|
|
+ on_client_check_authn_complete/3,
|
|
|
on_session_subscribed/4,
|
|
|
on_session_unsubscribed/4,
|
|
|
on_message_publish/2,
|
|
|
@@ -182,6 +183,18 @@ on_client_check_authz_complete(
|
|
|
Conf
|
|
|
).
|
|
|
|
|
|
+on_client_check_authn_complete(ClientInfo, Result, Conf) ->
|
|
|
+ apply_event(
|
|
|
+ 'client.check_authn_complete',
|
|
|
+ fun() ->
|
|
|
+ eventmsg_check_authn_complete(
|
|
|
+ ClientInfo,
|
|
|
+ Result
|
|
|
+ )
|
|
|
+ end,
|
|
|
+ Conf
|
|
|
+ ).
|
|
|
+
|
|
|
on_client_disconnected(ClientInfo, Reason, ConnInfo, Conf) ->
|
|
|
apply_event(
|
|
|
'client.disconnected',
|
|
|
@@ -438,6 +451,27 @@ eventmsg_check_authz_complete(
|
|
|
#{}
|
|
|
).
|
|
|
|
|
|
+eventmsg_check_authn_complete(
|
|
|
+ _ClientInfo = #{
|
|
|
+ clientid := ClientId,
|
|
|
+ username := Username,
|
|
|
+ peerhost := PeerHost
|
|
|
+ },
|
|
|
+ #{is_anonymous := IsAnonymous} = Result
|
|
|
+) ->
|
|
|
+ IsSuperuser = maps:get(is_superuser, Result, false),
|
|
|
+ with_basic_columns(
|
|
|
+ 'client.check_authn_complete',
|
|
|
+ #{
|
|
|
+ clientid => ClientId,
|
|
|
+ username => Username,
|
|
|
+ peerhost => ntoa(PeerHost),
|
|
|
+ is_anonymous => IsAnonymous,
|
|
|
+ is_superuser => IsSuperuser
|
|
|
+ },
|
|
|
+ #{}
|
|
|
+ ).
|
|
|
+
|
|
|
eventmsg_sub_or_unsub(
|
|
|
Event,
|
|
|
_ClientInfo = #{
|
|
|
@@ -679,6 +713,7 @@ event_info() ->
|
|
|
event_info_client_disconnected(),
|
|
|
event_info_client_connack(),
|
|
|
event_info_client_check_authz_complete(),
|
|
|
+ event_info_client_check_authn_complete(),
|
|
|
event_info_session_subscribed(),
|
|
|
event_info_session_unsubscribed(),
|
|
|
event_info_delivery_dropped(),
|
|
|
@@ -770,6 +805,13 @@ event_info_client_check_authz_complete() ->
|
|
|
{<<"client check authz complete">>, <<"授权结果"/utf8>>},
|
|
|
<<"SELECT * FROM \"$events/client_check_authz_complete\"">>
|
|
|
).
|
|
|
+event_info_client_check_authn_complete() ->
|
|
|
+ event_info_common(
|
|
|
+ 'client.check_authn_complete',
|
|
|
+ {<<"client check authn complete">>, <<"认证结果"/utf8>>},
|
|
|
+ {<<"client check authn complete">>, <<"认证结果"/utf8>>},
|
|
|
+ <<"SELECT * FROM \"$events/client_check_authn_complete\"">>
|
|
|
+ ).
|
|
|
event_info_session_subscribed() ->
|
|
|
event_info_common(
|
|
|
'session.subscribed',
|
|
|
@@ -854,6 +896,13 @@ test_columns('client.check_authz_complete') ->
|
|
|
{<<"action">>, [<<"publish">>, <<"the action of publish or subscribe">>]},
|
|
|
{<<"result">>, [<<"allow">>, <<"the authz check complete result">>]}
|
|
|
];
|
|
|
+test_columns('client.check_authn_complete') ->
|
|
|
+ [
|
|
|
+ {<<"clientid">>, [<<"c_emqx">>, <<"the clientid if the client">>]},
|
|
|
+ {<<"username">>, [<<"u_emqx">>, <<"the username if the client">>]},
|
|
|
+ {<<"is_superuser">>, [true, <<"Whether this is a superuser">>]},
|
|
|
+ {<<"is_anonymous">>, [false, <<"Whether this is a superuser">>]}
|
|
|
+ ];
|
|
|
test_columns('session.unsubscribed') ->
|
|
|
test_columns('session.subscribed');
|
|
|
test_columns('session.subscribed') ->
|
|
|
@@ -1023,6 +1072,17 @@ columns_with_exam('client.check_authz_complete') ->
|
|
|
{<<"timestamp">>, erlang:system_time(millisecond)},
|
|
|
{<<"node">>, node()}
|
|
|
];
|
|
|
+columns_with_exam('client.check_authn_complete') ->
|
|
|
+ [
|
|
|
+ {<<"event">>, 'client.check_authz_complete'},
|
|
|
+ {<<"clientid">>, <<"c_emqx">>},
|
|
|
+ {<<"username">>, <<"u_emqx">>},
|
|
|
+ {<<"peerhost">>, <<"192.168.0.10">>},
|
|
|
+ {<<"is_superuser">>, true},
|
|
|
+ {<<"is_anonymous">>, false},
|
|
|
+ {<<"timestamp">>, erlang:system_time(millisecond)},
|
|
|
+ {<<"node">>, node()}
|
|
|
+ ];
|
|
|
columns_with_exam('session.subscribed') ->
|
|
|
[columns_example_props(sub_props)] ++ columns_message_sub_unsub('session.subscribed');
|
|
|
columns_with_exam('session.unsubscribed') ->
|
|
|
@@ -1124,6 +1184,7 @@ hook_fun('client.connected') -> fun ?MODULE:on_client_connected/3;
|
|
|
hook_fun('client.disconnected') -> fun ?MODULE:on_client_disconnected/4;
|
|
|
hook_fun('client.connack') -> fun ?MODULE:on_client_connack/4;
|
|
|
hook_fun('client.check_authz_complete') -> fun ?MODULE:on_client_check_authz_complete/6;
|
|
|
+hook_fun('client.check_authn_complete') -> fun ?MODULE:on_client_check_authn_complete/3;
|
|
|
hook_fun('session.subscribed') -> fun ?MODULE:on_session_subscribed/4;
|
|
|
hook_fun('session.unsubscribed') -> fun ?MODULE:on_session_unsubscribed/4;
|
|
|
hook_fun('message.delivered') -> fun ?MODULE:on_message_delivered/3;
|
|
|
@@ -1149,6 +1210,7 @@ event_name(<<"$events/client_connected">>) -> 'client.connected';
|
|
|
event_name(<<"$events/client_disconnected">>) -> 'client.disconnected';
|
|
|
event_name(<<"$events/client_connack">>) -> 'client.connack';
|
|
|
event_name(<<"$events/client_check_authz_complete">>) -> 'client.check_authz_complete';
|
|
|
+event_name(<<"$events/client_check_authn_complete">>) -> 'client.check_authn_complete';
|
|
|
event_name(<<"$events/session_subscribed">>) -> 'session.subscribed';
|
|
|
event_name(<<"$events/session_unsubscribed">>) -> 'session.unsubscribed';
|
|
|
event_name(<<"$events/message_delivered">>) -> 'message.delivered';
|
|
|
@@ -1163,6 +1225,7 @@ event_topic('client.connected') -> <<"$events/client_connected">>;
|
|
|
event_topic('client.disconnected') -> <<"$events/client_disconnected">>;
|
|
|
event_topic('client.connack') -> <<"$events/client_connack">>;
|
|
|
event_topic('client.check_authz_complete') -> <<"$events/client_check_authz_complete">>;
|
|
|
+event_topic('client.check_authn_complete') -> <<"$events/client_check_authn_complete">>;
|
|
|
event_topic('session.subscribed') -> <<"$events/session_subscribed">>;
|
|
|
event_topic('session.unsubscribed') -> <<"$events/session_unsubscribed">>;
|
|
|
event_topic('message.delivered') -> <<"$events/message_delivered">>;
|