diff --git a/apps/emqx_gateway_jt808/src/emqx_jt808_auth.erl b/apps/emqx_gateway_jt808/src/emqx_jt808_auth.erl index aeba537e8..0e5949ba7 100644 --- a/apps/emqx_gateway_jt808/src/emqx_jt808_auth.erl +++ b/apps/emqx_gateway_jt808/src/emqx_jt808_auth.erl @@ -16,7 +16,7 @@ init(#{allow_anonymous := true}) -> #auth{registry = undefined, authentication = undefined, allow_anonymous = true}; -init(#{registry := Reg, authentication := Auth, allow_anonymous := Anonymous}) -> +init(#{allow_anonymous := Anonymous = false, registry := Reg, authentication := Auth}) -> #auth{registry = Reg, authentication = Auth, allow_anonymous = Anonymous}. register(_RegFrame, #auth{registry = undefined, allow_anonymous = true}) -> diff --git a/apps/emqx_gateway_jt808/src/emqx_jt808_channel.erl b/apps/emqx_gateway_jt808/src/emqx_jt808_channel.erl index 052065ef5..12776a261 100644 --- a/apps/emqx_gateway_jt808/src/emqx_jt808_channel.erl +++ b/apps/emqx_gateway_jt808/src/emqx_jt808_channel.erl @@ -153,7 +153,7 @@ init( Options = #{ ctx := Ctx, message_queue_len := MessageQueueLen, - proto := ProtoConf + proto := #{auth := Auth} = ProtoConf } ) -> % TODO: init rsa_key from user input @@ -193,7 +193,7 @@ init( % TODO: init rsa_key from user input dn_topic = maps:get(dn_topic, ProtoConf, ?DEFAULT_DN_TOPIC), up_topic = maps:get(up_topic, ProtoConf, ?DEFAULT_UP_TOPIC), - auth = emqx_jt808_auth:init(ProtoConf), + auth = emqx_jt808_auth:init(Auth), inflight = emqx_inflight:new(128), mqueue = queue:new(), max_mqueue_len = MessageQueueLen, diff --git a/apps/emqx_gateway_jt808/src/emqx_jt808_schema.erl b/apps/emqx_gateway_jt808/src/emqx_jt808_schema.erl index 35d8f962d..70e9753bd 100644 --- a/apps/emqx_gateway_jt808/src/emqx_jt808_schema.erl +++ b/apps/emqx_gateway_jt808/src/emqx_jt808_schema.erl @@ -49,24 +49,38 @@ fields(jt808_frame) -> ]; fields(jt808_proto) -> [ - {allow_anonymous, fun allow_anonymous/1}, - {registry, fun registry_url/1}, - {authentication, fun authentication_url/1}, + {auth, + sc( + hoconsc:union([ + ref(anonymous_true), ref(anonymous_false) + ]) + )}, {up_topic, fun up_topic/1}, {dn_topic, fun dn_topic/1} + ]; +fields(anonymous_true) -> + [ + {allow_anonymous, + sc(hoconsc:union([true]), #{desc => ?DESC(allow_anonymous), required => true})} + ]; +fields(anonymous_false) -> + [ + {allow_anonymous, + sc(hoconsc:union([false]), #{desc => ?DESC(allow_anonymous), required => true})}, + {registry, fun registry_url/1}, + {authentication, fun authentication_url/1} ]. -jt808_frame_max_length(type) -> non_neg_integer(); -jt808_frame_max_length(desc) -> ?DESC(?FUNCTION_NAME); -jt808_frame_max_length(default) -> 8192; -jt808_frame_max_length(required) -> false; -jt808_frame_max_length(_) -> undefined. - -allow_anonymous(type) -> boolean(); -allow_anonymous(desc) -> ?DESC(?FUNCTION_NAME); -allow_anonymous(default) -> true; -allow_anonymous(required) -> false; -allow_anonymous(_) -> undefined. +jt808_frame_max_length(type) -> + non_neg_integer(); +jt808_frame_max_length(desc) -> + ?DESC(?FUNCTION_NAME); +jt808_frame_max_length(default) -> + 8192; +jt808_frame_max_length(required) -> + false; +jt808_frame_max_length(_) -> + undefined. registry_url(type) -> binary(); registry_url(desc) -> ?DESC(?FUNCTION_NAME); diff --git a/apps/emqx_gateway_jt808/test/emqx_jt808_SUITE.erl b/apps/emqx_gateway_jt808/test/emqx_jt808_SUITE.erl index d9200bc9e..8644fe66f 100644 --- a/apps/emqx_gateway_jt808/test/emqx_jt808_SUITE.erl +++ b/apps/emqx_gateway_jt808/test/emqx_jt808_SUITE.erl @@ -38,43 +38,35 @@ %% <<"jt808/000123456789/000123456789/dn">> -define(JT808_DN_TOPIC, <>). --define(CONF_DEFAULT, << - "\n" - "gateway.jt808 {\n" - " listeners.tcp.default {\n" - " bind = " - ?PORT_STR - "\n" - " }\n" - " proto {\n" - " allow_anonymous = false\n" - " registry = " - "\"" - ?PROTO_REG_SERVER_HOST - ?PROTO_REG_REGISTRY_PATH - "\"\n" - " authentication = " - "\"" - ?PROTO_REG_SERVER_HOST - ?PROTO_REG_AUTH_PATH - "\"\n" - " }\n" - "}\n" ->>). +%% erlfmt-ignore +-define(CONF_DEFAULT, <<" +gateway.jt808 { + listeners.tcp.default { + bind = ", ?PORT_STR, " + } + proto { + auth { + allow_anonymous = false + registry = \"", ?PROTO_REG_SERVER_HOST, ?PROTO_REG_REGISTRY_PATH, "\" + authentication = \"", ?PROTO_REG_SERVER_HOST, ?PROTO_REG_AUTH_PATH, "\" + } + } +} +">>). --define(CONF_ANONYMOUS, << - "\n" - "gateway.jt808 {\n" - " listeners.tcp.default {\n" - " bind = " - ?PORT_STR - "\n" - " }\n" - " proto {\n" - " allow_anonymous = true\n" - " }\n" - "}\n" ->>). +%% erlfmt-ignore +-define(CONF_ANONYMOUS, <<" +gateway.jt808 { + listeners.tcp.default { + bind = ", ?PORT_STR, " + } + proto { + auth { + allow_anonymous = true + } + } +} +">>). all() -> emqx_common_test_helpers:all(?MODULE).