Packages
nova
0.9.23
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/plugins/nova_cors_plugin.erl
-module(nova_cors_plugin).
-behaviour(nova_plugin).
-export([
pre_request/2,
post_request/2,
plugin_info/0
]).
%%--------------------------------------------------------------------
%% @doc
%% Pre-request callback
%% @end
%%--------------------------------------------------------------------
-spec pre_request(Req :: cowboy_req:req(), Options :: map()) ->
{ok, Req0 :: cowboy_req:req()}.
pre_request(Req, #{allow_origins := Origins}) ->
ReqWithOptions = add_cors_headers(Req, Origins),
continue(ReqWithOptions).
%%--------------------------------------------------------------------
%% @doc
%% Post-request callback
%% @end
%%--------------------------------------------------------------------
-spec post_request(Req :: cowboy_req:req(), Options :: map()) ->
{ok, Req0 :: cowboy_req:req()}.
post_request(Req, _) ->
{ok, Req}.
%%--------------------------------------------------------------------
%% @doc
%% nova_plugin callback. Returns information about the plugin.
%% @end
%%--------------------------------------------------------------------
-spec plugin_info() -> {Title :: binary(),
Version :: binary(),
Author :: binary(),
Description :: binary(),
Options :: [{Key :: atom(), OptionDescription :: binary()}]}.
plugin_info() ->
{
<<"nova_cors_plugin">>,
<<"0.2.0">>,
<<"Nova team <info@novaframework.org">>,
<<"Add CORS headers to request">>,
[
{
allow_origins,
<<"Specifies which origins to insert into Access-Control-Allow-Origin">>
}
]}.
%%%%%%%%%%%%%%%%%%%%%%
%% Private functions
%%%%%%%%%%%%%%%%%%%%%%
continue(#{method := <<"OPTIONS">>} = Req) ->
Reply = cowboy_req:reply(200, Req),
{stop, Reply};
continue(Req) ->
{ok, Req}.
add_cors_headers(Req, Origins) ->
OriginsReq = cowboy_req:set_resp_header(
<<"Access-Control-Allow-Origin">>, Origins, Req),
HeadersReq = cowboy_req:set_resp_header(
<<"Access-Control-Allow-Headers">>, <<"*">>, OriginsReq),
cowboy_req:set_resp_header(
<<"Access-Control-Allow-Methods">>, <<"*">>, HeadersReq).