n2o_cowboy.erl 1.4 KB

123456789101112131415161718192021222324252627282930313233
  1. -module(n2o_cowboy).
  2. -description('N2O Cowboy Server Bridge to HTTP Server Pages').
  3. -author('Roman Shestakov').
  4. -behaviour(cowboy_http_handler).
  5. -include_lib("n2o/include/wf.hrl").
  6. -export([init/3, handle/2, terminate/3]).
  7. -compile(export_all).
  8. -record(state, {headers, body}).
  9. % Cowboy HTTP Handler
  10. init(_Transport, Req, _Opts) -> {ok, Req, #state{}}.
  11. terminate(_Reason, _Req, _State) -> ok.
  12. handle(Req, State) -> {ok, NewReq} = n2o_document:run(Req), {ok, NewReq, State}.
  13. % Cowboy Bridge Abstraction
  14. params(Req) -> cowboy_req:qs_vals(Req).
  15. form(Req) -> {ok,Params,NewReq} = cowboy_req:body_qs(Req), {Params,NewReq}.
  16. path(Req) -> {Path,_NewReq} = cowboy_req:path(Req), Path.
  17. request_body(Req) -> cowboy_req:body(Req).
  18. headers(Req) -> cowboy_req:headers(Req).
  19. header(Name, Value, Req) -> cowboy_req:set_resp_header(Name, Value, Req).
  20. response(Html,Req) -> cowboy_req:set_resp_body(Html,Req).
  21. reply(StatusCode,Req) -> cowboy_req:reply(StatusCode, Req).
  22. cookies(Req) -> element(1,cowboy_req:cookies(Req)).
  23. cookie(Cookie,Req) -> element(1,cowboy_req:cookie(wf:to_binary(Cookie),Req)).
  24. cookie(Cookie, Value, Req) -> cookie(Cookie,Value,<<"/">>,0,Req).
  25. cookie(Name, Value, Path, TTL, Req) ->
  26. Options = [{path, Path}, {max_age, TTL}],
  27. cowboy_req:set_resp_cookie(Name, Value, Options, Req).
  28. delete_cookie(Cookie,Req) -> cookie(Cookie,<<"">>,<<"/">>,0,Req).
  29. peer(Req) -> {{Ip,Port},Req} = cowboy_req:peer(Req), {Ip,Port}.