http 增加对token的校验
This commit is contained in:
parent
2de2bd6431
commit
9c10ccbfe0
@ -69,8 +69,15 @@ handle_call(get_stat, _From, State = #state{buffer = Buffer}) ->
|
|||||||
{noreply, NewState :: #state{}} |
|
{noreply, NewState :: #state{}} |
|
||||||
{noreply, NewState :: #state{}, timeout() | hibernate} |
|
{noreply, NewState :: #state{}, timeout() | hibernate} |
|
||||||
{stop, Reason :: term(), NewState :: #state{}}).
|
{stop, Reason :: term(), NewState :: #state{}}).
|
||||||
handle_cast({forward, Metric}, State = #state{buffer = Buffer}) ->
|
handle_cast({forward, Metric}, State = #state{buffer = Buffer, endpoint = #endpoint{config = #http_endpoint{token = Token}}}) ->
|
||||||
NBuffer = endpoint_buffer:append(Metric, Buffer),
|
Tuple = case is_binary(Token) andalso Token /= <<>> of
|
||||||
|
true ->
|
||||||
|
Sign = iot_util:sha256(erlang:iolist_to_binary([Token, Metric, Token])),
|
||||||
|
{Metric, Sign};
|
||||||
|
false ->
|
||||||
|
{Metric, <<>>}
|
||||||
|
end,
|
||||||
|
NBuffer = endpoint_buffer:append(Tuple, Buffer),
|
||||||
{noreply, State#state{buffer = NBuffer}};
|
{noreply, State#state{buffer = NBuffer}};
|
||||||
|
|
||||||
handle_cast(cleanup, State = #state{buffer = Buffer}) ->
|
handle_cast(cleanup, State = #state{buffer = Buffer}) ->
|
||||||
@ -83,10 +90,14 @@ handle_cast(cleanup, State = #state{buffer = Buffer}) ->
|
|||||||
{noreply, NewState :: #state{}} |
|
{noreply, NewState :: #state{}} |
|
||||||
{noreply, NewState :: #state{}, timeout() | hibernate} |
|
{noreply, NewState :: #state{}, timeout() | hibernate} |
|
||||||
{stop, Reason :: term(), NewState :: #state{}}).
|
{stop, Reason :: term(), NewState :: #state{}}).
|
||||||
handle_info({next_data, Id, Metric}, State = #state{buffer = Buffer, endpoint = #endpoint{config = #http_endpoint{url = Url}}}) ->
|
handle_info({next_data, Id, {Metric, Sign}}, State = #state{buffer = Buffer, endpoint = #endpoint{config = #http_endpoint{url = Url}}}) ->
|
||||||
Headers = [
|
BaseHeaders = [{<<"Content-Type">>, <<"application/json">>}],
|
||||||
{<<"Content-Type">>, <<"application/json">>}
|
ExtraHeaders = if
|
||||||
],
|
Sign =:= <<>> -> [];
|
||||||
|
true -> [{<<"X-Signature">>, Sign}]
|
||||||
|
end,
|
||||||
|
Headers = BaseHeaders ++ ExtraHeaders,
|
||||||
|
|
||||||
case hackney:request(post, Url, Headers, Metric) of
|
case hackney:request(post, Url, Headers, Metric) of
|
||||||
{ok, 200, _, ClientRef} ->
|
{ok, 200, _, ClientRef} ->
|
||||||
{ok, RespBody} = hackney:body(ClientRef),
|
{ok, RespBody} = hackney:body(ClientRef),
|
||||||
|
|||||||
@ -113,13 +113,13 @@ assert_call(true, Fun) ->
|
|||||||
assert_call(false, _) ->
|
assert_call(false, _) ->
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
-spec sha256(Str :: string() | binary()) -> string().
|
-spec sha256(Str :: string() | binary()) -> binary().
|
||||||
sha256(Str) when is_list(Str) ->
|
sha256(Str) when is_list(Str) ->
|
||||||
sha256(unicode:characters_to_binary(Str));
|
sha256(unicode:characters_to_binary(Str));
|
||||||
sha256(Bin) when is_binary(Bin) ->
|
sha256(Bin) when is_binary(Bin) ->
|
||||||
HashBin = crypto:hash(sha256, Bin),
|
HashBin = crypto:hash(sha256, Bin),
|
||||||
HexStr = lists:flatten([io_lib:format("~2.16.0B", [B]) || B <- binary:bin_to_list(HashBin)]),
|
HexStr = lists:flatten([io_lib:format("~2.16.0B", [B]) || B <- binary:bin_to_list(HashBin)]),
|
||||||
string:lowercase(HexStr).
|
list_to_binary(string:lowercase(HexStr)).
|
||||||
|
|
||||||
-spec md5(Str :: binary()) -> binary().
|
-spec md5(Str :: binary()) -> binary().
|
||||||
md5(Str) when is_binary(Str) ->
|
md5(Str) when is_binary(Str) ->
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user