emqx/apps/emqx_stomp/priv/emqx_stomp.schema

150 lines
5.0 KiB
Erlang

%%-*- mode: erlang -*-
%% emqx_stomp config mapping
{mapping, "stomp.listener.port", "emqx_stomp.listener", [
{default, 61613},
{datatype, [integer, ip]}
]}.
{mapping, "stomp.listener.acceptors", "emqx_stomp.listener", [
{default, 4},
{datatype, integer}
]}.
{mapping, "stomp.listener.max_connections", "emqx_stomp.listener", [
{default, 512},
{datatype, integer}
]}.
{mapping, "stomp.listener.ssl", "emqx_stomp.listener", [
{datatype, flag},
{default, off}
]}.
{mapping, "stomp.listener.tls_versions", "emqx_stomp.listener", [
{datatype, string}
]}.
{mapping, "stomp.listener.handshake_timeout", "emqx_stomp.listener", [
{default, "15s"},
{datatype, {duration, ms}}
]}.
{mapping, "stomp.listener.dhfile", "emqx_stomp.listener", [
{datatype, string}
]}.
{mapping, "stomp.listener.keyfile", "emqx_stomp.listener", [
{datatype, string}
]}.
{mapping, "stomp.listener.certfile", "emqx_stomp.listener", [
{datatype, string}
]}.
{mapping, "stomp.listener.cacertfile", "emqx_stomp.listener", [
{datatype, string}
]}.
{mapping, "stomp.listener.verify", "emqx_stomp.listener", [
{datatype, string}
]}.
{mapping, "stomp.listener.fail_if_no_peer_cert", "emqx_stomp.listener", [
{datatype, {enum, [true, false]}}
]}.
{mapping, "stomp.listener.ciphers", "emqx_stomp.listener", [
{datatype, string}
]}.
{mapping, "stomp.listener.secure_renegotiate", "emqx_stomp.listener", [
{datatype, flag}
]}.
{mapping, "stomp.listener.reuse_sessions", "emqx_stomp.listener", [
{default, on},
{datatype, flag}
]}.
{mapping, "stomp.listener.honor_cipher_order", "emqx_stomp.listener", [
{datatype, flag}
]}.
{translation, "emqx_stomp.listener", fun(Conf) ->
Port = cuttlefish:conf_get("stomp.listener.port", Conf),
Acceptors = cuttlefish:conf_get("stomp.listener.acceptors", Conf),
MaxConnections = cuttlefish:conf_get("stomp.listener.max_connections", Conf),
Filter = fun(Opts) -> [{K, V} || {K, V} <- Opts, V =/= undefined] 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))},
{handshake_timeout, cuttlefish:conf_get(Prefix ++ ".handshake_timeout", 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,
Opts = [{acceptors, Acceptors}, {max_connections, MaxConnections}],
{Port, case cuttlefish:conf_get("stomp.listener.ssl", Conf) of
true ->
[{sslopts, SslOpts("stomp.listener")} | Opts];
false ->
Opts
end}
end}.
{mapping, "stomp.default_user.login", "emqx_stomp.default_user", [
{default, "guest"},
{datatype, string}
]}.
{mapping, "stomp.default_user.passcode", "emqx_stomp.default_user", [
{default, "guest"},
{datatype, string}
]}.
{translation, "emqx_stomp.default_user", fun(Conf) ->
Login = cuttlefish:conf_get("stomp.default_user.login", Conf),
Passcode = cuttlefish:conf_get("stomp.default_user.passcode", Conf),
[{login, Login}, {passcode, Passcode}]
end}.
{mapping, "stomp.allow_anonymous", "emqx_stomp.allow_anonymous", [
{default, true},
{datatype, {enum, [true, false]}}
]}.
{mapping, "stomp.frame.max_headers", "emqx_stomp.frame", [
{default, 10},
{datatype, integer}
]}.
{mapping, "stomp.frame.max_header_length", "emqx_stomp.frame", [
{default, 1024},
{datatype, integer}
]}.
{mapping, "stomp.frame.max_body_length", "emqx_stomp.frame", [
{default, 8192},
{datatype, integer}
]}.
{translation, "emqx_stomp.frame", fun(Conf) ->
MaxHeaders = cuttlefish:conf_get("stomp.frame.max_headers", Conf),
MaxHeaderLength = cuttlefish:conf_get("stomp.frame.max_header_length", Conf),
MaxBodyLength = cuttlefish:conf_get("stomp.frame.max_body_length", Conf),
[{max_headers, MaxHeaders}, {max_header_length, MaxHeaderLength}, {max_body_length, MaxBodyLength}]
end}.