0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 20:30:23 +00:00

Add an example with custom middleware

This commit is contained in:
Adam Cammack 2013-02-09 04:04:49 -06:00
parent 26935cbfb0
commit 09f1a8d55b
12 changed files with 157 additions and 0 deletions

View file

@ -0,0 +1,29 @@
%% Feel free to use, reuse and abuse the code in this file.
-module(markdown_converter).
-behaviour(cowboy_middleware).
-export([execute/2]).
execute(Req, Env) ->
{[Path], Req1} = cowboy_req:path_info(Req),
case filename:extension(Path) of
<<".html">> -> maybe_generate_markdown(resource_path(Path));
_Ext -> ok
end,
{ok, Req1, Env}.
maybe_generate_markdown(Path) ->
ModifiedAt = filelib:last_modified(source_path(Path)),
GeneratedAt = filelib:last_modified(Path),
case ModifiedAt > GeneratedAt of
true -> erlmarkdown:conv_file(source_path(Path), Path);
false -> ok
end.
resource_path(Path) ->
{ok, Cwd} = file:get_cwd(),
filename:join([Cwd, "priv", Path]).
source_path(Path) ->
<< (filename:rootname(Path))/binary, ".md" >>.

View file

@ -0,0 +1,15 @@
%% Feel free to use, reuse and abuse the code in this file.
{application, markdown_middleware, [
{description, "Cowboy static file handler example with middleware component."},
{vsn, "1"},
{modules, []},
{registered, []},
{applications, [
kernel,
stdlib,
cowboy
]},
{mod, {markdown_middleware_app, []}},
{env, []}
]}.

View file

@ -0,0 +1,14 @@
%% Feel free to use, reuse and abuse the code in this file.
-module(markdown_middleware).
%% API.
-export([start/0]).
%% API.
start() ->
ok = application:start(crypto),
ok = application:start(ranch),
ok = application:start(cowboy),
ok = application:start(markdown_middleware).

View file

@ -0,0 +1,29 @@
%% Feel free to use, reuse and abuse the code in this file.
%% @private
-module(markdown_middleware_app).
-behaviour(application).
%% API.
-export([start/2]).
-export([stop/1]).
%% API.
start(_Type, _Args) ->
Dispatch = cowboy_router:compile([
{'_', [
{"/[...]", cowboy_static, [
{directory, {priv_dir, markdown_middleware, []}},
{mimetypes, {fun mimetypes:path_to_mimes/2, default}}
]}
]}
]),
{ok, _} = cowboy:start_http(http, 100, [{port, 8080}], [
{env, [{dispatch, Dispatch}]},
{middlewares, [cowboy_router, markdown_converter, cowboy_handler]}
]),
markdown_middleware_sup:start_link().
stop(_State) ->
ok.

View file

@ -0,0 +1,23 @@
%% Feel free to use, reuse and abuse the code in this file.
%% @private
-module(markdown_middleware_sup).
-behaviour(supervisor).
%% API.
-export([start_link/0]).
%% supervisor.
-export([init/1]).
%% API.
-spec start_link() -> {ok, pid()}.
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
%% supervisor.
init([]) ->
Procs = [],
{ok, {{one_for_one, 10, 10}, Procs}}.