Skip to content

Commit ff37057

Browse files
committed
Improve deps.get formatting
1 parent be9fd2b commit ff37057

5 files changed

Lines changed: 66 additions & 72 deletions

File tree

lib/hex/remote_converger.ex

Lines changed: 23 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -494,54 +494,35 @@ defmodule Hex.RemoteConverger do
494494
end)
495495
end
496496

497-
defp print_status(nil, advisories, mod, name, previous_version, version, warning) do
498-
case mod do
499-
:new ->
500-
Hex.Shell.info(Hex.Shell.format([:green, " #{name} #{version}", :red, "#{warning}"]))
501-
502-
:eq ->
503-
Hex.Shell.info(" #{name} #{version}")
504-
505-
:lt ->
506-
Hex.Shell.info(
507-
Hex.Shell.format([
508-
:yellow,
509-
" #{name} #{previous_version} => #{version}",
510-
:red,
511-
"#{warning}"
512-
])
513-
)
514-
515-
:gt ->
516-
Hex.Shell.info(
517-
Hex.Shell.format([
518-
:green,
519-
" #{name} #{previous_version} => #{version}",
520-
:red,
521-
"#{warning}"
522-
])
523-
)
524-
end
525-
526-
print_advisories(version_string(mod, name, previous_version, version), advisories)
527-
end
528-
529-
defp print_status(retired, advisories, mod, name, previous_version, version, _warning) do
530-
version_string = version_string(mod, name, previous_version, version)
497+
defp print_status(retired, advisories, mod, name, previous_version, version, warning) do
498+
version_str = version_string(mod, name, previous_version, version)
499+
version_color = if mod in [:new, :gt], do: :green, else: if(mod == :lt, do: :yellow, else: [])
500+
501+
line =
502+
[version_color, version_str, :reset]
503+
|> then(fn
504+
acc when is_nil(retired) -> acc
505+
acc -> [acc, :yellow, " RETIRED!", :reset]
506+
end)
507+
|> then(fn
508+
acc when advisories == [] -> acc
509+
acc -> [acc, :red, " VULNERABLE!", :reset]
510+
end)
511+
|> then(fn
512+
acc when is_nil(warning) -> acc
513+
acc -> [acc, :red, warning, :reset]
514+
end)
531515

532-
Hex.Shell.warn("#{version_string} RETIRED!")
533-
Hex.Shell.warn(" #{Hex.Utils.package_retirement_message(retired)}")
516+
Hex.Shell.info(Hex.Shell.format(line))
534517

535-
print_advisories(version_string, advisories)
536-
end
518+
if retired do
519+
Hex.Shell.warn(" #{Hex.Utils.package_retirement_message(retired)}")
520+
end
537521

538-
defp print_advisories(version_string, advisories) do
539522
Enum.each(advisories, fn advisory ->
540523
Hex.Shell.info(
541-
Hex.Shell.format([:yellow, "#{version_string} has a security advisory!", :reset])
524+
Hex.Shell.format([" " | Hex.Utils.format_advisory_ansi(advisory, " ")])
542525
)
543-
544-
Hex.Shell.info(Hex.Shell.format([" " | Hex.Utils.format_advisory_ansi(advisory)]))
545526
end)
546527
end
547528

lib/hex/utils.ex

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -273,31 +273,43 @@ defmodule Hex.Utils do
273273
def advisory_severity_color(:SEVERITY_CRITICAL), do: [:bright, :red]
274274
def advisory_severity_color(_), do: :normal
275275

276-
def format_advisory(%{summary: summary, severity: severity, html_url: url}) do
277-
"(#{advisory_severity(severity)}) #{summary} - #{url}"
278-
end
279-
280-
def format_advisory(%{summary: summary, html_url: url}) do
281-
"#{summary} - #{url}"
282-
end
283-
284-
def format_advisory(%{summary: summary, severity: severity}) do
285-
"(#{advisory_severity(severity)}) #{summary}"
276+
def format_advisory(%{id: id, summary: summary} = advisory) do
277+
id
278+
|> then(fn acc ->
279+
case advisory do
280+
%{severity: s} -> "#{acc} (#{advisory_severity(s)})"
281+
_ -> acc
282+
end
283+
end)
284+
|> then(&"#{&1}: #{summary}")
285+
|> then(fn acc ->
286+
case advisory do
287+
%{html_url: url} -> "#{acc} - #{url}"
288+
_ -> acc
289+
end
290+
end)
286291
end
287292

288-
def format_advisory(%{summary: summary}) do
289-
summary
290-
end
293+
def format_advisory_ansi(advisory, line_prefix \\ "")
291294

292-
def format_advisory_ansi(%{severity: severity} = advisory) do
293-
color = advisory_severity_color(severity)
294-
label = "(#{advisory_severity(severity)})"
295-
rest = " " <> format_advisory(Map.delete(advisory, :severity))
296-
List.flatten([color, label, :reset, rest])
297-
end
295+
def format_advisory_ansi(%{id: id, summary: summary} = advisory, line_prefix) do
296+
[:red, id]
297+
|> then(fn acc ->
298+
case advisory do
299+
%{severity: s} ->
300+
[acc, " ", advisory_severity_color(s), "(#{advisory_severity(s)})", :red]
298301

299-
def format_advisory_ansi(advisory) do
300-
[format_advisory(advisory)]
302+
_ ->
303+
acc
304+
end
305+
end)
306+
|> then(&[&1, ": #{summary}"])
307+
|> then(fn acc ->
308+
case advisory do
309+
%{html_url: url} -> [acc, :reset, "\n", line_prefix, " ", url]
310+
_ -> [acc, :reset]
311+
end
312+
end)
301313
end
302314

303315
# From https://github.com/fishcakez/dialyze/blob/6698ae582c77940ee10b4babe4adeff22f1b7779/lib/mix/tasks/dialyze.ex#L168

test/hex/remote_converger_test.exs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,11 +254,12 @@ defmodule Hex.RemoteConvergerTest do
254254
info_messages = collect_info_messages([])
255255

256256
assert Enum.any?(info_messages, fn msg ->
257-
msg =~ "rc_advisory_package 0.1.0 has a security advisory!"
257+
msg =~ "rc_advisory_package 0.1.0" and msg =~ "VULNERABLE!"
258258
end)
259259

260260
assert Enum.any?(info_messages, fn msg ->
261-
msg =~ "(HIGH) Remote code execution via crafted input"
261+
msg =~ "GHSA-rc-0001" and msg =~ "(HIGH)" and
262+
msg =~ "Remote code execution via crafted input"
262263
end)
263264
end)
264265
end)

test/hex/utils_test.exs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,23 @@ defmodule Hex.UtilsTest do
2424
end
2525

2626
describe "format_advisory/1" do
27-
test "includes severity and url" do
27+
test "includes id, severity and url" do
2828
assert Hex.Utils.format_advisory(@advisory) ==
29-
"(HIGH) Remote code execution via crafted input - https://github.com/advisories/GHSA-test-0001"
29+
"GHSA-test-0001 (HIGH): Remote code execution via crafted input - https://github.com/advisories/GHSA-test-0001"
3030
end
3131

32-
test "without severity omits severity prefix" do
32+
test "without severity omits severity" do
3333
advisory = Map.delete(@advisory, :severity)
3434

3535
assert Hex.Utils.format_advisory(advisory) ==
36-
"Remote code execution via crafted input - https://github.com/advisories/GHSA-test-0001"
36+
"GHSA-test-0001: Remote code execution via crafted input - https://github.com/advisories/GHSA-test-0001"
3737
end
3838

39-
test "without url omits url suffix" do
39+
test "without url omits url" do
4040
advisory = Map.delete(@advisory, :html_url)
4141

4242
assert Hex.Utils.format_advisory(advisory) ==
43-
"(HIGH) Remote code execution via crafted input"
43+
"GHSA-test-0001 (HIGH): Remote code execution via crafted input"
4444
end
4545
end
4646
end

test/mix/tasks/hex.audit_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ defmodule Mix.Tasks.Hex.AuditTest do
5757
assert catch_throw(Mix.Task.run("hex.audit")) == {:exit_code, 1}
5858

5959
expected =
60-
"(HIGH) Remote code execution via crafted input - https://github.com/advisories/GHSA-test-0001"
60+
"GHSA-test-0001 (HIGH): Remote code execution via crafted input - https://github.com/advisories/GHSA-test-0001"
6161

6262
assert_advisory_output_row(@package_name, "1.1.0", expected)
6363
assert_received {:mix_shell, :error, ["Found packages with security advisories"]}

0 commit comments

Comments
 (0)