mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-20 16:15:59 +01:00
Use json module when Erlang/OTP 27, jiffy with older ones
This commit is contained in:
parent
0ad1d315e8
commit
696e42b5b4
6
mix.exs
6
mix.exs
@ -46,7 +46,7 @@ defmodule Ejabberd.MixProject do
|
|||||||
def application do
|
def application do
|
||||||
[mod: {:ejabberd_app, []},
|
[mod: {:ejabberd_app, []},
|
||||||
applications: [:idna, :inets, :kernel, :sasl, :ssl, :stdlib, :mix,
|
applications: [:idna, :inets, :kernel, :sasl, :ssl, :stdlib, :mix,
|
||||||
:fast_tls, :fast_xml, :fast_yaml, :jiffy, :jose,
|
:fast_tls, :fast_xml, :fast_yaml, :jose,
|
||||||
:p1_utils, :stringprep, :syntax_tools, :yconf]
|
:p1_utils, :stringprep, :syntax_tools, :yconf]
|
||||||
++ cond_apps(),
|
++ cond_apps(),
|
||||||
included_applications: [:mnesia, :os_mon,
|
included_applications: [:mnesia, :os_mon,
|
||||||
@ -114,6 +114,7 @@ defmodule Ejabberd.MixProject do
|
|||||||
if_version_below(~c"24", [{:d, :SYSTOOLS_APP_DEF_WITHOUT_OPTIONAL}]) ++
|
if_version_below(~c"24", [{:d, :SYSTOOLS_APP_DEF_WITHOUT_OPTIONAL}]) ++
|
||||||
if_version_below(~c"24", [{:d, :OTP_BELOW_24}]) ++
|
if_version_below(~c"24", [{:d, :OTP_BELOW_24}]) ++
|
||||||
if_version_below(~c"25", [{:d, :OTP_BELOW_25}]) ++
|
if_version_below(~c"25", [{:d, :OTP_BELOW_25}]) ++
|
||||||
|
if_version_below(~c"27", [{:d, :OTP_BELOW_27}]) ++
|
||||||
if_type_exported(:odbc, {:opaque, :connection_reference, 0}, [{:d, :ODBC_HAS_TYPES}])
|
if_type_exported(:odbc, {:opaque, :connection_reference, 0}, [{:d, :ODBC_HAS_TYPES}])
|
||||||
defines = for {:d, value} <- result, do: {:d, value}
|
defines = for {:d, value} <- result, do: {:d, value}
|
||||||
result ++ [{:d, :ALL_DEFS, defines}]
|
result ++ [{:d, :ALL_DEFS, defines}]
|
||||||
@ -139,7 +140,6 @@ defmodule Ejabberd.MixProject do
|
|||||||
{:fast_xml, ">= 1.1.51"},
|
{:fast_xml, ">= 1.1.51"},
|
||||||
{:fast_yaml, "~> 1.0"},
|
{:fast_yaml, "~> 1.0"},
|
||||||
{:idna, "~> 6.0"},
|
{:idna, "~> 6.0"},
|
||||||
{:jiffy, "~> 1.1.1"},
|
|
||||||
{:mqtree, "~> 1.0"},
|
{:mqtree, "~> 1.0"},
|
||||||
{:p1_acme, git: "https://github.com/processone/p1_acme", branch: "master"},
|
{:p1_acme, git: "https://github.com/processone/p1_acme", branch: "master"},
|
||||||
{:p1_oauth2, "~> 0.6"},
|
{:p1_oauth2, "~> 0.6"},
|
||||||
@ -173,6 +173,7 @@ defmodule Ejabberd.MixProject do
|
|||||||
{config(:zlib), {:ezlib, "~> 1.0"}},
|
{config(:zlib), {:ezlib, "~> 1.0"}},
|
||||||
{if_version_above(~c"23", true), {:jose, "~> 1.11.10"}},
|
{if_version_above(~c"23", true), {:jose, "~> 1.11.10"}},
|
||||||
{if_version_below(~c"24", true), {:jose, "1.11.1"}},
|
{if_version_below(~c"24", true), {:jose, "1.11.1"}},
|
||||||
|
{if_version_below(~c"27", true), {:jiffy, "~> 1.1.1"}},
|
||||||
{if_version_below(~c"22", true), {:lager, "~> 3.9.1"}},
|
{if_version_below(~c"22", true), {:lager, "~> 3.9.1"}},
|
||||||
{config(:lua), {:luerl, "~> 1.2.0"}},
|
{config(:lua), {:luerl, "~> 1.2.0"}},
|
||||||
{config(:mysql), {:p1_mysql, ">= 1.0.23" }},
|
{config(:mysql), {:p1_mysql, ">= 1.0.23" }},
|
||||||
@ -185,6 +186,7 @@ defmodule Ejabberd.MixProject do
|
|||||||
defp cond_apps do
|
defp cond_apps do
|
||||||
for {:true, app} <- [{config(:stun), :stun},
|
for {:true, app} <- [{config(:stun), :stun},
|
||||||
{Map.has_key?(System.get_env(), "RELIVE"), :exsync},
|
{Map.has_key?(System.get_env(), "RELIVE"), :exsync},
|
||||||
|
{if_version_below(~c"27", true), :jiffy},
|
||||||
{config(:tools), :observer}], do:
|
{config(:tools), :observer}], do:
|
||||||
app
|
app
|
||||||
end
|
end
|
||||||
|
@ -40,9 +40,8 @@
|
|||||||
{fast_xml, "~> 1.1.51", {git, "https://github.com/processone/fast_xml", {tag, "1.1.51"}}},
|
{fast_xml, "~> 1.1.51", {git, "https://github.com/processone/fast_xml", {tag, "1.1.51"}}},
|
||||||
{fast_yaml, "~> 1.0.36", {git, "https://github.com/processone/fast_yaml", {tag, "1.0.36"}}},
|
{fast_yaml, "~> 1.0.36", {git, "https://github.com/processone/fast_yaml", {tag, "1.0.36"}}},
|
||||||
{idna, "~> 6.0", {git, "https://github.com/benoitc/erlang-idna", {tag, "6.0.0"}}},
|
{idna, "~> 6.0", {git, "https://github.com/benoitc/erlang-idna", {tag, "6.0.0"}}},
|
||||||
{if_version_above, "19",
|
{if_version_below, "27",
|
||||||
{jiffy, "~> 1.1.1", {git, "https://github.com/davisp/jiffy", {tag, "1.1.1"}}},
|
{jiffy, "~> 1.1.1", {git, "https://github.com/davisp/jiffy", {tag, "1.1.1"}}}
|
||||||
{jiffy, "1.1.0", {git, "https://github.com/davisp/jiffy", {tag, "1.1.0"}}} % for R19 and below
|
|
||||||
},
|
},
|
||||||
{if_version_above, "23",
|
{if_version_above, "23",
|
||||||
{jose, "~> 1.11.10", {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.11.10"}}},
|
{jose, "~> 1.11.10", {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.11.10"}}},
|
||||||
@ -131,6 +130,7 @@
|
|||||||
{if_version_below, "24", {d, 'SYSTOOLS_APP_DEF_WITHOUT_OPTIONAL'}},
|
{if_version_below, "24", {d, 'SYSTOOLS_APP_DEF_WITHOUT_OPTIONAL'}},
|
||||||
{if_version_below, "24", {d, 'OTP_BELOW_24'}},
|
{if_version_below, "24", {d, 'OTP_BELOW_24'}},
|
||||||
{if_version_below, "25", {d, 'OTP_BELOW_25'}},
|
{if_version_below, "25", {d, 'OTP_BELOW_25'}},
|
||||||
|
{if_version_below, "27", {d, 'OTP_BELOW_27'}},
|
||||||
{if_var_false, debug, no_debug_info},
|
{if_var_false, debug, no_debug_info},
|
||||||
{if_var_true, debug, debug_info},
|
{if_var_true, debug, debug_info},
|
||||||
{if_var_true, elixir, {d, 'ELIXIR_ENABLED'}},
|
{if_var_true, elixir, {d, 'ELIXIR_ENABLED'}},
|
||||||
@ -206,10 +206,11 @@
|
|||||||
{if_version_above, "25",
|
{if_version_above, "25",
|
||||||
{plt_extra_apps,
|
{plt_extra_apps,
|
||||||
[asn1, odbc, public_key, stdlib, syntax_tools,
|
[asn1, odbc, public_key, stdlib, syntax_tools,
|
||||||
idna, jiffy, jose,
|
idna, jose,
|
||||||
cache_tab, eimp, fast_tls, fast_xml, fast_yaml,
|
cache_tab, eimp, fast_tls, fast_xml, fast_yaml,
|
||||||
mqtree, p1_acme, p1_oauth2, p1_utils, pkix,
|
mqtree, p1_acme, p1_oauth2, p1_utils, pkix,
|
||||||
stringprep, xmpp, yconf,
|
stringprep, xmpp, yconf,
|
||||||
|
{if_version_below, "27", jiffy},
|
||||||
{if_var_true, pam, epam},
|
{if_var_true, pam, epam},
|
||||||
{if_var_true, redis, eredis},
|
{if_var_true, redis, eredis},
|
||||||
{if_var_true, sip, esip},
|
{if_var_true, sip, esip},
|
||||||
|
@ -374,7 +374,7 @@ format_arg(Arg, {tuple, Elements}) ->
|
|||||||
list_to_tuple(format_args(Args, Elements));
|
list_to_tuple(format_args(Args, Elements));
|
||||||
format_arg(Arg, Format) ->
|
format_arg(Arg, Format) ->
|
||||||
S = unicode:characters_to_binary(Arg, utf8),
|
S = unicode:characters_to_binary(Arg, utf8),
|
||||||
JSON = jiffy:decode(S, [return_maps]),
|
JSON = misc:json_decode(S),
|
||||||
mod_http_api:format_arg(JSON, Format).
|
mod_http_api:format_arg(JSON, Format).
|
||||||
|
|
||||||
format_arg2(Arg, Parse)->
|
format_arg2(Arg, Parse)->
|
||||||
|
@ -755,7 +755,7 @@ json_response(Code, Body) ->
|
|||||||
{Code, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>},
|
{Code, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>},
|
||||||
{<<"Cache-Control">>, <<"no-store">>},
|
{<<"Cache-Control">>, <<"no-store">>},
|
||||||
{<<"Pragma">>, <<"no-cache">>}],
|
{<<"Pragma">>, <<"no-cache">>}],
|
||||||
jiffy:encode(Body)}.
|
misc:json_encode(Body)}.
|
||||||
|
|
||||||
%% OAauth error are defined in:
|
%% OAauth error are defined in:
|
||||||
%% https://tools.ietf.org/html/draft-ietf-oauth-v2-25#section-5.2
|
%% https://tools.ietf.org/html/draft-ietf-oauth-v2-25#section-5.2
|
||||||
|
@ -884,7 +884,7 @@ get_commit_details2(Path) ->
|
|||||||
end.
|
end.
|
||||||
|
|
||||||
parse_details(Body) ->
|
parse_details(Body) ->
|
||||||
Contents = jiffy:decode(Body, [return_maps]),
|
Contents = misc:json_decode(Body),
|
||||||
|
|
||||||
{ok, Commit} = maps:find(<<"commit">>, Contents),
|
{ok, Commit} = maps:find(<<"commit">>, Contents),
|
||||||
{ok, Sha} = maps:find(<<"sha">>, Commit),
|
{ok, Sha} = maps:find(<<"sha">>, Commit),
|
||||||
|
20
src/misc.erl
20
src/misc.erl
@ -42,6 +42,7 @@
|
|||||||
is_mucsub_message/1, best_match/2, pmap/2, peach/2, format_exception/4,
|
is_mucsub_message/1, best_match/2, pmap/2, peach/2, format_exception/4,
|
||||||
get_my_ipv4_address/0, get_my_ipv6_address/0, parse_ip_mask/1,
|
get_my_ipv4_address/0, get_my_ipv6_address/0, parse_ip_mask/1,
|
||||||
crypto_hmac/3, crypto_hmac/4, uri_parse/1, uri_parse/2, uri_quote/1,
|
crypto_hmac/3, crypto_hmac/4, uri_parse/1, uri_parse/2, uri_quote/1,
|
||||||
|
json_encode/1, json_decode/1,
|
||||||
match_ip_mask/3, format_hosts_list/1, format_cycle/1, delete_dir/1,
|
match_ip_mask/3, format_hosts_list/1, format_cycle/1, delete_dir/1,
|
||||||
semver_to_xxyy/1, logical_processors/0, get_mucsub_event_type/1]).
|
semver_to_xxyy/1, logical_processors/0, get_mucsub_event_type/1]).
|
||||||
|
|
||||||
@ -58,6 +59,13 @@
|
|||||||
-type re_mp() :: {re_pattern, _, _, _, _}.
|
-type re_mp() :: {re_pattern, _, _, _, _}.
|
||||||
-export_type([re_mp/0]).
|
-export_type([re_mp/0]).
|
||||||
|
|
||||||
|
-ifdef(OTP_BELOW_27).
|
||||||
|
-type json_value() :: jiffy:json_value().
|
||||||
|
-else.
|
||||||
|
-type json_value() :: json:encode_value().
|
||||||
|
-endif.
|
||||||
|
-export_type([json_value/0]).
|
||||||
|
|
||||||
-type distance_cache() :: #{{string(), string()} => non_neg_integer()}.
|
-type distance_cache() :: #{{string(), string()} => non_neg_integer()}.
|
||||||
|
|
||||||
-spec uri_parse(binary()|string()) -> {ok, string(), string(), string(), number(), string(), string()} | {error, term()}.
|
-spec uri_parse(binary()|string()) -> {ok, string(), string(), string(), number(), string(), string()} | {error, term()}.
|
||||||
@ -122,6 +130,18 @@ crypto_hmac(Type, Key, Data) -> crypto:mac(hmac, Type, Key, Data).
|
|||||||
crypto_hmac(Type, Key, Data, MacL) -> crypto:macN(hmac, Type, Key, Data, MacL).
|
crypto_hmac(Type, Key, Data, MacL) -> crypto:macN(hmac, Type, Key, Data, MacL).
|
||||||
-endif.
|
-endif.
|
||||||
|
|
||||||
|
-ifdef(OTP_BELOW_27).
|
||||||
|
json_encode(Term) ->
|
||||||
|
jiffy:encode(Term).
|
||||||
|
json_decode(Bin) ->
|
||||||
|
jiffy:decode(Bin, [return_maps]).
|
||||||
|
-else.
|
||||||
|
json_encode(Term) ->
|
||||||
|
iolist_to_binary(json:encode(Term)).
|
||||||
|
json_decode(Bin) ->
|
||||||
|
json:decode(Bin).
|
||||||
|
-endif.
|
||||||
|
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
|
@ -154,14 +154,22 @@ get_type(Hdrs) ->
|
|||||||
depends(_Host, _Opts) ->
|
depends(_Host, _Opts) ->
|
||||||
[].
|
[].
|
||||||
|
|
||||||
mod_opt_type(json) ->
|
-ifdef(OTP_BELOW_27).
|
||||||
|
mod_opt_type_json() ->
|
||||||
econf:and_then(
|
econf:and_then(
|
||||||
econf:bool(),
|
econf:bool(),
|
||||||
fun(false) -> false;
|
fun(false) -> false;
|
||||||
(true) ->
|
(true) ->
|
||||||
ejabberd:start_app(jiffy),
|
ejabberd:start_app(jiffy),
|
||||||
true
|
true
|
||||||
end);
|
end).
|
||||||
|
-else.
|
||||||
|
mod_opt_type_json() ->
|
||||||
|
econf:bool().
|
||||||
|
-endif.
|
||||||
|
|
||||||
|
mod_opt_type(json) ->
|
||||||
|
mod_opt_type_json();
|
||||||
mod_opt_type(max_concat) ->
|
mod_opt_type(max_concat) ->
|
||||||
econf:pos_int(unlimited);
|
econf:pos_int(unlimited);
|
||||||
mod_opt_type(max_inactivity) ->
|
mod_opt_type(max_inactivity) ->
|
||||||
|
@ -90,7 +90,7 @@ process([], #request{method = 'GET', host = Host, raw_path = RawPath}) ->
|
|||||||
<<"</head>">>,
|
<<"</head>">>,
|
||||||
<<"<body>">>,
|
<<"<body>">>,
|
||||||
<<"<script>">>,
|
<<"<script>">>,
|
||||||
<<"converse.initialize(">>, jiffy:encode(Init4), <<");">>,
|
<<"converse.initialize(">>, misc:json_encode(Init4), <<");">>,
|
||||||
<<"</script>">>,
|
<<"</script>">>,
|
||||||
<<"</body>">>,
|
<<"</body>">>,
|
||||||
<<"</html>">>]};
|
<<"</html>">>]};
|
||||||
|
@ -125,7 +125,7 @@ file_json(Host) ->
|
|||||||
{200, [html,
|
{200, [html,
|
||||||
{<<"Content-Type">>, <<"application/json">>},
|
{<<"Content-Type">>, <<"application/json">>},
|
||||||
{<<"Access-Control-Allow-Origin">>, <<"*">>}],
|
{<<"Access-Control-Allow-Origin">>, <<"*">>}],
|
||||||
[jiffy:encode(#{links => BoshList ++ WsList})]}.
|
[misc:json_encode(#{links => BoshList ++ WsList})]}.
|
||||||
|
|
||||||
get_url(M, bosh, Tls, Host) ->
|
get_url(M, bosh, Tls, Host) ->
|
||||||
get_url(M, Tls, Host, bosh_service_url, mod_bosh);
|
get_url(M, Tls, Host, bosh_service_url, mod_bosh);
|
||||||
|
@ -197,7 +197,7 @@ perform_call(Command, Args, Req, Version) ->
|
|||||||
%% Be tolerant to make API more easily usable from command-line pipe.
|
%% Be tolerant to make API more easily usable from command-line pipe.
|
||||||
extract_args(<<"\n">>) -> [];
|
extract_args(<<"\n">>) -> [];
|
||||||
extract_args(Data) ->
|
extract_args(Data) ->
|
||||||
Maps = jiffy:decode(Data, [return_maps]),
|
Maps = misc:json_decode(Data),
|
||||||
maps:to_list(Maps).
|
maps:to_list(Maps).
|
||||||
|
|
||||||
% get API version N from last "vN" element in URL path
|
% get API version N from last "vN" element in URL path
|
||||||
@ -492,10 +492,10 @@ invalid_token_response() ->
|
|||||||
badrequest_response() ->
|
badrequest_response() ->
|
||||||
badrequest_response(<<"400 Bad Request">>).
|
badrequest_response(<<"400 Bad Request">>).
|
||||||
badrequest_response(Body) ->
|
badrequest_response(Body) ->
|
||||||
json_response(400, jiffy:encode(Body)).
|
json_response(400, misc:json_encode(Body)).
|
||||||
|
|
||||||
json_format({Code, Result}) ->
|
json_format({Code, Result}) ->
|
||||||
json_response(Code, jiffy:encode(Result));
|
json_response(Code, misc:json_encode(Result));
|
||||||
json_format({HTMLCode, JSONErrorCode, Message}) ->
|
json_format({HTMLCode, JSONErrorCode, Message}) ->
|
||||||
json_error(HTMLCode, JSONErrorCode, Message).
|
json_error(HTMLCode, JSONErrorCode, Message).
|
||||||
|
|
||||||
@ -506,7 +506,7 @@ json_response(Code, Body) when is_integer(Code) ->
|
|||||||
%% message is binary
|
%% message is binary
|
||||||
json_error(HTTPCode, JSONCode, Message) ->
|
json_error(HTTPCode, JSONCode, Message) ->
|
||||||
{HTTPCode, ?HEADER(?CT_JSON),
|
{HTTPCode, ?HEADER(?CT_JSON),
|
||||||
jiffy:encode(#{<<"status">> => <<"error">>,
|
misc:json_encode(#{<<"status">> => <<"error">>,
|
||||||
<<"code">> => JSONCode,
|
<<"code">> => JSONCode,
|
||||||
<<"message">> => Message})
|
<<"message">> => Message})
|
||||||
}.
|
}.
|
||||||
|
@ -75,13 +75,13 @@ process([<<"key">>, <<"v2">>, <<"server">> | _],
|
|||||||
}},
|
}},
|
||||||
SJSON = sign_json(Host, JSON),
|
SJSON = sign_json(Host, JSON),
|
||||||
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(SJSON)};
|
misc:json_encode(SJSON)};
|
||||||
process([<<"federation">>, <<"v1">>, <<"version">>],
|
process([<<"federation">>, <<"v1">>, <<"version">>],
|
||||||
#request{method = 'GET', host = _Host} = _Request) ->
|
#request{method = 'GET', host = _Host} = _Request) ->
|
||||||
JSON = #{<<"server">> => #{<<"name">> => <<"ejabberd/mod_matrix_gw">>,
|
JSON = #{<<"server">> => #{<<"name">> => <<"ejabberd/mod_matrix_gw">>,
|
||||||
<<"version">> => <<"0.1">>}},
|
<<"version">> => <<"0.1">>}},
|
||||||
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(JSON)};
|
misc:json_encode(JSON)};
|
||||||
process([<<"federation">>, <<"v1">>, <<"query">>, <<"profile">>],
|
process([<<"federation">>, <<"v1">>, <<"query">>, <<"profile">>],
|
||||||
#request{method = 'GET', host = _Host} = Request) ->
|
#request{method = 'GET', host = _Host} = Request) ->
|
||||||
case proplists:get_value(<<"user_id">>, Request#request.q) of
|
case proplists:get_value(<<"user_id">>, Request#request.q) of
|
||||||
@ -116,7 +116,7 @@ process([<<"federation">>, <<"v1">>, <<"user">>, <<"devices">>, UserID],
|
|||||||
<<"keys">> => []}],
|
<<"keys">> => []}],
|
||||||
<<"stream_id">> => 1,
|
<<"stream_id">> => 1,
|
||||||
<<"user_id">> => UserID},
|
<<"user_id">> => UserID},
|
||||||
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}], jiffy:encode(Res)};
|
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}], misc:json_encode(Res)};
|
||||||
{result, HTTPResult} ->
|
{result, HTTPResult} ->
|
||||||
HTTPResult
|
HTTPResult
|
||||||
end;
|
end;
|
||||||
@ -127,7 +127,7 @@ process([<<"federation">>, <<"v1">>, <<"user">>, <<"keys">>, <<"query">>],
|
|||||||
DeviceKeys2 = maps:map(fun(_Key, _) -> #{} end, DeviceKeys),
|
DeviceKeys2 = maps:map(fun(_Key, _) -> #{} end, DeviceKeys),
|
||||||
Res = #{<<"device_keys">> => DeviceKeys2},
|
Res = #{<<"device_keys">> => DeviceKeys2},
|
||||||
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)};
|
misc:json_encode(Res)};
|
||||||
{ok, _JSON, _Origin} ->
|
{ok, _JSON, _Origin} ->
|
||||||
{400, [], <<"400 Bad Request: invalid format">>};
|
{400, [], <<"400 Bad Request: invalid format">>};
|
||||||
{result, HTTPResult} ->
|
{result, HTTPResult} ->
|
||||||
@ -156,8 +156,8 @@ process([<<"federation">>, <<"v2">>, <<"invite">>, RoomID, EventID],
|
|||||||
?DEBUG("sign event ~p~n", [SEvent]),
|
?DEBUG("sign event ~p~n", [SEvent]),
|
||||||
ResJSON = #{<<"event">> => SEvent},
|
ResJSON = #{<<"event">> => SEvent},
|
||||||
mod_matrix_gw_room:join(Host, Origin, RoomID, Sender, UserID),
|
mod_matrix_gw_room:join(Host, Origin, RoomID, Sender, UserID),
|
||||||
?DEBUG("res ~s~n", [jiffy:encode(ResJSON)]),
|
?DEBUG("res ~s~n", [misc:json_encode(ResJSON)]),
|
||||||
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}], jiffy:encode(ResJSON)};
|
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}], misc:json_encode(ResJSON)};
|
||||||
_ ->
|
_ ->
|
||||||
{400, [], <<"400 Bad Request: bad event id">>}
|
{400, [], <<"400 Bad Request: bad event id">>}
|
||||||
end;
|
end;
|
||||||
@ -191,7 +191,7 @@ process([<<"federation">>, <<"v1">>, <<"send">>, _TxnID],
|
|||||||
end, PDUs),
|
end, PDUs),
|
||||||
?DEBUG("send res ~p~n", [Res]),
|
?DEBUG("send res ~p~n", [Res]),
|
||||||
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(maps:from_list(Res))};
|
misc:json_encode(maps:from_list(Res))};
|
||||||
{ok, _JSON, _Origin} ->
|
{ok, _JSON, _Origin} ->
|
||||||
{400, [], <<"400 Bad Request: invalid format">>};
|
{400, [], <<"400 Bad Request: invalid format">>};
|
||||||
{result, HTTPResult} ->
|
{result, HTTPResult} ->
|
||||||
@ -212,7 +212,7 @@ process([<<"federation">>, <<"v1">>, <<"get_missing_events">>, RoomID],
|
|||||||
?DEBUG("get_missing_events res ~p~n", [PDUs]),
|
?DEBUG("get_missing_events res ~p~n", [PDUs]),
|
||||||
Res = #{<<"events">> => PDUs},
|
Res = #{<<"events">> => PDUs},
|
||||||
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)};
|
misc:json_encode(Res)};
|
||||||
{ok, _JSON, _Origin} ->
|
{ok, _JSON, _Origin} ->
|
||||||
{400, [], <<"400 Bad Request: invalid format">>};
|
{400, [], <<"400 Bad Request: invalid format">>};
|
||||||
{result, HTTPResult} ->
|
{result, HTTPResult} ->
|
||||||
@ -245,7 +245,7 @@ process([<<"federation">>, <<"v1">>, <<"backfill">>, RoomID],
|
|||||||
<<"origin_server_ts">> => erlang:system_time(millisecond),
|
<<"origin_server_ts">> => erlang:system_time(millisecond),
|
||||||
<<"pdus">> => PDUs},
|
<<"pdus">> => PDUs},
|
||||||
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)};
|
misc:json_encode(Res)};
|
||||||
{result, HTTPResult} ->
|
{result, HTTPResult} ->
|
||||||
HTTPResult
|
HTTPResult
|
||||||
end;
|
end;
|
||||||
@ -265,7 +265,7 @@ process([<<"federation">>, <<"v1">>, <<"state_ids">>, RoomID],
|
|||||||
<<"pdu_ids">> => PDUs},
|
<<"pdu_ids">> => PDUs},
|
||||||
?DEBUG("get_state_ids res ~p~n", [Res]),
|
?DEBUG("get_state_ids res ~p~n", [Res]),
|
||||||
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)};
|
misc:json_encode(Res)};
|
||||||
{error, room_not_found} ->
|
{error, room_not_found} ->
|
||||||
{400, [], <<"400 Bad Request: room not found">>};
|
{400, [], <<"400 Bad Request: room not found">>};
|
||||||
{error, not_allowed} ->
|
{error, not_allowed} ->
|
||||||
@ -307,7 +307,7 @@ process([<<"federation">>, <<"v1">>, <<"event">>, EventID],
|
|||||||
<<"origin_server_ts">> => erlang:system_time(millisecond),
|
<<"origin_server_ts">> => erlang:system_time(millisecond),
|
||||||
<<"pdus">> => [PDU]},
|
<<"pdus">> => [PDU]},
|
||||||
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)}
|
misc:json_encode(Res)}
|
||||||
end;
|
end;
|
||||||
{result, HTTPResult} ->
|
{result, HTTPResult} ->
|
||||||
HTTPResult
|
HTTPResult
|
||||||
@ -324,27 +324,27 @@ process([<<"federation">>, <<"v1">>, <<"make_join">>, RoomID, UserID],
|
|||||||
Res = #{<<"errcode">> => <<"M_NOT_FOUND">>,
|
Res = #{<<"errcode">> => <<"M_NOT_FOUND">>,
|
||||||
<<"error">> => <<"Unknown room">>},
|
<<"error">> => <<"Unknown room">>},
|
||||||
{404, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{404, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)};
|
misc:json_encode(Res)};
|
||||||
{error, not_invited} ->
|
{error, not_invited} ->
|
||||||
Res = #{<<"errcode">> => <<"M_FORBIDDEN">>,
|
Res = #{<<"errcode">> => <<"M_FORBIDDEN">>,
|
||||||
<<"error">> => <<"You are not invited to this room">>},
|
<<"error">> => <<"You are not invited to this room">>},
|
||||||
{403, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{403, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)};
|
misc:json_encode(Res)};
|
||||||
{error, {incompatible_version, Ver}} ->
|
{error, {incompatible_version, Ver}} ->
|
||||||
Res = #{<<"errcode">> => <<"M_INCOMPATIBLE_ROOM_VERSION">>,
|
Res = #{<<"errcode">> => <<"M_INCOMPATIBLE_ROOM_VERSION">>,
|
||||||
<<"error">> => <<"Your homeserver does not support the features required to join this room">>,
|
<<"error">> => <<"Your homeserver does not support the features required to join this room">>,
|
||||||
<<"room_version">> => Ver},
|
<<"room_version">> => Ver},
|
||||||
{400, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{400, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)};
|
misc:json_encode(Res)};
|
||||||
{ok, Res} ->
|
{ok, Res} ->
|
||||||
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)}
|
misc:json_encode(Res)}
|
||||||
end;
|
end;
|
||||||
_ ->
|
_ ->
|
||||||
Res = #{<<"errcode">> => <<"M_FORBIDDEN">>,
|
Res = #{<<"errcode">> => <<"M_FORBIDDEN">>,
|
||||||
<<"error">> => <<"User not from origin">>},
|
<<"error">> => <<"User not from origin">>},
|
||||||
{403, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{403, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)}
|
misc:json_encode(Res)}
|
||||||
end;
|
end;
|
||||||
{result, HTTPResult} ->
|
{result, HTTPResult} ->
|
||||||
HTTPResult
|
HTTPResult
|
||||||
@ -366,23 +366,23 @@ process([<<"federation">>, <<"v2">>, <<"send_join">>, RoomID, EventID],
|
|||||||
Res = #{<<"errcode">> => <<"M_BAD_REQUEST">>,
|
Res = #{<<"errcode">> => <<"M_BAD_REQUEST">>,
|
||||||
<<"error">> => Error},
|
<<"error">> => Error},
|
||||||
{403, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{403, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)};
|
misc:json_encode(Res)};
|
||||||
{ok, Res} ->
|
{ok, Res} ->
|
||||||
?DEBUG("send_join res: ~p~n", [Res]),
|
?DEBUG("send_join res: ~p~n", [Res]),
|
||||||
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{200, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)}
|
misc:json_encode(Res)}
|
||||||
end;
|
end;
|
||||||
_ ->
|
_ ->
|
||||||
Res = #{<<"errcode">> => <<"M_FORBIDDEN">>,
|
Res = #{<<"errcode">> => <<"M_FORBIDDEN">>,
|
||||||
<<"error">> => <<"User not from origin">>},
|
<<"error">> => <<"User not from origin">>},
|
||||||
{403, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{403, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)}
|
misc:json_encode(Res)}
|
||||||
end;
|
end;
|
||||||
{ok, _JSON, _Origin} ->
|
{ok, _JSON, _Origin} ->
|
||||||
Res = #{<<"errcode">> => <<"M_BAD_REQUEST">>,
|
Res = #{<<"errcode">> => <<"M_BAD_REQUEST">>,
|
||||||
<<"error">> => <<"Invalid event format">>},
|
<<"error">> => <<"Invalid event format">>},
|
||||||
{400, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
{400, [{<<"Content-Type">>, <<"application/json;charset=UTF-8">>}],
|
||||||
jiffy:encode(Res)};
|
misc:json_encode(Res)};
|
||||||
{result, HTTPResult} ->
|
{result, HTTPResult} ->
|
||||||
HTTPResult
|
HTTPResult
|
||||||
end;
|
end;
|
||||||
@ -409,8 +409,7 @@ preprocess_federation_request(Request, DoSignCheck) ->
|
|||||||
if
|
if
|
||||||
Request#request.length > 0 ->
|
Request#request.length > 0 ->
|
||||||
try
|
try
|
||||||
jiffy:decode(Request2#request.data,
|
misc:json_decode(Request2#request.data)
|
||||||
[return_maps])
|
|
||||||
catch
|
catch
|
||||||
_:_ ->
|
_:_ ->
|
||||||
error
|
error
|
||||||
@ -674,7 +673,7 @@ get_pruned_event_id(PrunedEvent) ->
|
|||||||
|
|
||||||
encode_canonical_json(JSON) ->
|
encode_canonical_json(JSON) ->
|
||||||
JSON2 = sort_json(JSON),
|
JSON2 = sort_json(JSON),
|
||||||
jiffy:encode(JSON2).
|
misc:json_encode(JSON2).
|
||||||
|
|
||||||
sort_json(#{} = Map) ->
|
sort_json(#{} = Map) ->
|
||||||
Map2 = maps:map(fun(_K, V) ->
|
Map2 = maps:map(fun(_K, V) ->
|
||||||
@ -736,7 +735,7 @@ sign_json(Host, JSON) ->
|
|||||||
binary(),
|
binary(),
|
||||||
[binary()],
|
[binary()],
|
||||||
[{binary(), binary()}],
|
[{binary(), binary()}],
|
||||||
none | #{atom() | binary() => jiffy:json_value()},
|
none | #{atom() | binary() => misc:json_value()},
|
||||||
[any()],
|
[any()],
|
||||||
[any()]) -> {ok, any()} | {error, any()}.
|
[any()]) -> {ok, any()} | {error, any()}.
|
||||||
|
|
||||||
@ -772,7 +771,7 @@ send_request(Host, Method, MatrixServer, Path, Query, JSON,
|
|||||||
Content =
|
Content =
|
||||||
case JSON of
|
case JSON of
|
||||||
none -> <<>>;
|
none -> <<>>;
|
||||||
_ -> jiffy:encode(JSON)
|
_ -> misc:json_encode(JSON)
|
||||||
end,
|
end,
|
||||||
Request =
|
Request =
|
||||||
case Method of
|
case Method of
|
||||||
|
@ -67,7 +67,7 @@
|
|||||||
sender :: binary(),
|
sender :: binary(),
|
||||||
prev_events :: [binary()],
|
prev_events :: [binary()],
|
||||||
origin_server_ts :: integer(),
|
origin_server_ts :: integer(),
|
||||||
json :: #{atom() | binary() => jiffy:json_value()},
|
json :: #{atom() | binary() => misc:json_value()},
|
||||||
state_map}).
|
state_map}).
|
||||||
|
|
||||||
-record(data,
|
-record(data,
|
||||||
@ -510,7 +510,7 @@ handle_event(cast, {join, MatrixServer, RoomID, Sender, UserID}, State, Data) ->
|
|||||||
?DEBUG("make_join ~p~n", [MakeJoinRes]),
|
?DEBUG("make_join ~p~n", [MakeJoinRes]),
|
||||||
case MakeJoinRes of
|
case MakeJoinRes of
|
||||||
{ok, {{_, 200, _}, _Headers, Body}} ->
|
{ok, {{_, 200, _}, _Headers, Body}} ->
|
||||||
try jiffy:decode(Body, [return_maps]) of
|
try misc:json_decode(Body) of
|
||||||
#{<<"event">> := Event,
|
#{<<"event">> := Event,
|
||||||
<<"room_version">> := SRoomVersion} ->
|
<<"room_version">> := SRoomVersion} ->
|
||||||
case binary_to_room_version(SRoomVersion) of
|
case binary_to_room_version(SRoomVersion) of
|
||||||
@ -702,7 +702,7 @@ process_send_join_res(MatrixServer, SendJoinRes, RoomVersion, Data) ->
|
|||||||
case SendJoinRes of
|
case SendJoinRes of
|
||||||
{ok, {{_, 200, _}, _Headers, Body}} ->
|
{ok, {{_, 200, _}, _Headers, Body}} ->
|
||||||
try
|
try
|
||||||
case jiffy:decode(Body, [return_maps]) of
|
case misc:json_decode(Body) of
|
||||||
#{<<"auth_chain">> := JSONAuthChain,
|
#{<<"auth_chain">> := JSONAuthChain,
|
||||||
<<"event">> := JSONEvent,
|
<<"event">> := JSONEvent,
|
||||||
<<"state">> := JSONState} = JSON when is_list(JSONAuthChain),
|
<<"state">> := JSONState} = JSON when is_list(JSONAuthChain),
|
||||||
@ -1585,7 +1585,7 @@ process_pdu(Host, Origin, PDU) ->
|
|||||||
process_missing_events_res(Host, Origin, Pid, RoomID, RoomVersion,
|
process_missing_events_res(Host, Origin, Pid, RoomID, RoomVersion,
|
||||||
{ok, {{_, 200, _}, _Headers, Body}}) ->
|
{ok, {{_, 200, _}, _Headers, Body}}) ->
|
||||||
try
|
try
|
||||||
case jiffy:decode(Body, [return_maps]) of
|
case misc:json_decode(Body) of
|
||||||
#{<<"events">> := JSONEvents} when is_list(JSONEvents) ->
|
#{<<"events">> := JSONEvents} when is_list(JSONEvents) ->
|
||||||
process_missing_events(Host, Origin, Pid, RoomID, RoomVersion, JSONEvents)
|
process_missing_events(Host, Origin, Pid, RoomID, RoomVersion, JSONEvents)
|
||||||
end
|
end
|
||||||
@ -1673,7 +1673,7 @@ request_room_state(Host, Origin, _Pid, RoomID, RoomVersion, Event) ->
|
|||||||
case Res of
|
case Res of
|
||||||
{ok, {{_, 200, _}, _Headers, Body}} ->
|
{ok, {{_, 200, _}, _Headers, Body}} ->
|
||||||
try
|
try
|
||||||
case jiffy:decode(Body, [return_maps]) of
|
case misc:json_decode(Body) of
|
||||||
#{<<"auth_chain">> := JSONAuthChain,
|
#{<<"auth_chain">> := JSONAuthChain,
|
||||||
<<"pdus">> := JSONState} = _JSON when is_list(JSONAuthChain),
|
<<"pdus">> := JSONState} = _JSON when is_list(JSONAuthChain),
|
||||||
is_list(JSONState) ->
|
is_list(JSONState) ->
|
||||||
@ -1732,7 +1732,7 @@ request_event(Host, Origin, _Pid, RoomID, RoomVersion, EventID) ->
|
|||||||
case Res of
|
case Res of
|
||||||
{ok, {{_, 200, _}, _Headers, Body}} ->
|
{ok, {{_, 200, _}, _Headers, Body}} ->
|
||||||
try
|
try
|
||||||
case jiffy:decode(Body, [return_maps]) of
|
case misc:json_decode(Body) of
|
||||||
#{<<"pdus">> := [PDU]} ->
|
#{<<"pdus">> := [PDU]} ->
|
||||||
Event = json_to_event(PDU, RoomVersion),
|
Event = json_to_event(PDU, RoomVersion),
|
||||||
case check_event_sig_and_hash(Host, Event) of
|
case check_event_sig_and_hash(Host, Event) of
|
||||||
|
@ -342,7 +342,7 @@ handle_event(cast, {key_reply, KeyID, HTTPResult}, State, Data) ->
|
|||||||
case HTTPResult of
|
case HTTPResult of
|
||||||
{{_, 200, _}, _, SJSON} ->
|
{{_, 200, _}, _, SJSON} ->
|
||||||
try
|
try
|
||||||
JSON = jiffy:decode(SJSON, [return_maps]),
|
JSON = misc:json_decode(SJSON),
|
||||||
?DEBUG("key ~p~n", [JSON]),
|
?DEBUG("key ~p~n", [JSON]),
|
||||||
#{<<"verify_keys">> := VerifyKeys} = JSON,
|
#{<<"verify_keys">> := VerifyKeys} = JSON,
|
||||||
#{KeyID := KeyData} = VerifyKeys,
|
#{KeyID := KeyData} = VerifyKeys,
|
||||||
@ -447,7 +447,7 @@ do_get_matrix_host_port(Data) ->
|
|||||||
case HTTPRes of
|
case HTTPRes of
|
||||||
{ok, {{_, 200, _}, _Headers, Body}} ->
|
{ok, {{_, 200, _}, _Headers, Body}} ->
|
||||||
try
|
try
|
||||||
case jiffy:decode(Body, [return_maps]) of
|
case misc:json_decode(Body) of
|
||||||
#{<<"m.server">> := Server} ->
|
#{<<"m.server">> := Server} ->
|
||||||
case binary:split(Server, <<":">>) of
|
case binary:split(Server, <<":">>) of
|
||||||
[ServerAddr] ->
|
[ServerAddr] ->
|
||||||
|
@ -147,7 +147,7 @@ to_list(V) when is_list(V) ->
|
|||||||
V.
|
V.
|
||||||
|
|
||||||
encode_json(Content) ->
|
encode_json(Content) ->
|
||||||
case catch jiffy:encode(Content) of
|
case catch misc:json_encode(Content) of
|
||||||
{'EXIT', Reason} ->
|
{'EXIT', Reason} ->
|
||||||
{error, {invalid_payload, Content, Reason}};
|
{error, {invalid_payload, Content, Reason}};
|
||||||
Encoded ->
|
Encoded ->
|
||||||
@ -157,7 +157,7 @@ encode_json(Content) ->
|
|||||||
decode_json(<<>>) -> [];
|
decode_json(<<>>) -> [];
|
||||||
decode_json(<<" ">>) -> [];
|
decode_json(<<" ">>) -> [];
|
||||||
decode_json(<<"\r\n">>) -> [];
|
decode_json(<<"\r\n">>) -> [];
|
||||||
decode_json(Data) -> jiffy:decode(Data, [return_maps]).
|
decode_json(Data) -> misc:json_decode(Data).
|
||||||
|
|
||||||
custom_headers(Server) ->
|
custom_headers(Server) ->
|
||||||
case ejabberd_option:ext_api_headers(Server) of
|
case ejabberd_option:ext_api_headers(Server) of
|
||||||
|
@ -259,7 +259,7 @@ set_room_affiliation(Config) ->
|
|||||||
RequestURL = "http://" ++ ServerHost ++ ":" ++ integer_to_list(WebPort) ++ "/api/set_room_affiliation",
|
RequestURL = "http://" ++ ServerHost ++ ":" ++ integer_to_list(WebPort) ++ "/api/set_room_affiliation",
|
||||||
Headers = [{"X-Admin", "true"}],
|
Headers = [{"X-Admin", "true"}],
|
||||||
ContentType = "application/json",
|
ContentType = "application/json",
|
||||||
Body = jiffy:encode(#{name => RoomName, service => RoomService, jid => jid:encode(PeerJID), affiliation => member}),
|
Body = misc:json_encode(#{name => RoomName, service => RoomService, jid => jid:encode(PeerJID), affiliation => member}),
|
||||||
{ok, {{_, 200, _}, _, _}} = httpc:request(post, {RequestURL, Headers, ContentType, Body}, [], []),
|
{ok, {{_, 200, _}, _, _}} = httpc:request(post, {RequestURL, Headers, ContentType, Body}, [], []),
|
||||||
|
|
||||||
#message{id = _, from = RoomJID, to = MyJID, sub_els = [
|
#message{id = _, from = RoomJID, to = MyJID, sub_els = [
|
||||||
|
Loading…
Reference in New Issue
Block a user