Current section
Files
Jump to
Current section
Files
src/go_over.erl
-module(go_over).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([main/0]).
-file("/home/bwireman/src/go-over/src/go_over.gleam", 24).
-spec get_vulnerable_packages(
list(go_over@packages:package()),
go_over@config:config()
) -> list(go_over@warning:warning()).
get_vulnerable_packages(Pkgs, Conf) ->
_pipe = go_over@advisories@advisories:check_for_advisories(
Pkgs,
erlang:element(5, Conf),
erlang:element(8, Conf),
erlang:element(9, Conf)
),
_pipe@1 = gleam@list:map(
_pipe,
fun(P) ->
gxyz@gxyz_tuple:map2_1(
P,
fun(_capture) ->
go_over@config:filter_advisory_ids(Conf, _capture)
end
)
end
),
_pipe@2 = gleam@list:filter(
_pipe@1,
fun(P@1) -> gxyz@gxyz_tuple:at2_1(P@1) =:= [] end
),
gleam@list:flat_map(
_pipe@2,
fun(_capture@1) ->
gxyz@gxyz_tuple:apply_from2(
_capture@1,
fun go_over@warning:adv_to_warning/2
)
end
).
-file("/home/bwireman/src/go-over/src/go_over.gleam", 33).
-spec get_retired_packages(
list(go_over@packages:package()),
go_over@config:config()
) -> list(go_over@warning:warning()).
get_retired_packages(Pkgs, Conf) ->
_pipe = Pkgs,
_pipe@2 = gleam@list:map(
_pipe,
fun(Pkg) ->
_pipe@1 = go_over@retired@retired:check_retired(
Pkg,
erlang:element(5, Conf),
erlang:element(8, Conf),
erlang:element(9, Conf)
),
gleam@option:map(_pipe@1, fun(Ret) -> {Pkg, Ret} end)
end
),
_pipe@3 = gleam@option:values(_pipe@2),
gleam@list:map(
_pipe@3,
fun(_capture) ->
gxyz@gxyz_tuple:apply_from2(
_capture,
fun go_over@warning:retired_to_warning/2
)
end
).
-file("/home/bwireman/src/go-over/src/go_over.gleam", 43).
-spec get_outdated_packages(
list(go_over@packages:package()),
go_over@config:config()
) -> list(go_over@warning:warning()).
get_outdated_packages(Pkgs, Conf) ->
_pipe = Pkgs,
_pipe@1 = gleam@list:map(
_pipe,
fun(Pkg) ->
case go_over@retired@outdated:check_outdated(
Pkg,
erlang:element(5, Conf),
erlang:element(8, Conf),
erlang:element(9, Conf)
) of
{some, Ret} ->
{some, {Pkg, Ret}};
none ->
none
end
end
),
_pipe@2 = gleam@option:values(_pipe@1),
gleam@list:map(
_pipe@2,
fun(_capture) ->
gxyz@gxyz_tuple:apply_from2(
_capture,
fun go_over@warning:outdated_to_warning/2
)
end
).
-file("/home/bwireman/src/go-over/src/go_over.gleam", 55).
-spec print_warnings_count(list(go_over@warning:warning())) -> nil.
print_warnings_count(Vulns) ->
_pipe = (<<<<<<"⛔ "/utf8,
(erlang:integer_to_binary(erlang:length(Vulns)))/binary>>/binary,
" WARNING(s) FOUND!"/utf8>>/binary,
(<<"\n-----------------------------------------------\n"/utf8>>)/binary>>),
gleam_stdlib:print_error(_pipe).
-file("/home/bwireman/src/go-over/src/go_over.gleam", 65).
-spec print_warnings(list(go_over@warning:warning()), go_over@config:config()) -> nil.
print_warnings(Vulns, Conf) ->
case erlang:element(7, Conf) of
minimal ->
_pipe = Vulns,
_pipe@1 = gleam@function:tap(_pipe, fun print_warnings_count/1),
_pipe@2 = gleam@list:map(
_pipe@1,
fun go_over@warning:format_as_string_minimal/1
),
_pipe@3 = gleam@string:join(_pipe@2, <<""/utf8>>),
gleam_stdlib:print_error(_pipe@3);
json ->
_pipe@4 = Vulns,
_pipe@5 = gleam@list:map(
_pipe@4,
fun go_over@warning:format_as_json/1
),
_pipe@6 = gleam@json:preprocessed_array(_pipe@5),
_pipe@7 = gleam@json:to_string(_pipe@6),
gleam_stdlib:print_error(_pipe@7);
_ ->
_pipe@8 = Vulns,
_pipe@9 = gleam@function:tap(_pipe@8, fun print_warnings_count/1),
_pipe@10 = gleam@list:map(
_pipe@9,
fun go_over@warning:format_as_string/1
),
_pipe@11 = gleam@string:join(
_pipe@10,
<<"\n-----------------------------------------------\n"/utf8>>
),
gleam_stdlib:print_error(_pipe@11)
end,
shellout_ffi:os_exit(1).
-file("/home/bwireman/src/go-over/src/go_over.gleam", 91).
-spec main() -> nil.
main() ->
Conf@1 = case go_over@config:spin_up(
go_over@config:read_config(<<"gleam.toml"/utf8>>),
shellout_ffi:start_arguments()
) of
{error, E} ->
gleam_stdlib:println_error(E),
shellout_ffi:os_exit(0),
erlang:error(#{gleam_error => panic,
message => <<"Unreachable, please create an issue in https://github.com/bwireman/go-over if you see this"/utf8>>,
module => <<"go_over"/utf8>>,
function => <<"main"/utf8>>,
line => 98});
{ok, Conf} ->
Conf
end,
Spinner = go_over@util@spinner:new_spinner(
<<"Let's do this!"/utf8>>,
erlang:element(8, Conf@1)
),
gxyz@gxyz_function:ignore_result(
erlang:element(5, Conf@1),
gxyz@gxyz_function:freeze1(
fun simplifile_erl:delete/1,
go_over@util@constants:go_over_path(erlang:element(9, Conf@1))
)
),
go_over@util@spinner:set_text_spinner(
Spinner,
<<"Reading manifest"/utf8>>,
erlang:element(8, Conf@1)
),
Pkgs = begin
_pipe = go_over@packages:read_manifest(<<"manifest.toml"/utf8>>),
_pipe@1 = go_over@config:filter_dev_dependencies(Conf@1, _pipe),
_pipe@2 = go_over@config:filter_packages(Conf@1, _pipe@1),
go_over@config:filter_indirect(Conf@1, _pipe@2)
end,
go_over@util@spinner:set_text_spinner(
Spinner,
<<"Checking packages: "/utf8,
(go_over@util@print:raw(<<"vulnerable"/utf8>>, <<"red"/utf8>>))/binary>>,
erlang:element(8, Conf@1)
),
Vulnerable_packages = get_vulnerable_packages(Pkgs, Conf@1),
go_over@util@spinner:set_text_spinner(
Spinner,
<<"Checking packages: "/utf8,
(go_over@util@print:raw(<<"retired"/utf8>>, <<"yellow"/utf8>>))/binary>>,
erlang:element(8, Conf@1)
),
Retired_packages = get_retired_packages(Pkgs, Conf@1),
go_over@util@spinner:set_text_spinner(
Spinner,
<<"Checking packages: "/utf8,
(go_over@util@print:raw(
<<"outdated"/utf8>>,
<<"brightmagenta"/utf8>>
))/binary>>,
erlang:element(8, Conf@1)
),
Outdated_packages = gxyz@gxyz_function:iff(
erlang:element(3, Conf@1),
gxyz@gxyz_function:freeze2(fun get_outdated_packages/2, Pkgs, Conf@1),
[]
),
gxyz@gxyz_function:iff_nil(
erlang:element(6, Conf@1),
gxyz@gxyz_function:freeze2(
fun print_warnings/2,
[{warning,
none,
<<"fake"/utf8>>,
<<"x.y.z"/utf8>>,
<<"Retired"/utf8>>,
vulnerable,
<<"Critical"/utf8>>,
direct},
{warning,
none,
<<"another_fake"/utf8>>,
<<"1.2.3"/utf8>>,
<<"Vulnerable"/utf8>>,
vulnerable,
<<"High"/utf8>>,
direct},
{warning,
none,
<<"and_another"/utf8>>,
<<"4.5.6"/utf8>>,
<<"Vulnerable"/utf8>>,
vulnerable,
<<"Moderate"/utf8>>,
direct},
{warning,
none,
<<"one_more"/utf8>>,
<<"7.8.9"/utf8>>,
<<"Vulnerable"/utf8>>,
vulnerable,
<<"LOW"/utf8>>,
indirect},
{warning,
none,
<<"this_one_was_retired"/utf8>>,
<<"10.11.12"/utf8>>,
<<"Retired"/utf8>>,
retired,
<<"Package Retired"/utf8>>,
indirect}],
Conf@1
)
),
go_over@util@spinner:set_text_spinner(
Spinner,
<<"Filtering warnings"/utf8>>,
erlang:element(8, Conf@1)
),
Warnings = begin
_pipe@3 = lists:append(Retired_packages, Vulnerable_packages),
_pipe@4 = lists:append(_pipe@3, Outdated_packages),
go_over@config:filter_severity(Conf@1, _pipe@4)
end,
go_over@util@spinner:stop_spinner(Spinner),
case Warnings of
[] ->
go_over@util@print:success(<<"✅ No warnings found!"/utf8>>);
Vulns ->
print_warnings(Vulns, Conf@1)
end.