emqx/apps/emqx_dashboard/priv/emqx_dashboard.schema

152 lines
5.2 KiB
Erlang

%%-*- mode: erlang -*-
%% emqx_dashboard config mapping
{mapping, "dashboard.default_user.login", "emqx_dashboard.default_user_username", [
{datatype, string}
]}.
{mapping, "dashboard.default_user.password", "emqx_dashboard.default_user_passwd", [
{datatype, string}
]}.
{mapping, "dashboard.listener.http", "emqx_dashboard.listeners", [
{datatype, integer}
]}.
{mapping, "dashboard.listener.http.acceptors", "emqx_dashboard.listeners", [
{default, 4},
{datatype, integer}
]}.
{mapping, "dashboard.listener.http.max_clients", "emqx_dashboard.listeners", [
{default, 512},
{datatype, integer}
]}.
{mapping, "dashboard.listener.http.access.$id", "emqx_dashboard.listeners", [
{datatype, string}
]}.
{mapping, "dashboard.listener.http.inet6", "emqx_dashboard.listeners", [
{default, false},
{datatype, {enum, [true, false]}}
]}.
{mapping, "dashboard.listener.http.ipv6_v6only", "emqx_dashboard.listeners", [
{default, false},
{datatype, {enum, [true, false]}}
]}.
{mapping, "dashboard.listener.https", "emqx_dashboard.listeners", [
{datatype, integer}
]}.
{mapping, "dashboard.listener.https.acceptors", "emqx_dashboard.listeners", [
{default, 8},
{datatype, integer}
]}.
{mapping, "dashboard.listener.https.max_clients", "emqx_dashboard.listeners", [
{default, 64},
{datatype, integer}
]}.
{mapping, "dashboard.listener.https.inet6", "emqx_dashboard.listeners", [
{default, false},
{datatype, {enum, [true, false]}}
]}.
{mapping, "dashboard.listener.https.ipv6_v6only", "emqx_dashboard.listeners", [
{default, false},
{datatype, {enum, [true, false]}}
]}.
{mapping, "dashboard.listener.https.tls_versions", "emqx_dashboard.listeners", [
{datatype, string}
]}.
{mapping, "dashboard.listener.https.dhfile", "emqx_dashboard.listeners", [
{datatype, string}
]}.
{mapping, "dashboard.listener.https.keyfile", "emqx_dashboard.listeners", [
{datatype, string}
]}.
{mapping, "dashboard.listener.https.certfile", "emqx_dashboard.listeners", [
{datatype, string}
]}.
{mapping, "dashboard.listener.https.cacertfile", "emqx_dashboard.listeners", [
{datatype, string}
]}.
{mapping, "dashboard.listener.https.verify", "emqx_dashboard.listeners", [
{datatype, string}
]}.
{mapping, "dashboard.listener.https.fail_if_no_peer_cert", "emqx_dashboard.listeners", [
{datatype, {enum, [true, false]}}
]}.
{mapping, "dashboard.listener.https.ciphers", "emqx_dashboard.listeners", [
{datatype, string}
]}.
{mapping, "dashboard.listener.https.secure_renegotiate", "emqx_dashboard.listeners", [
{datatype, flag}
]}.
{mapping, "dashboard.listener.https.reuse_sessions", "emqx_dashboard.listeners", [
{default, on},
{datatype, flag}
]}.
{mapping, "dashboard.listener.https.honor_cipher_order", "emqx_dashboard.listeners", [
{datatype, flag}
]}.
{translation, "emqx_dashboard.listeners", fun(Conf) ->
Filter = fun(Opts) -> [{K, V} || {K, V} <- Opts, V =/= undefined] end,
LisOpts = fun(Prefix) ->
Filter([{num_acceptors, cuttlefish:conf_get(Prefix ++ ".acceptors", Conf)},
{max_connections, cuttlefish:conf_get(Prefix ++ ".max_clients", Conf)},
{inet6, cuttlefish:conf_get(Prefix ++ ".inet6", Conf)},
{ipv6_v6only, cuttlefish:conf_get(Prefix ++ ".ipv6_v6only", Conf)}])
end,
SplitFun = fun(undefined) -> undefined; (S) -> string:tokens(S, ",") end,
SslOpts = fun(Prefix) ->
Versions = case SplitFun(cuttlefish:conf_get(Prefix ++ ".tls_versions", Conf, undefined)) of
undefined -> undefined;
L -> [list_to_atom(V) || V <- L]
end,
Filter([{versions, Versions},
{ciphers, SplitFun(cuttlefish:conf_get(Prefix ++ ".ciphers", Conf, undefined))},
{dhfile, cuttlefish:conf_get(Prefix ++ ".dhfile", Conf, undefined)},
{keyfile, cuttlefish:conf_get(Prefix ++ ".keyfile", Conf, undefined)},
{certfile, cuttlefish:conf_get(Prefix ++ ".certfile", Conf, undefined)},
{cacertfile, cuttlefish:conf_get(Prefix ++ ".cacertfile", Conf, undefined)},
{verify, cuttlefish:conf_get(Prefix ++ ".verify", Conf, undefined)},
{fail_if_no_peer_cert, cuttlefish:conf_get(Prefix ++ ".fail_if_no_peer_cert", Conf, undefined)},
{secure_renegotiate, cuttlefish:conf_get(Prefix ++ ".secure_renegotiate", Conf, undefined)},
{reuse_sessions, cuttlefish:conf_get(Prefix ++ ".reuse_sessions", Conf, undefined)},
{honor_cipher_order, cuttlefish:conf_get(Prefix ++ ".honor_cipher_order", Conf, undefined)}])
end,
lists:append(
lists:map(
fun(Proto) ->
Prefix = "dashboard.listener." ++ atom_to_list(Proto),
case cuttlefish:conf_get(Prefix, Conf, undefined) of
undefined -> [];
Port ->
[{Proto, Port, case Proto of
http -> LisOpts(Prefix);
https -> LisOpts(Prefix) ++ SslOpts(Prefix)
end}]
end
end, [http, https]))
end}.