Current section

Files

Jump to
go_over src go_over.erl
Raw

src/go_over.erl

-module(go_over).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([main/0]).
-export_type([flags/0]).
-type flags() :: {flags, boolean(), boolean(), boolean()}.
-spec spin_up() -> flags().
spin_up() ->
_assert_subject = go_over@yaml:start(),
{ok, _} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"go_over"/utf8>>,
function => <<"spin_up"/utf8>>,
line => 21})
end,
Args = shellout_ffi:start_arguments(),
Flags = {flags,
gleam@list:any(Args, fun(Arg) -> Arg =:= <<"--skip"/utf8>> end),
gleam@list:any(Args, fun(Arg@1) -> Arg@1 =:= <<"--force"/utf8>> end),
gleam@list:any(Args, fun(Arg@2) -> Arg@2 =:= <<"--fake"/utf8>> end)},
go_over@util:iffnil(
erlang:element(3, Flags) andalso erlang:element(2, Flags),
fun() ->
_pipe = shellout:style(
<<"Cannot specify both `--skip` & `--force`\n\n"/utf8>>,
shellout:color([<<"red"/utf8>>]),
[]
),
gleam@io:print(_pipe),
shellout_ffi:os_exit(1)
end
),
Flags.
-spec get_vulnerable_packages(list(go_over@packages:package()), flags()) -> list(go_over@warning:warning()).
get_vulnerable_packages(Pkgs, Flags) ->
_pipe = go_over@advisories:check_for_advisories(
Pkgs,
not erlang:element(2, Flags)
),
gleam@list:map(
_pipe,
fun(P) ->
{Pkg, Adv} = P,
go_over@warning:adv_to_warning(Pkg, Adv)
end
).
-spec get_retired_packges(list(go_over@packages:package()), flags()) -> list(go_over@warning:warning()).
get_retired_packges(Pkgs, Flags) ->
_pipe = Pkgs,
_pipe@1 = gleam@list:map(
_pipe,
fun(Pkg) ->
case go_over@retired:check_retired(
Pkg,
not erlang:element(2, Flags)
) of
{some, Ret} ->
{some, {Pkg, Ret}};
none ->
none
end
end
),
_pipe@2 = gleam@option:values(_pipe@1),
gleam@list:map(
_pipe@2,
fun(P) ->
{Pkg@1, Ret@1} = P,
go_over@warning:retired_to_warning(Pkg@1, Ret@1)
end
).
-spec print_warnings(list(go_over@warning:warning())) -> nil.
print_warnings(Vulns) ->
Len = erlang:length(Vulns),
_pipe = (<<<<<<"⛔ "/utf8, (gleam@int:to_string(Len))/binary>>/binary,
" WARNING(s) FOUND!"/utf8>>/binary,
(<<"\n-----------------------------------------------\n"/utf8>>)/binary>>),
gleam@io:print(_pipe),
Warn = begin
_pipe@1 = Vulns,
_pipe@2 = gleam@list:map(
_pipe@1,
fun(W) ->
shellout:style(
go_over@warning:print(W),
shellout:color([<<"red"/utf8>>]),
[]
)
end
),
gleam@string:join(
_pipe@2,
<<"\n-----------------------------------------------\n"/utf8>>
)
end,
gleam@io:print_error(<<Warn/binary, "\n\n"/utf8>>),
shellout_ffi:os_exit(1).
-spec main() -> nil.
main() ->
Flags = spin_up(),
go_over@util:throwaway(
erlang:element(3, Flags),
fun() -> simplifile:delete(go_over@constants:go_over_path()) end
),
go_over@util:iffnil(
erlang:element(4, Flags),
fun() ->
print_warnings(
[{warning,
<<"Fake Retired Package"/utf8>>,
<<"0.1.2"/utf8>>,
<<"Retired"/utf8>>,
retired,
direct},
{warning,
<<"Fake Vulnerable Package"/utf8>>,
<<"1.2.3"/utf8>>,
<<"Vulnerabe"/utf8>>,
vulnerable,
indirect}]
)
end
),
Pkgs = go_over@packages:read_manifest(<<"./manifest.toml"/utf8>>),
Vulnerable_packages = get_vulnerable_packages(Pkgs, Flags),
Retired_packages = get_retired_packges(Pkgs, Flags),
case lists:append(Retired_packages, Vulnerable_packages) of
[] ->
_pipe = shellout:style(
<<"✅ All good! ✨\n\n"/utf8>>,
shellout:color([<<"brightgreen"/utf8>>]),
[]
),
gleam@io:print(_pipe);
Vulns ->
print_warnings(Vulns)
end.