|
|
@ -37,7 +37,7 @@ |
|
|
|
%%% `elli_middleware' does not add any significant overhead. |
|
|
|
|
|
|
|
-module(elli_middleware). |
|
|
|
-behaviour(elli_handler). |
|
|
|
-behaviour(wsHer). |
|
|
|
-export([init/2, handle/2, handle_event/3]). |
|
|
|
|
|
|
|
%% Macros. |
|
|
@ -51,13 +51,13 @@ |
|
|
|
%% @hidden |
|
|
|
-spec init(Req, Args) -> {ok, standard | handover} when |
|
|
|
Req :: elli:req(), |
|
|
|
Args :: elli_handler:callback_args(). |
|
|
|
Args :: wsHer:callback_args(). |
|
|
|
init(Req, Args) -> |
|
|
|
do_init(Req, callbacks(Args)). |
|
|
|
|
|
|
|
|
|
|
|
%% @hidden |
|
|
|
-spec handle(Req :: elli:req(), Config :: [tuple()]) -> elli_handler:result(). |
|
|
|
-spec handle(Req :: elli:req(), Config :: [tuple()]) -> wsHer:result(). |
|
|
|
handle(CleanReq, Config) -> |
|
|
|
Callbacks = callbacks(Config), |
|
|
|
PreReq = preprocess(CleanReq, Callbacks), |
|
|
@ -67,8 +67,8 @@ handle(CleanReq, Config) -> |
|
|
|
|
|
|
|
%% @hidden |
|
|
|
-spec handle_event(Event, Args, Config) -> ok when |
|
|
|
Event :: elli_handler:event(), |
|
|
|
Args :: elli_handler:callback_args(), |
|
|
|
Event :: wsHer:event(), |
|
|
|
Args :: wsHer:callback_args(), |
|
|
|
Config :: [tuple()]. |
|
|
|
handle_event(elli_startup, Args, Config) -> |
|
|
|
Callbacks = callbacks(Config), |
|
|
@ -84,7 +84,7 @@ handle_event(Event, Args, Config) -> |
|
|
|
|
|
|
|
-spec do_init(Req, Callbacks) -> {ok, standard | handover} when |
|
|
|
Req :: elli:req(), |
|
|
|
Callbacks :: elli_handler:callbacks(). |
|
|
|
Callbacks :: wsHer:callbacks(). |
|
|
|
do_init(_, []) -> |
|
|
|
{ok, standard}; |
|
|
|
do_init(Req, [{Mod, Args} | Mods]) -> |
|
|
@ -97,8 +97,8 @@ do_init(Req, [{Mod, Args} | Mods]) -> |
|
|
|
|
|
|
|
-spec process(Req, Callbacks) -> Result when |
|
|
|
Req :: elli:req(), |
|
|
|
Callbacks :: [Callback :: elli_handler:callback()], |
|
|
|
Result :: elli_handler:result(). |
|
|
|
Callbacks :: [Callback :: wsHer:callback()], |
|
|
|
Result :: wsHer:result(). |
|
|
|
process(_Req, []) -> |
|
|
|
{404, [], <<"Not Found">>}; |
|
|
|
process(Req, [{Mod, Args} | Mods]) -> |
|
|
@ -110,7 +110,7 @@ process(Req, [{Mod, Args} | Mods]) -> |
|
|
|
|
|
|
|
-spec preprocess(Req1, Callbacks) -> Req2 when |
|
|
|
Req1 :: elli:req(), |
|
|
|
Callbacks :: [elli_handler:callback()], |
|
|
|
Callbacks :: [wsHer:callback()], |
|
|
|
Req2 :: elli:req(). |
|
|
|
preprocess(Req, []) -> |
|
|
|
Req; |
|
|
@ -120,9 +120,9 @@ preprocess(Req, [{Mod, Args} | Mods]) -> |
|
|
|
|
|
|
|
-spec postprocess(Req, Res1, Callbacks) -> Res2 when |
|
|
|
Req :: elli:req(), |
|
|
|
Res1 :: elli_handler:result(), |
|
|
|
Callbacks :: [elli_handler:callback()], |
|
|
|
Res2 :: elli_handler:result(). |
|
|
|
Res1 :: wsHer:result(), |
|
|
|
Callbacks :: [wsHer:callback()], |
|
|
|
Res2 :: wsHer:result(). |
|
|
|
postprocess(_Req, Res, []) -> |
|
|
|
Res; |
|
|
|
postprocess(Req, Res, [{Mod, Args} | Mods]) -> |
|
|
@ -131,9 +131,9 @@ postprocess(Req, Res, [{Mod, Args} | Mods]) -> |
|
|
|
|
|
|
|
|
|
|
|
-spec forward_event(Event, Args, Callbacks) -> ok when |
|
|
|
Event :: elli_handler:event(), |
|
|
|
Args :: elli_handler:callback_args(), |
|
|
|
Callbacks :: [elli_handler:callback()]. |
|
|
|
Event :: wsHer:event(), |
|
|
|
Args :: wsHer:callback_args(), |
|
|
|
Callbacks :: [wsHer:callback()]. |
|
|
|
forward_event(Event, Args, Callbacks) -> |
|
|
|
[?IF_NOT_EXPORTED(M, handle_event, 3, ok, |
|
|
|
M:handle_event(Event, Args, XArgs)) |
|
|
@ -146,6 +146,6 @@ forward_event(Event, Args, Callbacks) -> |
|
|
|
%% |
|
|
|
|
|
|
|
-spec callbacks(Config :: [{mod, Callbacks} | tuple()]) -> Callbacks when |
|
|
|
Callbacks :: [elli_handler:callback()]. |
|
|
|
Callbacks :: [wsHer:callback()]. |
|
|
|
callbacks(Config) -> |
|
|
|
proplists:get_value(mods, Config, []). |