Packages
nova
0.9.15
0.15.1
0.14.3
0.14.1
0.13.7
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.24
0.9.23
0.9.22
0.9.21
0.9.20
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.11
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.4.4
0.4.3
0.4.2
0.4.1
0.2.2
0.1.0
0.0.1
0.0.0
Nova is a web application framework
Current section
Files
Jump to
Current section
Files
src/nova_security_handler.erl
-module(nova_security_handler).
-behaviour(cowboy_middleware).
-export([
execute/2
]).
execute(Req, Env = #{secure := false}) ->
{ok, Req, Env};
execute(Req = #{host := Host}, Env = #{secure := {Module, Function}}) ->
try Module:Function(Req) of
{true, AuthData} ->
case maps:get(cowboy_handler, Env, undefined) of
nova_ws_handler ->
Args = maps:get(arguments, Env, #{}),
{ok, Req, Env#{arguments => Args#{controller_data => #{auth_data => AuthData}}}};
_ ->
{ok, Req#{auth_data => AuthData}, Env}
end;
true ->
{ok, Req, Env};
{false, Headers} ->
{ok, Req0, _Env0} = nova_router:render_status_page(Host, 401, #{}, Req, Env),
ExistingHeaders = cowboy_req:headers(Req),
FinalHeaders = maps:merge(ExistingHeaders, Headers),
Req1 = cowboy_req:set_resp_headers(FinalHeaders, Req0),
Req2 = cowboy_req:reply(401, Req1),
{stop, Req2};
{redirect, Route} ->
Req0 = cowboy_req:set_resp_headers(#{<<"Location">> => list_to_binary(Route)}, Req),
{stop, Req0};
_ ->
{ok, Req0, _Env0} = nova_router:render_status_page(Host, 401, #{}, Req, Env),
Req1 = cowboy_req:reply(401, Req0),
{stop, Req1}
catch _Class:_Reason ->
{ok, Req0, _Env} = nova_router:render_status_page(Host, 500, #{}, Req, Env),
Req1 = cowboy_req:reply(500, Req0),
{stop, Req1}
end.