Current section
Files
Jump to
Current section
Files
src/cosepo@directive.erl
-module(cosepo@directive).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([get_name/1, get_value/1, new_directive/2]).
-export_type([directive/0]).
-opaque directive() :: {directive, binary(), list(binary())}.
-spec get_name(directive()) -> binary().
get_name(Directive) ->
erlang:element(2, Directive).
-spec get_value(directive()) -> list(binary()).
get_value(Directive) ->
erlang:element(3, Directive).
-spec new_directive(binary(), list(binary())) -> {ok, directive()} |
{error, binary()}.
new_directive(Name, Value) ->
case gleam@list:find(
[<<"base-uri"/utf8>>,
<<"child-src"/utf8>>,
<<"connect-src"/utf8>>,
<<"default-src"/utf8>>,
<<"font-src"/utf8>>,
<<"form-action"/utf8>>,
<<"frame-ancestors"/utf8>>,
<<"frame-src"/utf8>>,
<<"img-src"/utf8>>,
<<"manifest-src"/utf8>>,
<<"media-src"/utf8>>,
<<"object-src"/utf8>>,
<<"script-src"/utf8>>,
<<"script-src-attr"/utf8>>,
<<"script-src-elem"/utf8>>,
<<"style-src"/utf8>>,
<<"style-src-attr"/utf8>>,
<<"style-src-elem"/utf8>>,
<<"upgrade-insecure-requests"/utf8>>,
<<"worker-src"/utf8>>],
fun(X) -> X =:= Name end
) of
{error, _} ->
{error, <<Name/binary, " is not a valid directive name"/utf8>>};
{ok, _} ->
case Name of
<<"upgrade-insecure-requests"/utf8>> ->
case Value of
[] ->
{ok, {directive, Name, Value}};
_ ->
{error,
<<"unexpected values for upgrade-insecure-requests directive"/utf8>>}
end;
_ ->
{ok, {directive, Name, Value}}
end
end.