diff --git a/.tool-versions b/.tool-versions index b962cc3a8..c34e3c20f 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,4 +1,4 @@ -elixir 1.14.5-otp-25 -erlang 25.3.2.12 +elixir 1.16.3-otp-26 +erlang 26.2.5 python 3.9.16 poetry 1.7.0 diff --git a/apps/alb_monitor/lib/alb_monitor/monitor.ex b/apps/alb_monitor/lib/alb_monitor/monitor.ex index c62e2d15a..611d602e7 100644 --- a/apps/alb_monitor/lib/alb_monitor/monitor.ex +++ b/apps/alb_monitor/lib/alb_monitor/monitor.ex @@ -109,7 +109,7 @@ defmodule ALBMonitor.Monitor do end end - defp log_warn(message) when is_binary(message), do: Logger.warn(["alb_monitor ", message]) + defp log_warn(message) when is_binary(message), do: Logger.warning(["alb_monitor ", message]) defp log_info(message) when is_binary(message), do: Logger.info(["alb_monitor ", message]) defp schedule_check(%State{check_interval: check_interval}) do diff --git a/apps/api_accounts/lib/api_accounts.ex b/apps/api_accounts/lib/api_accounts.ex index 6b2cee1bb..48ff74362 100644 --- a/apps/api_accounts/lib/api_accounts.ex +++ b/apps/api_accounts/lib/api_accounts.ex @@ -660,6 +660,8 @@ defmodule ApiAccounts do def totp_uri(%User{} = user) do host = System.get_env("HOST") - NimbleTOTP.otpauth_uri("MBTA-API: #{host}/#{user.email}", user.totp_secret_bin, issuer: "MBTA") + NimbleTOTP.otpauth_uri("MBTA-API: #{host}/#{user.email}", user.totp_secret_bin, + issuer: "MBTA" + ) end end diff --git a/apps/api_web/.sobelow-skips b/apps/api_web/.sobelow-skips new file mode 100644 index 000000000..4047118ca --- /dev/null +++ b/apps/api_web/.sobelow-skips @@ -0,0 +1,4 @@ + +0430EA328823B25D53909F55172F2E3F +7DB23C919D8A36AE6A649DA0A83FBAE2 +CB8E15060F63E711108608C13BA30278 \ No newline at end of file diff --git a/apps/api_web/config/test.exs b/apps/api_web/config/test.exs index e1ceb7c13..f788cc772 100644 --- a/apps/api_web/config/test.exs +++ b/apps/api_web/config/test.exs @@ -25,4 +25,4 @@ config :recaptcha, secret: "6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe" # Print only warnings and errors during test -config :logger, level: :warn +config :logger, level: :warning diff --git a/apps/api_web/lib/api_web/templates/client_portal/user/_new.html.heex b/apps/api_web/lib/api_web/templates/client_portal/user/_new.html.heex index 80d73f832..150141078 100644 --- a/apps/api_web/lib/api_web/templates/client_portal/user/_new.html.heex +++ b/apps/api_web/lib/api_web/templates/client_portal/user/_new.html.heex @@ -24,12 +24,16 @@ <.form_group form={f} field={:password_confirmation}> <%= label(f, :password_confirmation, class: "control-label") %> - <%= password_input(f, :password_confirmation, class: "form-control", autocomplete: "off") %> + <%= password_input(f, :password_confirmation, + class: "form-control", + autocomplete: "off" + ) %> <%= error_tag(f, :password_confirmation) %>
<%= if Application.get_env(:recaptcha, :enabled) do %> + <%= raw(Recaptcha.Template.display(callback: "recaptchaCompleted")) %> <% end %>
diff --git a/apps/api_web/mix.exs b/apps/api_web/mix.exs index dd893d50d..832aa6e56 100644 --- a/apps/api_web/mix.exs +++ b/apps/api_web/mix.exs @@ -73,7 +73,6 @@ defmodule ApiWeb.Mixfile do {:api_accounts, in_umbrella: true}, {:memcachex, "~> 0.5"}, {:ehmon, github: "mbta/ehmon", branch: "master", only: :prod}, - {:benchwarmer, "~> 0.0", only: [:dev, :test]}, {:dialyxir, "~> 1.2", only: [:dev, :test], runtime: false}, {:logster, "~> 1.1"}, {:phoenix_swagger, "~> 0.8"}, diff --git a/apps/api_web/test/test_helper.exs b/apps/api_web/test/test_helper.exs index a689c8eb1..28d8dae08 100644 --- a/apps/api_web/test/test_helper.exs +++ b/apps/api_web/test/test_helper.exs @@ -2,7 +2,7 @@ excludes = [:integration] # try to connect to memcache: if it fails, don't run those tests excludes = - case :gen_tcp.connect('localhost', 11_211, [:inet], 100) do + case :gen_tcp.connect(~c"localhost", 11_211, [:inet], 100) do {:ok, sock} -> :gen_tcp.close(sock) excludes diff --git a/apps/fetch/lib/fetch/worker.ex b/apps/fetch/lib/fetch/worker.ex index 06275f7a7..4fde39e28 100644 --- a/apps/fetch/lib/fetch/worker.ex +++ b/apps/fetch/lib/fetch/worker.ex @@ -64,7 +64,7 @@ defmodule Fetch.Worker do def handle_info(message, state) do _ = - Logger.warn(fn -> + Logger.warning(fn -> # no cover "unexpected message to Fetch.Worker[#{state.url}]: #{inspect(message)}" end) @@ -200,7 +200,7 @@ defmodule Fetch.Worker do end defp logger_with_level_for_error({:error, %HTTPoison.Error{reason: :timeout}}), - do: &Logger.warn/1 + do: &Logger.warning/1 defp logger_with_level_for_error(_), do: &Logger.error/1 @@ -231,7 +231,7 @@ defmodule Fetch.Worker do :ok {:error, posix} -> - _ = Logger.warn("Error while writing #{cache_file}: #{inspect(posix)}") + _ = Logger.warning("Error while writing #{cache_file}: #{inspect(posix)}") :ok end end diff --git a/apps/health/test/health/checkers/run_queue_test.exs b/apps/health/test/health/checkers/run_queue_test.exs index e995d8ee0..7c245692a 100644 --- a/apps/health/test/health/checkers/run_queue_test.exs +++ b/apps/health/test/health/checkers/run_queue_test.exs @@ -13,7 +13,7 @@ defmodule Health.Checkers.RunQueueTest do end test "does nothing when the log level is high" do - assert log_processes(false, :warn) == :ignored + assert log_processes(false, :warning) == :ignored end end diff --git a/apps/parse/lib/parse/commuter_rail_occupancies.ex b/apps/parse/lib/parse/commuter_rail_occupancies.ex index a30a976bf..973c06aae 100644 --- a/apps/parse/lib/parse/commuter_rail_occupancies.ex +++ b/apps/parse/lib/parse/commuter_rail_occupancies.ex @@ -14,7 +14,7 @@ defmodule Parse.CommuterRailOccupancies do Enum.flat_map(data, &parse_record/1) e -> - Logger.warn("#{__MODULE__} decode_error e=#{inspect(e)}") + Logger.warning("#{__MODULE__} decode_error e=#{inspect(e)}") [] end end @@ -38,13 +38,13 @@ defmodule Parse.CommuterRailOccupancies do ] else error -> - Logger.warn("#{__MODULE__} parse_error error=#{inspect(error)} #{inspect(record)}") + Logger.warning("#{__MODULE__} parse_error error=#{inspect(error)} #{inspect(record)}") [] end end defp parse_record(record) do - Logger.warn("#{__MODULE__} parse_error error=missing_fields #{inspect(record)}") + Logger.warning("#{__MODULE__} parse_error error=missing_fields #{inspect(record)}") [] end diff --git a/apps/state/bench/server.exs b/apps/state/bench/server.exs index b22a35ff2..c0bb02667 100644 --- a/apps/state/bench/server.exs +++ b/apps/state/bench/server.exs @@ -15,7 +15,7 @@ defmodule State.ServerBench do Application.ensure_all_started(:mnesia) State.Schedule.start_link State.Schedule.new_state(@items) - Logger.configure(level: :warn) + Logger.configure(level: :warning) {:ok, :ignored} end diff --git a/apps/state/lib/logger.ex b/apps/state/lib/logger.ex index c6b359676..c43dddd2d 100644 --- a/apps/state/lib/logger.ex +++ b/apps/state/lib/logger.ex @@ -12,7 +12,7 @@ defmodule State.Logger do @doc """ Measures time of `function` and logs """ - @spec debug_time(measured :: (() -> result), message :: (milliseconds :: float -> String.t())) :: + @spec debug_time(measured :: (-> result), message :: (milliseconds :: float -> String.t())) :: result when result: any def debug_time(measured, message) when is_function(measured, 0) and is_function(message, 1) do diff --git a/apps/state/lib/state/facility.ex b/apps/state/lib/state/facility.ex index 7132850c6..f72dfdc85 100644 --- a/apps/state/lib/state/facility.ex +++ b/apps/state/lib/state/facility.ex @@ -16,7 +16,7 @@ defmodule State.Facility do optional(:types) => [String.t()] } - @type facility_search :: (() -> [Facility.t()]) + @type facility_search :: (-> [Facility.t()]) # If you change this list, be sure to also update the gtfs-documentation @facility_types ~w( diff --git a/apps/state/lib/state/stop.ex b/apps/state/lib/state/stop.ex index fe4bb92ee..fdafb12c4 100644 --- a/apps/state/lib/state/stop.ex +++ b/apps/state/lib/state/stop.ex @@ -25,7 +25,7 @@ defmodule State.Stop do optional(:route_types) => [Model.Route.route_type()] } - @type stop_search :: (() -> [Stop.t()]) + @type stop_search :: (-> [Stop.t()]) def start_link(_opts \\ []) do Supervisor.start_link(__MODULE__, nil, name: __MODULE__) diff --git a/apps/state/test/state/routes_by_service_test.exs b/apps/state/test/state/routes_by_service_test.exs index 350fa0c12..a46d53619 100644 --- a/apps/state/test/state/routes_by_service_test.exs +++ b/apps/state/test/state/routes_by_service_test.exs @@ -47,7 +47,7 @@ defmodule State.RoutesByServiceTest do update!() on_exit(fn -> - Logger.configure(level: :warn) + Logger.configure(level: :warning) end) end diff --git a/apps/state_mediator/lib/state_mediator/mediator.ex b/apps/state_mediator/lib/state_mediator/mediator.ex index f772065e6..ecc9a94f3 100644 --- a/apps/state_mediator/lib/state_mediator/mediator.ex +++ b/apps/state_mediator/lib/state_mediator/mediator.ex @@ -159,7 +159,7 @@ defmodule StateMediator.Mediator do end) end - defp logger_with_level_for_error(%HTTPoison.Error{reason: :timeout}), do: &Logger.warn/1 + defp logger_with_level_for_error(%HTTPoison.Error{reason: :timeout}), do: &Logger.warning/1 defp logger_with_level_for_error(_), do: &Logger.error/1 @spec expand_url(String.t() | {module(), atom(), [any()]}) :: String.t() diff --git a/apps/state_mediator/test/gtfs_decompress_test.exs b/apps/state_mediator/test/gtfs_decompress_test.exs index 58e98d775..4da72bd37 100644 --- a/apps/state_mediator/test/gtfs_decompress_test.exs +++ b/apps/state_mediator/test/gtfs_decompress_test.exs @@ -55,7 +55,7 @@ defmodule GtfsDecompressTest do {to_charlist(filename), body(filename)} end - {:ok, {_, body}} = :zip.create('GTFS.zip', file_list, [:memory]) + {:ok, {_, body}} = :zip.create(~c"GTFS.zip", file_list, [:memory]) body end diff --git a/apps/state_mediator/test/state_mediator/integration/gtfs_test.exs b/apps/state_mediator/test/state_mediator/integration/gtfs_test.exs index 3c42cdebe..01cae14b2 100644 --- a/apps/state_mediator/test/state_mediator/integration/gtfs_test.exs +++ b/apps/state_mediator/test/state_mediator/integration/gtfs_test.exs @@ -31,7 +31,7 @@ defmodule StateMediator.Integration.GtfsTest do receive_items(State.RoutesPatternsAtStop) receive_items(State.Shape) receive_items(State.StopsOnRoute) - Logger.configure(level: :warn) + Logger.configure(level: :warning) end defp maybe_start_lasso!(nil) do diff --git a/apps/state_mediator/test/state_mediator_test.exs b/apps/state_mediator/test/state_mediator_test.exs index 6b86b67f2..1acb48aa8 100644 --- a/apps/state_mediator/test/state_mediator_test.exs +++ b/apps/state_mediator/test/state_mediator_test.exs @@ -8,7 +8,7 @@ defmodule StateMediatorTest do test "returns environment value when set set" do expected = "config_b" - :os.putenv('FAKE_VAR_B', String.to_charlist(expected)) + :os.putenv(~c"FAKE_VAR_B", String.to_charlist(expected)) assert StateMediator.source_url(State.FakeModuleB) == expected end diff --git a/mix.lock b/mix.lock index da8e6e431..88a35c0a9 100644 --- a/mix.lock +++ b/mix.lock @@ -5,7 +5,6 @@ "bandit": {:hex, :bandit, "1.2.2", "569fe5d0efb107c9af37a1e37e25ce2ceec293101a2d4bc512876fc3207192b5", [:mix], [{:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:thousand_island, "~> 1.0", [hex: :thousand_island, repo: "hexpm", optional: false]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "2f89adb7281c78d4e75733e0a9e1b24f46f84d2993963d6fa57d0eafadec5f03"}, "bcrypt_elixir": {:hex, :bcrypt_elixir, "3.1.0", "0b110a9a6c619b19a7f73fa3004aa11d6e719a67e672d1633dc36b6b2290a0f7", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "2ad2acb5a8bc049e8d5aa267802631912bb80d5f4110a178ae7999e69dca1bf7"}, "benchfella": {:hex, :benchfella, "0.3.5", "b2122c234117b3f91ed7b43b6e915e19e1ab216971154acd0a80ce0e9b8c05f5", [:mix], [], "hexpm", "23f27cbc482cbac03fc8926441eb60a5e111759c17642bac005c3225f5eb809d"}, - "benchwarmer": {:hex, :benchwarmer, "0.0.2", "902e5c020608647b07c38b82103e4af6d2667dfd5d5d13c67382238de6943136", [:mix], [], "hexpm", "8b98b39c1c50df624f9c2d13ca953eeed465eed6feda975da26b479df2b4c9f5"}, "bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"}, "castore": {:hex, :castore, "0.1.22", "4127549e411bedd012ca3a308dede574f43819fe9394254ca55ab4895abfa1a2", [:mix], [], "hexpm", "c17576df47eb5aa1ee40cc4134316a99f5cad3e215d5c77b8dd3cfef12a22cac"}, "certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"}, @@ -85,8 +84,8 @@ "result": {:hex, :result, "1.7.2", "a57c569f7cf5c158d2299d3b5624a48b69bd1520d0771dc711bcf9f3916e8ab6", [:mix], [], "hexpm", "89f98e98cfbf64237ecf4913aa36b76b80463e087775d19953dc4b435a35f087"}, "rstar": {:git, "https://github.com/armon/erl-rstar.git", "a406b2cce609029bf65b9ccfbe93a0416c0ee0cd", []}, "sentry": {:hex, :sentry, "8.0.6", "c8de1bf0523bc120ec37d596c55260901029ecb0994e7075b0973328779ceef7", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.3", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "051a2d0472162f3137787c7c9d6e6e4ef239de9329c8c45b1f1bf1e9379e1883"}, - "sobelow": {:hex, :sobelow, "0.11.1", "23438964486f8112b41e743bbfd402da3e5b296fdc9eacab29914b79c48916dd", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "9897363a7eff96f4809304a90aad819e2ad5e5d24db547af502885146746a53c"}, - "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, + "sobelow": {:hex, :sobelow, "0.13.0", "218afe9075904793f5c64b8837cc356e493d88fddde126a463839351870b8d1e", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "cd6e9026b85fc35d7529da14f95e85a078d9dd1907a9097b3ba6ac7ebbe34a0d"}, + "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"}, "stream_data": {:hex, :stream_data, "0.5.0", "b27641e58941685c75b353577dc602c9d2c12292dd84babf506c2033cd97893e", [:mix], [], "hexpm", "012bd2eec069ada4db3411f9115ccafa38540a3c78c4c0349f151fc761b9e271"}, "sweet_xml": {:hex, :sweet_xml, "0.7.3", "debb256781c75ff6a8c5cbf7981146312b66f044a2898f453709a53e5031b45b", [:mix], [], "hexpm", "e110c867a1b3fe74bfc7dd9893aa851f0eed5518d0d7cad76d7baafd30e4f5ba"}, "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},