diff --git a/rebar.config b/rebar.config index d4f8eb6..896a514 100644 --- a/rebar.config +++ b/rebar.config @@ -1,8 +1,17 @@ {erl_opts, [debug_info]}. {deps, [ + {nova, {git, "git@github.com:novaframework/nova.git", {tag, "v0.12.1"}}}, {jesse, "1.8.1"} ]}. +{dialyzer, [ + {plt_extra_apps, [ + nova, + cowboy, + ranch + ]} +]}. + {project_plugins, [ {erlfmt, "~>1.3"} ]}. diff --git a/rebar.lock b/rebar.lock index 31c5a95..59eeed2 100644 --- a/rebar.lock +++ b/rebar.lock @@ -1,8 +1,33 @@ {"1.2.0", -[{<<"jesse">>,{pkg,<<"jesse">>,<<"1.8.1">>},0}]}. +[{<<"cowboy">>,{pkg,<<"cowboy">>,<<"2.13.0">>},1}, + {<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.16.0">>},2}, + {<<"erlydtl">>,{pkg,<<"erlydtl">>,<<"0.14.0">>},1}, + {<<"jesse">>,{pkg,<<"jesse">>,<<"1.8.1">>},0}, + {<<"jhn_stdlib">>,{pkg,<<"jhn_stdlib">>,<<"5.3.3">>},1}, + {<<"nova">>, + {git,"git@github.com:novaframework/nova.git", + {ref,"c6e1f0c8d086b84809b8a0bb040d8372e8bd42eb"}}, + 0}, + {<<"ranch">>,{pkg,<<"ranch">>,<<"2.2.0">>},2}, + {<<"routing_tree">>,{pkg,<<"routing_tree">>,<<"1.0.11">>},1}, + {<<"thoas">>,{pkg,<<"thoas">>,<<"1.2.1">>},1}]}. [ {pkg_hash,[ - {<<"jesse">>, <<"C9E3670C7EE40F719734E3BC716578143AABA93FC7525A02A7D5CB300B3AD71E">>}]}, + {<<"cowboy">>, <<"09D770DD5F6A22CC60C071F432CD7CB87776164527F205C5A6B0F24FF6B38990">>}, + {<<"cowlib">>, <<"54592074EBBBB92EE4746C8A8846E5605052F29309D3A873468D76CDF932076F">>}, + {<<"erlydtl">>, <<"964B2DC84F8C17ACFAA69C59BA129EF26AC45D2BA898C3C6AD9B5BDC8BA13CED">>}, + {<<"jesse">>, <<"C9E3670C7EE40F719734E3BC716578143AABA93FC7525A02A7D5CB300B3AD71E">>}, + {<<"jhn_stdlib">>, <<"3E50C560334A85EE5B6C645D2E1BCD35E7BE667E5FCB62AA364F00737C2ADC61">>}, + {<<"ranch">>, <<"25528F82BC8D7C6152C57666CA99EC716510FE0925CB188172F41CE93117B1B0">>}, + {<<"routing_tree">>, <<"72ACEF2095F0EC804F7AFD07EF781DDE5009425A1CA0A28F0706B1DB334A4812">>}, + {<<"thoas">>, <<"19A25F31177A17E74004D4840F66D791D4298C5738790FA2CC73731EB911F195">>}]}, {pkg_hash_ext,[ - {<<"jesse">>, <<"0EDED3F18623FDA2F25989804A06CF518B4ACF2E9365B18C8E8C013D7E3C906F">>}]} + {<<"cowboy">>, <<"E724D3A70995025D654C1992C7B11DBFEA95205C047D86FF9BF1CDA92DDC5614">>}, + {<<"cowlib">>, <<"7F478D80D66B747344F0EA7708C187645CFCC08B11AA424632F78E25BF05DB51">>}, + {<<"erlydtl">>, <<"D80EC044CD8F58809C19D29AC5605BE09E955040911B644505E31E9DD8143431">>}, + {<<"jesse">>, <<"0EDED3F18623FDA2F25989804A06CF518B4ACF2E9365B18C8E8C013D7E3C906F">>}, + {<<"jhn_stdlib">>, <<"2CB184C505397B62A842AB3DE13F21B83ADF62364BD35A572191629E30E0258E">>}, + {<<"ranch">>, <<"FA0B99A1780C80218A4197A59EA8D3BDAE32FBFF7E88527D7D8A4787EFF4F8E7">>}, + {<<"routing_tree">>, <<"85982C7AC502892C5179CD2A591331003BACD2D2A71723640BA7D23F45408E6E">>}, + {<<"thoas">>, <<"E38697EDFFD6E91BD12CEA41B155115282630075C2A727E7A6B2947F5408B86A">>}]} ]. diff --git a/src/nova_json_schemas.app.src b/src/nova_json_schemas.app.src index 129e428..6caa3d2 100644 --- a/src/nova_json_schemas.app.src +++ b/src/nova_json_schemas.app.src @@ -1,6 +1,6 @@ {application, nova_json_schemas, [ - {description, "An OTP library"}, - {vsn, "0.1.0"}, + {description, "Validating JSON with schemas"}, + {vsn, "0.1.1"}, {registered, []}, {applications, [ kernel, diff --git a/src/nova_json_schemas.erl b/src/nova_json_schemas.erl index 44e9cac..ee6923c 100644 --- a/src/nova_json_schemas.erl +++ b/src/nova_json_schemas.erl @@ -38,7 +38,9 @@ load_local_schemas() -> {ok, Req0 :: cowboy_req:req()} | {stop, Req0 :: cowboy_req:req()} | {error, Reason :: term()}. -pre_request(Req = #{extra_state := #{json_schema := SchemaLocation}=Extra, json := JSON}, Options) -> +pre_request( + Req = #{extra_state := #{json_schema := SchemaLocation} = Extra, json := JSON}, Options +) -> JesseOpts = maps:get(jesse_options, Extra, []), %% JSON have already been parsed so we can just continue with the validation case validate_json(SchemaLocation, JSON, JesseOpts) of @@ -75,7 +77,13 @@ pre_request(#{extra_state := #{json_schema := _SchemaLocation}}, _Options) -> {error, body_not_parsed}; pre_request(Req, _Options) -> %% 'json_schema' is not set or 'extra_state' is completly missing. Just continue. - ?LOG_DEBUG("No schema is set for this route so will continue executing"), + HasBody = cowboy_req:has_body(Req), + if + HasBody -> + ?LOG_DEBUG("No schema is set for this route so will continue executing"); + true -> + ok + end, {ok, Req}. %%-------------------------------------------------------------------- @@ -100,8 +108,11 @@ post_request(Req, _Options) -> {Key :: atom(), OptionDescription :: binary()} ]}. plugin_info() -> - {<<"JSON schema plugin">>, <<"0.0.2">>, <<"Niclas Axelsson >, - <<"Validating JSON with schemas">>, [ + {ok, Vsn} = application:get_key(nova_json_schemas, vsn), + {ok, Desc} = application:get_key(nova_json_schemas, description), + + {<<"JSON schema plugin">>, list_to_binary(Vsn), <<"Niclas Axelsson >, + list_to_binary(Desc), [ {render_errors, <<"If this is set, validation-errors is returned to the requester">>} %% Options is specified as {Key, Description} ]}.