Strip sensitive data from state
diff --git a/src/ibrowse_http_client.erl b/src/ibrowse_http_client.erl
index 98a475f..bee6a70 100644
--- a/src/ibrowse_http_client.erl
+++ b/src/ibrowse_http_client.erl
@@ -33,7 +33,8 @@
handle_cast/2,
handle_info/2,
terminate/2,
- code_change/3
+ code_change/3,
+ format_status/2
]).
-include("ibrowse.hrl").
@@ -321,10 +322,47 @@
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
+
+%%--------------------------------------------------------------------
+%% Function: format_status/2
+%% Purpose: Clean process state before logging
+%% Returns: key value list
+%%--------------------------------------------------------------------
+format_status(_Opt, [_PDict, State]) ->
+ #state{
+ reqs=Reqs,
+ reply_buffer=ReplyBuf,
+ recvd_headers=RCVDHeaders,
+ raw_headers=RawHeaders,
+ chunk_size_buffer=ChunkSizeBuf,
+ cur_req=Request
+ } = State,
+ ScrubbedReq = Request#request{url=url_strip_password(Request#request.url)},
+ Scrubbed = State#state{
+ reqs={queue_length, queue:len(Reqs)},
+ reply_buffer={byte_size, byte_size(ReplyBuf)},
+ recvd_headers=lists:map(fun({K, _V}) -> K end, RCVDHeaders),
+ raw_headers={byte_size, byte_size(RawHeaders)},
+ chunk_size_buffer={byte_size, byte_size(ChunkSizeBuf)},
+ cur_req=ScrubbedReq
+ },
+ [{data, [{"State",
+ lists:zip(
+ record_info(fields, state),
+ tl(tuple_to_list(Scrubbed))
+ )
+ }]}].
+
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
+url_strip_password(Url) ->
+ re:replace(Url,
+ "(http|https|socks5)://([^:]+):[^@]+@(.*)$",
+ "\\1://\\2:*****@\\3",
+ [{return, list}]).
+
%%--------------------------------------------------------------------
%% Handles data recvd on the socket
%%--------------------------------------------------------------------