169 lines
5.8 KiB
Erlang
169 lines
5.8 KiB
Erlang
%%-*- mode: erlang -*-
|
|
%% emqx_auth_http config mapping
|
|
{mapping, "auth.http.auth_req", "emqx_auth_http.auth_req", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "auth.http.auth_req.method", "emqx_auth_http.auth_req", [
|
|
{default, post},
|
|
{datatype, {enum, [post, get]}}
|
|
]}.
|
|
|
|
{mapping, "auth.http.auth_req.content_type", "emqx_auth_http.auth_req", [
|
|
{default, 'x-www-form-urlencoded'},
|
|
{datatype, {enum, ['json', 'x-www-form-urlencoded']}}
|
|
]}.
|
|
|
|
{mapping, "auth.http.auth_req.params", "emqx_auth_http.auth_req", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{translation, "emqx_auth_http.auth_req", fun(Conf) ->
|
|
case cuttlefish:conf_get("auth.http.auth_req", Conf) of
|
|
undefined -> cuttlefish:unset();
|
|
Url ->
|
|
Params = cuttlefish:conf_get("auth.http.auth_req.params", Conf),
|
|
[{url, Url},
|
|
{method, cuttlefish:conf_get("auth.http.auth_req.method", Conf)},
|
|
{content_type, list_to_binary("application/" ++ atom_to_list(cuttlefish:conf_get("auth.http.auth_req.content_type", Conf)))},
|
|
{params, [list_to_tuple(string:tokens(S, "=")) || S <- string:tokens(Params, ",")]}]
|
|
end
|
|
end}.
|
|
|
|
{mapping, "auth.http.super_req", "emqx_auth_http.super_req", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "auth.http.super_req.method", "emqx_auth_http.super_req", [
|
|
{default, post},
|
|
{datatype, {enum, [post, get]}}
|
|
]}.
|
|
|
|
{mapping, "auth.http.super_req.content_type", "emqx_auth_http.super_req", [
|
|
{default, 'x-www-form-urlencoded'},
|
|
{datatype, {enum, ['json', 'x-www-form-urlencoded']}}
|
|
]}.
|
|
|
|
{mapping, "auth.http.super_req.params", "emqx_auth_http.super_req", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{translation, "emqx_auth_http.super_req", fun(Conf) ->
|
|
case cuttlefish:conf_get("auth.http.super_req", Conf, undefined) of
|
|
undefined -> cuttlefish:unset();
|
|
Url -> Params = cuttlefish:conf_get("auth.http.super_req.params", Conf),
|
|
[{url, Url}, {method, cuttlefish:conf_get("auth.http.super_req.method", Conf)},
|
|
{content_type, list_to_binary("application/" ++ atom_to_list(cuttlefish:conf_get("auth.http.super_req.content_type", Conf)))},
|
|
{params, [list_to_tuple(string:tokens(S, "=")) || S <- string:tokens(Params, ",")]}]
|
|
end
|
|
end}.
|
|
|
|
{mapping, "auth.http.acl_req", "emqx_auth_http.acl_req", [
|
|
{default, undefined},
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "auth.http.acl_req.method", "emqx_auth_http.acl_req", [
|
|
{default, post},
|
|
{datatype, {enum, [post, get]}}
|
|
]}.
|
|
|
|
{mapping, "auth.http.acl_req.content_type", "emqx_auth_http.acl_req", [
|
|
{default, 'x-www-form-urlencoded'},
|
|
{datatype, {enum, ['json', 'x-www-form-urlencoded']}}
|
|
]}.
|
|
|
|
{mapping, "auth.http.acl_req.params", "emqx_auth_http.acl_req", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{translation, "emqx_auth_http.acl_req", fun(Conf) ->
|
|
case cuttlefish:conf_get("auth.http.acl_req", Conf, undefined) of
|
|
undefined -> cuttlefish:unset();
|
|
Url -> Params = cuttlefish:conf_get("auth.http.acl_req.params", Conf),
|
|
[{url, Url},
|
|
{method, cuttlefish:conf_get("auth.http.acl_req.method", Conf)},
|
|
{content_type, list_to_binary("application/" ++ atom_to_list(cuttlefish:conf_get("auth.http.acl_req.content_type", Conf)))},
|
|
{params, [list_to_tuple(string:tokens(S, "=")) || S <- string:tokens(Params, ",")]}]
|
|
end
|
|
end}.
|
|
|
|
{mapping, "auth.http.request.timeout", "emqx_auth_http.request_timeout", [
|
|
{default, "5s"},
|
|
{datatype, [integer, {duration, ms}]}
|
|
]}.
|
|
|
|
{mapping, "auth.http.pool_size", "emqx_auth_http.pool_opts", [
|
|
{default, 8},
|
|
{datatype, integer}
|
|
]}.
|
|
|
|
{mapping, "auth.http.request.connect_timeout", "emqx_auth_http.pool_opts", [
|
|
{default, "5s"},
|
|
{datatype, [integer, {duration, ms}]}
|
|
]}.
|
|
|
|
{mapping, "auth.http.ssl.cacertfile", "emqx_auth_http.pool_opts", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "auth.http.ssl.certfile", "emqx_auth_http.pool_opts", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "auth.http.ssl.keyfile", "emqx_auth_http.pool_opts", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "auth.http.request.retry_times", "emqx_auth_http.pool_opts", [
|
|
{default, 5},
|
|
{datatype, integer}
|
|
]}.
|
|
|
|
{mapping, "auth.http.request.retry_interval", "emqx_auth_http.pool_opts", [
|
|
{default, "1s"},
|
|
{datatype, {duration, ms}}
|
|
]}.
|
|
|
|
{mapping, "auth.http.request.retry_backoff", "emqx_auth_http.pool_opts", [
|
|
{default, 2.0},
|
|
{datatype, float}
|
|
]}.
|
|
|
|
{translation, "emqx_auth_http.pool_opts", fun(Conf) ->
|
|
Filter = fun(L) -> [{K, V} || {K, V} <- L, V =/= undefined] end,
|
|
InfinityFun = fun(0) -> infinity;
|
|
(Duration) -> Duration
|
|
end,
|
|
SslOpts = Filter([{cacertfile, cuttlefish:conf_get("auth.http.ssl.cacertfile", Conf, undefined)},
|
|
{certfile, cuttlefish:conf_get("auth.http.ssl.certfile", Conf, undefined)},
|
|
{keyfile, cuttlefish:conf_get("auth.http.ssl.keyfile", Conf, undefined)}]),
|
|
Opts = [{pool_size, cuttlefish:conf_get("auth.http.pool_size", Conf)},
|
|
{connect_timeout, InfinityFun(cuttlefish:conf_get("auth.http.request.connect_timeout", Conf))},
|
|
{retry, cuttlefish:conf_get("auth.http.request.retry_times", Conf)},
|
|
{retry_timeout, cuttlefish:conf_get("auth.http.request.retry_interval", Conf)}],
|
|
case SslOpts of
|
|
[] -> Filter(Opts);
|
|
_ ->
|
|
TlsVers = ['tlsv1.2','tlsv1.1',tlsv1],
|
|
DefaultOpts = [{versions, TlsVers},
|
|
{ciphers, lists:foldl(
|
|
fun(TlsVer, Ciphers) ->
|
|
Ciphers ++ ssl:cipher_suites(all, TlsVer)
|
|
end, [], TlsVers)}],
|
|
Filter([{ssl, DefaultOpts ++ SslOpts} | Opts])
|
|
end
|
|
end}.
|
|
|
|
|
|
{mapping, "auth.http.header.$field", "emqx_auth_http.headers", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{translation, "emqx_auth_http.headers", fun(Conf) ->
|
|
lists:map(
|
|
fun({["auth", "http", "header", Field], Value}) ->
|
|
{Field, Value}
|
|
end,
|
|
cuttlefish_variable:filter_by_prefix("auth.http.header", Conf))
|
|
end}. |