diff --git a/plugins/emqttd_plugin_demo/src/emqttd_demo_acl.erl b/plugins/emqttd_plugin_demo/src/emqttd_demo_acl.erl new file mode 100644 index 000000000..e92fd9733 --- /dev/null +++ b/plugins/emqttd_plugin_demo/src/emqttd_demo_acl.erl @@ -0,0 +1,51 @@ +%%%----------------------------------------------------------------------------- +%%% @Copyright (C) 2012-2015, Feng Lee +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a copy +%%% of this software and associated documentation files (the "Software"), to deal +%%% in the Software without restriction, including without limitation the rights +%%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +%%% copies of the Software, and to permit persons to whom the Software is +%%% furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in all +%%% copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +%%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +%%% SOFTWARE. +%%%----------------------------------------------------------------------------- +%%% @doc +%%% emqttd demo acl module. +%%% +%%% @end +%%%----------------------------------------------------------------------------- +-module(emqttd_demo_acl). + +-author('feng@emqtt.io'). + +-include_lib("emqttd/include/emqttd.hrl"). + +-behaviour(emqttd_acl). + +-export([check_acl/3, reload_acl/0, description/0]). + +-spec check_acl(User, PubSub, Topic) -> {ok, allow | deny} | ignore | {error, any()} when + User :: mqtt_user(), + PubSub :: publish | subscribe, + Topic :: binary(). +check_acl(_User, _PubSub, _Topic) -> + ignore. + +reload_acl() -> + ok. + +description() -> + "Demo ACL Module". + + + diff --git a/plugins/emqttd_plugin_demo/src/emqttd_demo_auth.erl b/plugins/emqttd_plugin_demo/src/emqttd_demo_auth.erl new file mode 100644 index 000000000..956d2dcf1 --- /dev/null +++ b/plugins/emqttd_plugin_demo/src/emqttd_demo_auth.erl @@ -0,0 +1,41 @@ +%%%----------------------------------------------------------------------------- +%%% @Copyright (C) 2012-2015, Feng Lee +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a copy +%%% of this software and associated documentation files (the "Software"), to deal +%%% in the Software without restriction, including without limitation the rights +%%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +%%% copies of the Software, and to permit persons to whom the Software is +%%% furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in all +%%% copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +%%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +%%% SOFTWARE. +%%%----------------------------------------------------------------------------- +%%% @doc +%%% emqttd demo auth module. +%%% +%%% @end +%%%----------------------------------------------------------------------------- +-module(emqttd_demo_auth). + +-author('feng@emqtt.io'). + +-include_lib("emqttd/include/emqttd.hrl"). + +-behaviour(emqttd_auth). + +%% callbacks... +-export([check_login/2]). + +-spec check_login(mqtt_user(), undefined | binary()) -> true | false | ignore. +check_login(User, Password) -> + true. + diff --git a/plugins/emqttd_plugin_demo/src/emqttd_plugin_demo.app.src b/plugins/emqttd_plugin_demo/src/emqttd_plugin_demo.app.src new file mode 100644 index 000000000..1fd8ce62d --- /dev/null +++ b/plugins/emqttd_plugin_demo/src/emqttd_plugin_demo.app.src @@ -0,0 +1,12 @@ +{application, emqttd_plugin_demo, + [ + {description, ""}, + {vsn, "1"}, + {registered, []}, + {applications, [ + kernel, + stdlib + ]}, + {mod, { emqttd_plugin_demo_app, []}}, + {env, []} + ]}. diff --git a/plugins/emqttd_plugin_demo/src/emqttd_plugin_demo_app.erl b/plugins/emqttd_plugin_demo/src/emqttd_plugin_demo_app.erl new file mode 100644 index 000000000..9042a449a --- /dev/null +++ b/plugins/emqttd_plugin_demo/src/emqttd_plugin_demo_app.erl @@ -0,0 +1,16 @@ +-module(emqttd_plugin_demo_app). + +-behaviour(application). + +%% Application callbacks +-export([start/2, stop/1]). + +%% =================================================================== +%% Application callbacks +%% =================================================================== + +start(_StartType, _StartArgs) -> + emqttd_plugin_demo_sup:start_link(). + +stop(_State) -> + ok. diff --git a/plugins/emqttd_plugin_demo/src/emqttd_plugin_demo_sup.erl b/plugins/emqttd_plugin_demo/src/emqttd_plugin_demo_sup.erl new file mode 100644 index 000000000..65dad7a60 --- /dev/null +++ b/plugins/emqttd_plugin_demo/src/emqttd_plugin_demo_sup.erl @@ -0,0 +1,27 @@ +-module(emqttd_plugin_demo_sup). + +-behaviour(supervisor). + +%% API +-export([start_link/0]). + +%% Supervisor callbacks +-export([init/1]). + +%% Helper macro for declaring children of supervisor +-define(CHILD(I, Type), {I, {I, start_link, []}, permanent, 5000, Type, [I]}). + +%% =================================================================== +%% API functions +%% =================================================================== + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +%% =================================================================== +%% Supervisor callbacks +%% =================================================================== + +init([]) -> + {ok, { {one_for_one, 5, 10}, []} }. +