fix(ws): take ws_cookie to clientinfo

see: https://github.com/emqx/emqx/issues/3747#issuecomment-702268570
This commit is contained in:
JianBo He 2020-10-12 17:05:06 +08:00 committed by JianBo He
parent 9595b49789
commit b883e238bf
2 changed files with 23 additions and 2 deletions

View File

@ -183,8 +183,9 @@ init(ConnInfo = #{peername := {PeerHost, _Port},
is_bridge => false, is_bridge => false,
is_superuser => false is_superuser => false
}, Options), }, Options),
#channel{conninfo = ConnInfo, {NClientInfo, NConnInfo} = take_ws_cookie(ClientInfo, ConnInfo),
clientinfo = ClientInfo, #channel{conninfo = NConnInfo,
clientinfo = NClientInfo,
topic_aliases = #{inbound => #{}, topic_aliases = #{inbound => #{},
outbound => #{} outbound => #{}
}, },
@ -213,6 +214,14 @@ setting_peercert_infos(Peercert, ClientInfo, Options) ->
end, end,
ClientInfo#{username => Username, dn => DN, cn => CN}. ClientInfo#{username => Username, dn => DN, cn => CN}.
take_ws_cookie(ClientInfo, ConnInfo) ->
case maps:take(ws_cookie, ConnInfo) of
{WsCookie, NConnInfo} ->
{ClientInfo#{ws_cookie => WsCookie}, NConnInfo};
_ ->
{ClientInfo, ConnInfo}
end.
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Handle incoming packet %% Handle incoming packet
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------

View File

@ -687,6 +687,18 @@ t_terminate(_) ->
ok = emqx_channel:terminate(sock_error, channel(#{conn_state => connected})), ok = emqx_channel:terminate(sock_error, channel(#{conn_state => connected})),
ok = emqx_channel:terminate({shutdown, kicked}, channel(#{conn_state => connected})). ok = emqx_channel:terminate({shutdown, kicked}, channel(#{conn_state => connected})).
t_ws_cookie_init(_) ->
WsCookie = [{<<"session_id">>, <<"xyz">>}],
ConnInfo = #{socktype => ws,
peername => {{127,0,0,1}, 3456},
sockname => {{127,0,0,1}, 1883},
peercert => nossl,
conn_mod => emqx_ws_connection,
ws_cookie => WsCookie
},
Channel = emqx_channel:init(ConnInfo, [{zone, zone}]),
?assertMatch(#{ws_cookie := WsCookie}, emqx_channel:info(clientinfo, Channel)).
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Helper functions %% Helper functions
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------