emqx/apps/emqx_coap/priv/emqx_coap.schema

91 lines
2.7 KiB
Erlang

%%-*- mode: erlang -*-
%% emqx_coap config mapping
{mapping, "coap.bind.udp.$number", "emqx_coap.bind_udp", [
{datatype, ip},
{default, "0.0.0.0:5683"}
]}.
{mapping, "coap.enable_stats", "emqx_coap.enable_stats", [
{datatype, flag}
]}.
{mapping, "coap.bind.dtls.$number", "emqx_coap.bind_dtls", [
{datatype, ip},
{default, "0.0.0.0:5684"}
]}.
{mapping, "coap.dtls.keyfile", "emqx_coap.dtls_opts", [
{datatype, string}
]}.
{mapping, "coap.dtls.certfile", "emqx_coap.dtls_opts", [
{datatype, string}
]}.
{mapping, "coap.dtls.verify", "emqx_coap.dtls_opts", [
{default, verify_none},
{datatype, {enum, [verify_none, verify_peer]}}
]}.
{mapping, "coap.dtls.cacertfile", "emqx_coap.dtls_opts", [
{datatype, string}
]}.
{mapping, "coap.dtls.fail_if_no_peer_cert", "emqx_coap.dtls_opts", [
{datatype, {enum, [true, false]}}
]}.
{mapping, "coap.dtls.ciphers", "emqx_coap.dtls_opts", [
{datatype, string}
]}.
{translation, "emqx_coap.bind_udp", fun(Conf) ->
Options = cuttlefish_variable:filter_by_prefix("coap.bind.udp", Conf),
lists:map(fun({_, Bind}) ->
{Ip, Port} = cuttlefish_datatypes:from_string(Bind, ip),
Opts = case inet:parse_address(Ip) of
{ok, {_,_,_,_} = Address} ->
[inet, {ip, Address}];
{ok, {_,_,_,_,_,_,_,_} = Address} ->
[inet6, {ip, Address}]
end,
{Port, Opts}
end, Options)
end}.
{translation, "emqx_coap.bind_dtls", fun(Conf) ->
Options = cuttlefish_variable:filter_by_prefix("coap.bind.dtls", Conf),
lists:map(fun({_, Bind}) ->
{Ip, Port} = cuttlefish_datatypes:from_string(Bind, ip),
Opts = case inet:parse_address(Ip) of
{ok, {_,_,_,_} = Address} ->
[inet, {ip, Address}];
{ok, {_,_,_,_,_,_,_,_} = Address} ->
[inet6, {ip, Address}]
end,
{Port, Opts}
end, Options)
end}.
{translation, "emqx_coap.dtls_opts", fun(Conf) ->
Filter = fun(Opts) -> [{K, V} || {K, V} <- Opts, V =/= undefined] end,
%% Ciphers
SplitFun = fun(undefined) -> undefined; (S) -> string:tokens(S, ",") end,
Ciphers =
case cuttlefish:conf_get("coap.dtls.ciphers", Conf, undefined) of
undefined ->
lists:append([ssl:cipher_suites(all, V, openssl) || V <- ['dtlsv1.2', 'dtlsv1']]);
C ->
SplitFun(C)
end,
Filter([{verify, cuttlefish:conf_get("coap.dtls.verify", Conf, undefined)},
{keyfile, cuttlefish:conf_get("coap.dtls.keyfile", Conf, undefined)},
{certfile, cuttlefish:conf_get("coap.dtls.certfile", Conf, undefined)},
{cacertfile, cuttlefish:conf_get("coap.dtls.cacertfile", Conf, undefined)},
{fail_if_no_peer_cert, cuttlefish:conf_get("coap.dtls.fail_if_no_peer_cert", Conf, undefined)},
{ciphers, Ciphers}])
end}.