Revision 386633333436 () - Diff

Link to this snippet: https://friendpaste.com/57ODiZ9yXxc8MNQUT9GDFt
Embed:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
%% @author author <author@example.com>
%% @copyright YYYY author.

%% @doc Web server for myapp.

-module(myapp_web).
-author('author <author@example.com>').

-export([start/1, stop/0, loop/2]).

%% External API

start(Options) ->
{DocRoot, Options1} = get_option(docroot, Options),
Loop = fun (Req) ->
?MODULE:loop(Req, DocRoot)
end,
mochiweb_http:start([{name, ?MODULE}, {loop, Loop} | Options1]).

stop() ->
mochiweb_http:stop(?MODULE).

loop(Req, DocRoot) ->
"/" ++ Path = Req:get(path),
case Req:get(method) of
Method when Method =:= 'GET'; Method =:= 'HEAD' ->
case Path of
"captcha" ->
{CodeHex, BinPng} = mycaptcha:new(),
Cookie = mochiweb_cookies:cookie("cap", CodeHex, []),

Req:ok({"image/png", [Cookie], [BinPng]});

_ ->
Req:serve_file(Path, DocRoot)
end;
'POST' ->
case Path of
"captcha" ->
CodeHex = Req:get_cookie_value("cap"),
DataIn = Req:parse_post(),
CapCode = proplists:get_value("capCode", DataIn),
Out = case mycaptcha:check(CodeHex, CapCode) of
true ->
%% a cool one
Req:ok({"text/html", [], ["<h1>Cool!</h1>"]});
false ->
%% redirection
Req:respond({302, [{"Location", "/"}, {"Content-Type", "text/html; charset=UTF-8"}],""})
end;


_ ->
Req:not_found()
end;
_ ->
Req:respond({501, [], []})
end.

%% Internal API

get_option(Option, Options) ->
{proplists:get_value(Option, Options), proplists:delete(Option, Options)}.