%% @author author %% @copyright YYYY author. %% @doc Web server for myapp. -module(myapp_web). -author('author '). -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", [], ["

Cool!

"]}); 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)}.